<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Ilmin Cho | Keep Learning]]></title><description><![CDATA[Ilmin | Personal Blog]]></description><link>https://ilmincho.me/</link><image><url>https://ilmincho.me/favicon.png</url><title>Ilmin Cho | Keep Learning</title><link>https://ilmincho.me/</link></image><generator>Ghost 5.59</generator><lastBuildDate>Fri, 24 Apr 2026 12:06:45 GMT</lastBuildDate><atom:link href="https://ilmincho.me/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[GitFolio, GitHub-based Automated Resume Generation Service]]></title><description><![CDATA[<hr>
<h2 id="kakaotech-bootcamp20240919-1227"><strong> KakaoTech Bootcamp - (2024.09.19 ~ 12.27)</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/KTB-Sixmen?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">KTB-Sixmen</div><div class="kg-bookmark-description">KTB-Sixmen has 5 repositories available. Follow their code on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://avatars.githubusercontent.com/u/183189836?s=280&amp;v=4" alt></div></a></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-39.png" class="kg-image" alt loading="lazy" width="2000" height="1003" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-39.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-39.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-39.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-39.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xD300;&#xC6D0; &#xC18C;&#xAC1C;</span></figcaption></figure>
<hr>
<figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://ilmincho.me/content/media/2024/12/12--_--------_-----------_-----1226_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://ilmincho.me/content/media/2024/12/12--_--------_-----------_-----1226.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://ilmincho.me/content/media/2024/12/12--_--------_-----------_-----1226_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">2:00</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate">1&#xD7;</button>
                        <button class="kg-video-unmute-icon">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><a href="https://www.youtube.com/watch?v=Y-kImm8S-58&amp;ref=ilmincho.me" target="_blank" rel="noreferrer noopener" title="https://www.youtube.com/watch?v=Y-kImm8S-58"><span style="white-space: pre-wrap;">https://www.youtube.com/watch?v=Y-kImm8S-58</span></a></p></figcaption>
        </figure>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://goormkdx.notion.site/12-618a5b98e7f8460d8d4b74a4c83535ec?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Notion &#x2013; The all-in-one workspace for your notes, tasks, wikis, and databases.</div><div class="kg-bookmark-description">A</div></div></a></figure>]]></description><link>https://ilmincho.me/gitfolio/</link><guid isPermaLink="false">6706b31c8680d90496636665</guid><category><![CDATA[Projects]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Fri, 27 Dec 2024 05:00:00 GMT</pubDate><media:content url="https://ilmincho.me/content/images/2024/12/ezgif.com-animated-gif-maker--1-.gif" medium="image"/><content:encoded><![CDATA[<hr>
<h2 id="kakaotech-bootcamp20240919-1227"><strong> KakaoTech Bootcamp - (2024.09.19 ~ 12.27)</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/KTB-Sixmen?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">KTB-Sixmen</div><div class="kg-bookmark-description">KTB-Sixmen has 5 repositories available. Follow their code on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="GitFolio, GitHub-based Automated Resume Generation Service"><span class="kg-bookmark-author">GitHub</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://avatars.githubusercontent.com/u/183189836?s=280&amp;v=4" alt="GitFolio, GitHub-based Automated Resume Generation Service"></div></a></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-39.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1003" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-39.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-39.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-39.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-39.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xD300;&#xC6D0; &#xC18C;&#xAC1C;</span></figcaption></figure>
<hr>
<figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://ilmincho.me/content/media/2024/12/12--_--------_-----------_-----1226_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://ilmincho.me/content/media/2024/12/12--_--------_-----------_-----1226.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://ilmincho.me/content/media/2024/12/12--_--------_-----------_-----1226_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">2:00</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate">1&#xD7;</button>
                        <button class="kg-video-unmute-icon">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><img src="https://ilmincho.me/content/images/2024/12/ezgif.com-animated-gif-maker--1-.gif" alt="GitFolio, GitHub-based Automated Resume Generation Service"><p><a href="https://www.youtube.com/watch?v=Y-kImm8S-58&amp;ref=ilmincho.me" target="_blank" rel="noreferrer noopener" title="https://www.youtube.com/watch?v=Y-kImm8S-58"><span style="white-space: pre-wrap;">https://www.youtube.com/watch?v=Y-kImm8S-58</span></a></p></figcaption>
        </figure>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://goormkdx.notion.site/12-618a5b98e7f8460d8d4b74a4c83535ec?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Notion &#x2013; The all-in-one workspace for your notes, tasks, wikis, and databases.</div><div class="kg-bookmark-description">A new tool that blends your everyday work apps into one. It&#x2019;s the all-in-one workspace for you and your team</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://goormkdx.notion.site/images/logo-ios.png" alt="GitFolio, GitHub-based Automated Resume Generation Service"><span class="kg-bookmark-author">Notion</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.notion.so/images/meta/default.png" alt="GitFolio, GitHub-based Automated Resume Generation Service"></div></a></figure>
<hr>
<h2 id="%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94"><strong>&#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xAC1C;&#xC694;</strong></h2>
<p>&#xAE43;&#xD2B8;&#xD3F4;&#xB9AC;&#xC624; - GitHub API&#xB97C; &#xD65C;&#xC6A9;&#xD55C; LLM &#xAE30;&#xBC18; &#xC774;&#xB825;&#xC11C; &#xC790;&#xB3D9; &#xC0DD;&#xC131; &#xC11C;&#xBE44;&#xC2A4;</p>
<ul><li>&#xAE43;&#xD5C8;&#xBE0C; &#xACC4;&#xC815;&#xC744; &#xC5F0;&#xB3D9;&#xD558;&#xC5EC; &#xC774;&#xB825;&#xC11C;&#xB97C; &#xC790;&#xB3D9; &#xC0DD;&#xC131;&#xD560; &#xC218; &#xC788;&#xB294; &#xAE30;&#xB2A5;</li><li>&#xB2E4;&#xB978; &#xC0AC;&#xB78C;&#xC758; &#xC774;&#xB825;&#xC11C;&#xB97C; &#xC5F4;&#xB78C;&#xD560; &#xC218; &#xC788;&#xB294; SNS &#xAE30;&#xB2A5;</li></ul>
<h2 id="%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%B6%94%EC%A7%84%EB%B0%B0%EA%B2%BD"><strong>&#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xCD94;&#xC9C4;&#xBC30;&#xACBD;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-40.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1794" height="668" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-40.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-40.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-40.png 1600w, https://ilmincho.me/content/images/2024/10/image-40.png 1794w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%AA%A9%ED%91%9C"><strong> &#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xBAA9;&#xD45C;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-41.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1492" height="730" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-41.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-41.png 1000w, https://ilmincho.me/content/images/2024/10/image-41.png 1492w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%EA%B8%B0%EC%88%A0-%EC%8A%A4%ED%83%9D"><strong>&#xAE30;&#xC220; &#xC2A4;&#xD0DD;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2025/01/image-24.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1600" height="868" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-24.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-24.png 1000w, https://ilmincho.me/content/images/2025/01/image-24.png 1600w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%EA%B5%AC%EC%A1%B0"><strong>&#xC544;&#xD0A4;&#xD14D;&#xCCD0; &#xAD6C;&#xC870;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2025/01/image-25.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1654" height="922" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-25.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-25.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-25.png 1600w, https://ilmincho.me/content/images/2025/01/image-25.png 1654w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="ai-%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%94%8C%EB%A1%9C%EC%9A%B0"><strong>AI &#xC11C;&#xBE44;&#xC2A4; &#xD50C;&#xB85C;&#xC6B0;</strong></h2>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1948" height="856" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image.png 1600w, https://ilmincho.me/content/images/2025/01/image.png 1948w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC5EC;&#xB7EC; &#xB808;&#xD3EC;&#xC9C0;&#xD1A0;&#xB9AC;, &#xC694;&#xC57D; &#xD504;&#xB85C;&#xC138;&#xC2A4;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-1.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="771" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-1.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-1.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-1.png 1600w, https://ilmincho.me/content/images/2025/01/image-1.png 2398w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xD15C;&#xD50C;&#xB9BF; &#xACFC;&#xC815; &#xD750;&#xB984;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-7.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="874" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-7.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-7.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-7.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-7.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC0DD;&#xC131; &#xC774;&#xB825;&#xC11C; &#xD15C;&#xD50C;&#xB9BF; &#xC0D8;&#xD50C;</span></figcaption></figure>
<h2 id="%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5"><strong>&#xC8FC;&#xC694; &#xAE30;&#xB2A5;</strong></h2>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-4.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1058" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-4.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-4.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-4.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-4.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xB79C;&#xB529;&#xD398;&#xC774;&#xC9C0;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-6.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="978" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-6.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-6.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-6.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-6.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xAC1C;&#xC778;&#xC815;&#xBCF4; &#xC785;&#xB825;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-5.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="981" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-5.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-5.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-5.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-5.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xAE43;&#xD5D9; &#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xC120;&#xD0DD;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-9.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="996" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-9.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-9.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-9.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-9.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC694;&#xAD6C; &#xC0AC;&#xD56D; &#xC791;&#xC131; &#xBC0F; &#xD15C;&#xD50C;&#xB9BF; &#xC120;&#xD0DD;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-10.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1012" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-10.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-10.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-10.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-10.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC774;&#xB825;&#xC11C; &#xCEE4;&#xBBA4;&#xB2C8;&#xD2F0; (&#xC88B;&#xC544;&#xC694;, &#xC870;&#xD68C;&#xC218;, &#xD544;&#xD130;&#xB9C1;)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-11.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1011" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-11.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-11.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-11.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-11.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xCEE4;&#xBBA4;&#xB2C8;&#xD2F0; &#xC774;&#xB825;&#xC11C; &#xD655;&#xC778;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-12.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1034" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-12.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-12.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-12.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-12.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC0DD;&#xC131;&#xB41C; &#xB098;&#xC758; &#xC774;&#xB825;&#xC11C;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-13.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="972" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-13.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-13.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-13.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-13.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC774;&#xB825;&#xC11C; &#xC218;&#xC815; &#xBC0F; &#xC800;&#xC7A5;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-14.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1108" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-14.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-14.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-14.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-14.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC9C1;&#xC811; &#xC218;&#xC815;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-15.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1070" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-15.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-15.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-15.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-15.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xB4DC;&#xB798;&#xADF8;&#xD6C4;, AI &#xC218;&#xC815;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-16.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1094" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-16.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-16.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-16.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-16.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xAD6C;&#xB3C5; &#xC2DC;&#xC2A4;&#xD15C;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-17.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1550" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-17.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-17.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-17.png 1600w, https://ilmincho.me/content/images/2025/01/image-17.png 2212w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xCE74;&#xCE74;&#xC624; &#xD398;&#xC774; &#xC5F0;&#xB3D9;</span></figcaption></figure>
<h2 id="%EC%B6%94%EA%B0%80%EA%B8%B0%EB%8A%A5-%EA%B3%A0%EB%8F%84%ED%99%94"><strong>&#xCD94;&#xAC00;&#xAE30;&#xB2A5; &#xACE0;&#xB3C4;&#xD654;</strong></h2>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-47.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1878" height="740" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-47.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-47.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-47.png 1600w, https://ilmincho.me/content/images/2024/10/image-47.png 1878w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xBD80;&#xAC00;&#xAE30;&#xB2A5; (1) - </span><b><strong style="white-space: pre-wrap;">&#xD3EC;&#xD2B8;&#xD3F4;&#xB9AC;&#xC624; &#xC0DD;&#xC131;</strong></b></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-48.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1836" height="792" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-48.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-48.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-48.png 1600w, https://ilmincho.me/content/images/2024/10/image-48.png 1836w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xBD80;&#xAC00;&#xAE30;&#xB2A5; (2) - </span><b><strong style="white-space: pre-wrap;">&#xBA74;&#xC811; &#xC5B4;&#xC2DC;&#xC2A4;&#xD134;&#xD2B8; &amp; &#xC54C;&#xACE0;&#xB9AC;&#xC998; &#xBD84;&#xC11D;&#xAE30;</strong></b></figcaption></figure>
<hr>
<h2 id="%EA%B8%B0%EB%8C%80%ED%9A%A8%EA%B3%BC"><strong>&#xAE30;&#xB300;&#xD6A8;&#xACFC;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-49.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="914" height="656" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-49.png 600w, https://ilmincho.me/content/images/2024/10/image-49.png 914w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%EA%B2%BD%EC%9F%81-%EC%84%9C%EB%B9%84%EC%8A%A4"><strong>&#xACBD;&#xC7C1; &#xC11C;&#xBE44;&#xC2A4;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-50.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1934" height="742" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-50.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-50.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-50.png 1600w, https://ilmincho.me/content/images/2024/10/image-50.png 1934w" sizes="(min-width: 720px) 720px"></figure>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/12/image-1.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="833" srcset="https://ilmincho.me/content/images/size/w600/2024/12/image-1.png 600w, https://ilmincho.me/content/images/size/w1000/2024/12/image-1.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/12/image-1.png 1600w, https://ilmincho.me/content/images/2024/12/image-1.png 2330w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%EB%B9%84%EC%A6%88%EB%8B%88%EC%8A%A4-%EB%AA%A8%EB%8D%B8"><strong>&#xBE44;&#xC988;&#xB2C8;&#xC2A4; &#xBAA8;&#xB378;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/12/image-3.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1018" srcset="https://ilmincho.me/content/images/size/w600/2024/12/image-3.png 600w, https://ilmincho.me/content/images/size/w1000/2024/12/image-3.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/12/image-3.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/12/image-3.png 2400w" sizes="(min-width: 720px) 720px"></figure>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/12/image-2.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1009" srcset="https://ilmincho.me/content/images/size/w600/2024/12/image-2.png 600w, https://ilmincho.me/content/images/size/w1000/2024/12/image-2.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/12/image-2.png 1600w, https://ilmincho.me/content/images/2024/12/image-2.png 2322w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<h2 id="flow-chart-mvp"><strong>Flow-Chart (MVP)</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-54.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="1276" height="1324" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-54.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-54.png 1000w, https://ilmincho.me/content/images/2024/10/image-54.png 1276w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%08%EA%B8%B0%EB%8A%A5%EA%B5%AC%ED%98%84"><strong>&#xAE30;&#xB2A5;&#xAD6C;&#xD604;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-55.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1547" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-55.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-55.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-55.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-55.png 2400w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%ED%8C%80-%EB%AC%B8%ED%99%94"><strong>&#xD300; &#xBB38;&#xD654;</strong></h2>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-3.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="768" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-3.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-3.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-3.png 1600w, https://ilmincho.me/content/images/2025/01/image-3.png 2348w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">14&#xC8FC;&#xAC04;, 32&#xBC88;&#xD68C;&#xC758; / 183&#xAC1C; PR</span></figcaption></figure>
<h2 id="%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%84%A0-%EA%B3%BC%EC%A0%95"><strong>&#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xAC1C;&#xC120; &#xACFC;&#xC815;</strong></h2>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-18.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1020" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-18.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-18.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-18.png 1600w, https://ilmincho.me/content/images/2025/01/image-18.png 2204w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xBC31;&#xC5D4;&#xB4DC; &#xD14C;&#xC2A4;&#xD2B8; &#xCF00;&#xC774;&#xC2A4;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-19.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="787" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-19.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-19.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-19.png 1600w, https://ilmincho.me/content/images/size/w2400/2025/01/image-19.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Jmeter &#xD14C;&#xC2A4;&#xD2B8; &#xACB0;&#xACFC; (&#xC54C;&#xB9BC;&#xBAA8;&#xB4C8;)</span></figcaption></figure>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2025/01/image-20.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1128" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-20.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-20.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-20.png 1600w, https://ilmincho.me/content/images/2025/01/image-20.png 2050w" sizes="(min-width: 720px) 720px"></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-21.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="846" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-21.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-21.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-21.png 1600w, https://ilmincho.me/content/images/2025/01/image-21.png 2358w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xD504;&#xB860;&#xD2B8; &#xC5D4;&#xB4DC;, pdf &#xACE0;&#xB3C4;&#xD654;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-22.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1017" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-22.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-22.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-22.png 1600w, https://ilmincho.me/content/images/2025/01/image-22.png 2202w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">MSA &#xAD6C;&#xC870;&#xC758; &#xBC31;&#xC5D4;&#xB4DC; &#xBE4C;&#xB4DC; &#xBC0F; &#xBC30;&#xD3EC; (&#xC2DC;&#xAC04;&#xAC1C;&#xC120;)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2025/01/image-23.png" class="kg-image" alt="GitFolio, GitHub-based Automated Resume Generation Service" loading="lazy" width="2000" height="1113" srcset="https://ilmincho.me/content/images/size/w600/2025/01/image-23.png 600w, https://ilmincho.me/content/images/size/w1000/2025/01/image-23.png 1000w, https://ilmincho.me/content/images/size/w1600/2025/01/image-23.png 1600w, https://ilmincho.me/content/images/2025/01/image-23.png 2224w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Next.js Docker &#xC774;&#xBBF8;&#xC9C0; &#xCD5C;&#xC801;&#xD654;</span></figcaption></figure>
<hr>
<h2 id="%08appendix-ai-observability-system"><strong>Appendix, (AI Observability System)</strong></h2>
<figure class="kg-card kg-video-card kg-width-regular" data-kg-thumbnail="https://ilmincho.me/content/media/2025/01/------------2025-01-01------4.07.48_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://ilmincho.me/content/media/2025/01/------------2025-01-01------4.07.48.mp4" poster="https://img.spacergif.org/v1/3354x2012/0a/spacer.png" width="3354" height="2012" playsinline preload="metadata" style="background: transparent url(&apos;https://ilmincho.me/content/media/2025/01/------------2025-01-01------4.07.48_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">2:23</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate">1&#xD7;</button>
                        <button class="kg-video-unmute-icon">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            
        </figure>
<p><strong>langfuse&#xB97C; &#xD65C;&#xC6A9;&#xD55C;, AI &#xBAA8;&#xB2C8;&#xD130;&#xB9C1; &#xC2DC;&#xC2A4;&#xD15C; &#xAD6C;&#xCD95; </strong></p>
<ul><li>&#xD2B8;&#xB808;&#xC774;&#xC2F1;&#xC744; &#xD65C;&#xC6A9;&#xD558;&#xC5EC;, &#xBAA8;&#xB378; &#xC0AC;&#xC6A9; &#xD1A0;&#xD070; &#xBC0F; &#xAC00;&#xACA9; &#xD2B8;&#xB798;&#xD0B9;</li><li>&#xC11C;&#xBE44;&#xC2A4; &#xB85C;&#xAE45;&#xC744; &#xD558;&#xBA70;, &#xC5D0;&#xB7EC;&#xCF00;&#xC774;&#xC2A4;&#xB4E4; &#xCCB4;&#xD0B9;</li><li>&#xC774;&#xB825;&#xC11C;&#xC0DD;&#xC131; &#xAC1C;&#xC120;&#xC744; &#xC704;&#xD55C; &#xBCD1;&#xBAA9; &#xAD6C;&#xAC04; &#xCCB4;&#xD0B9;</li></ul>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Dream (당신의 꿈을 드립니다.),  Hackathon, kakao x goorm]]></title><description><![CDATA[<hr>
<h2 id="kakao-x-goorm-hackathon-20240904-0907"><strong>kakao x goorm, Hackathon (2024.09.04 ~ 09.07)</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/KakaoTech-Hackathon-Dream?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">KakaoTech-Hackathon-Dream</div><div class="kg-bookmark-description">KakaoTech-Hackathon-Dream has 5 repositories available. Follow their code on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://avatars.githubusercontent.com/u/180546105?s=280&amp;v=4" alt></div></a></figure>
<table class="bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888]"><thead class="border-b-border-100/50 border-b-[0.5px] text-left"><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC774;&#xB984;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Kakao</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC5ED;&#xD560;</th></tr></thead><tbody><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC870;&#xC77C;&#xBBFC;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Ilmin.cho</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD300;&#xC7A5; | AI</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xAD8C;&#xC624;&#xC900;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Lucas.Kwon</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">AI</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC2EC;&#xC0C1;&#xD6C8;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Peter.Sim</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">AI</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xAE40;&#xBBFC;&#xC81C;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Milo.</td></tr></tbody></table>]]></description><link>https://ilmincho.me/dream/</link><guid isPermaLink="false">6706ace98680d90496636647</guid><category><![CDATA[Projects]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Mon, 09 Sep 2024 16:43:00 GMT</pubDate><media:content url="https://ilmincho.me/content/images/2024/10/ezgif.com-animated-gif-maker-1.gif" medium="image"/><content:encoded><![CDATA[<hr>
<h2 id="kakao-x-goorm-hackathon-20240904-0907"><strong>kakao x goorm, Hackathon (2024.09.04 ~ 09.07)</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/KakaoTech-Hackathon-Dream?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">KakaoTech-Hackathon-Dream</div><div class="kg-bookmark-description">KakaoTech-Hackathon-Dream has 5 repositories available. Follow their code on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm"><span class="kg-bookmark-author">GitHub</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://avatars.githubusercontent.com/u/180546105?s=280&amp;v=4" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm"></div></a></figure>
<table class="bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888]"><thead class="border-b-border-100/50 border-b-[0.5px] text-left"><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC774;&#xB984;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Kakao</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC5ED;&#xD560;</th></tr></thead><tbody><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC870;&#xC77C;&#xBBFC;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Ilmin.cho</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD300;&#xC7A5; | AI</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xAD8C;&#xC624;&#xC900;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Lucas.Kwon</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">AI</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC2EC;&#xC0C1;&#xD6C8;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Peter.Sim</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">AI</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xAE40;&#xBBFC;&#xC81C;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Milo.Kim</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Backend</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xAE40;&#xACBD;&#xB85D;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Roki.Kim</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Frontend</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xB958;&#xC9C0;&#xD658;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Mango.Ryu</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Cloud</td></tr></tbody></table>
<hr>
<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/FEaNFpFYVB0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="DREAM - kakao &#xD574;&#xCEE4;&#xD1A4; 3"></iframe></figure>
<hr>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/367150627-187ad483-838e-4000-a97c-9204866cd829.png" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="2000" height="1399" srcset="https://ilmincho.me/content/images/size/w600/2024/10/367150627-187ad483-838e-4000-a97c-9204866cd829.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/367150627-187ad483-838e-4000-a97c-9204866cd829.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/367150627-187ad483-838e-4000-a97c-9204866cd829.png 1600w, https://ilmincho.me/content/images/2024/10/367150627-187ad483-838e-4000-a97c-9204866cd829.png 2224w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC804;&#xCCB4; &#xC11C;&#xBE44;&#xC2A4; &#xAD6C;&#xD604; (&#xC571;&#xAC1C;&#xBC1C;)</span></figcaption></figure>
<hr>
<h2 id="%08%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94">&#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xAC1C;&#xC694;</h2>
<ul><li>&#xC0DD;&#xC131;&#xD615; AI(LLM, RAG, Diffusion model)&#xB97C; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xB178;&#xB144;&#xCE35;&#xC774; &#xC774;&#xB8E8;&#xC9C0; &#xBABB;&#xD55C; &#xAFC8;&#xC744; &#xBC14;&#xD0D5;&#xC73C;&#xB85C; &#x2018;&#xAFC8;&#xC744; &#xC774;&#xB8EC; &#xB098;&#x2019;&#xC5D0; &#xB300;&#xD55C; &#xC774;&#xC57C;&#xAE30;&#xC640; &#xC774;&#xBBF8;&#xC9C0;&#xB97C; &#xC0DD;&#xC131;&#xD558;&#xACE0;, &#xC774;&#xB97C; &#xD1B5;&#xD574; &#xAD00;&#xB828;&#xB41C; &#xAD50;&#xC721; &#xD504;&#xB85C;&#xADF8;&#xB7A8; &#xBC0F; &#xC9C1;&#xC5C5;&#xC744; &#xCD94;&#xCC9C;&#xD558;&#xB294; &#xC11C;&#xBE44;&#xC2A4;</li></ul>
<h2 id="%EC%B6%94%EC%A7%84%EB%B0%B0%EA%B2%BD">&#xCD94;&#xC9C4;&#xBC30;&#xACBD;</h2>
<img src="https://ilmincho.me/content/images/2024/10/ezgif.com-animated-gif-maker-1.gif" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm"><p>&#xD604;&#xC7AC; &#xC6B0;&#xB9AC; &#xC0AC;&#xD68C;&#xAC00; &#xC9C1;&#xBA74;&#xD55C; &#xC8FC;&#xC694; &#xBB38;&#xC81C;&#xB294; <strong>&#xC800;&#xCD9C;&#xC0B0;&#xC73C;&#xB85C; &#xC778;&#xD55C; &#xAE09;&#xACA9;&#xD55C; &#xACE0;&#xB839;&#xD654;</strong>&#xC774;&#xB2E4;. &#xB178;&#xB144;&#xCE35; &#xC778;&#xAD6C; &#xBE44;&#xC728;&#xC740; &#xAFB8;&#xC900;&#xD788; &#xC99D;&#xAC00;&#xD558;&#xBA70; &#xC778;&#xAD6C; &#xAD6C;&#xC870;&#xAC00; &#xB178;&#xB144;&#xCE35;&#xC5D0; &#xC9D1;&#xC911;&#xB418;&#xB294; &#xBC18;&#xBA74;, &#xC774;&#xB4E4;&#xC758; <strong>&#xC0AC;&#xD68C;&#xC801; &#xACE0;&#xB9BD;</strong>&#xC740; &#xB354;&#xC6B1; &#xC2EC;&#xD654;&#xB418;&#xACE0; &#xC788;&#xB2E4;. &#xC774;&#xB7EC;&#xD55C; &#xC0AC;&#xD68C;&#xC801;&#xC778; &#xACE0;&#xB9BD;&#xC758; &#xD655;&#xC0B0;&#xC740; &#xB178;&#xB144;&#xCE35;&#xC758; &#xC0B6;&#xC758; &#xB9CC;&#xC871;&#xB3C4; &#xC800;&#xD558;&#xB85C; &#xC774;&#xC5B4;&#xC9C4;&#xB2E4;.&#x2018;&#xAD6D;&#xBBFC; &#xC0B6;&#xC758; &#xC9C8; &#xBCF4;&#xACE0;&#xC11C;&#x2019;&#xC5D0; &#xB530;&#xB974;&#xBA74; &#xB178;&#xB144;&#xCE35; &#xC911; &#xC0B6;&#xC5D0; &#xB9CC;&#xC871;&#xD55C;&#xB2E4;&#xACE0; &#xB2F5;&#xD55C; &#xBE44;&#xC728;&#xC740; <strong>29.9%</strong>&#xB85C;, &#xC774;&#xB294; &#xC544;&#xB3D9;/&#xCCAD;&#xC18C;&#xB144;(56.6%), &#xCCAD;&#xB144;(41.8%), &#xC911;&#xC7A5;&#xB144;(38.0%)&#xC5D0; &#xBE44;&#xD574; <strong>&#xC0C1;&#xB300;&#xC801;&#xC73C;&#xB85C; &#xB0AE;&#xC740; &#xC218;&#xCE58;</strong>&#xB97C; &#xBCF4;&#xC778;&#xB2E4;. (&#xD1B5;&#xACC4;&#xCCAD; - 2022&#xB144;)</p>
<p>&#xA0;&#xC774;&#xB97C; &#xC644;&#xD654;&#xD560; &#xC218;&#xB2E8;&#xC73C;&#xB85C; <strong>&#x2018;&#xC2DC;&#xB2C8;&#xC5B4; &#xAD50;&#xC721;</strong>&#x2019;&#xC774; &#xC8FC;&#xBAA9;&#xBC1B;&#xACE0; &#xC788;&#xC73C;&#xBA70;, &#xB178;&#xB144;&#xCE35;&#xC758; &#xC0AC;&#xD68C; &#xCC38;&#xC5EC;&#xC640; &#xAD50;&#xC721;&#xC744; &#xCD09;&#xC9C4;&#xD568;&#xC73C;&#xB85C;&#xC368; &#xB0AE;&#xC740; &#xC0B6;&#xC758; &#xB9CC;&#xC871;&#xB3C4;&#xB97C; &#xAC1C;&#xC120;&#xD560; &#xC218; &#xC788;&#xB294; &#xC801;&#xD569;&#xD55C; &#xBC29;&#xC548;&#xC73C;&#xB85C; &#xD3C9;&#xAC00;&#xB418;&#xACE0; &#xC788;&#xB2E4;. &#xD558;&#xC9C0;&#xB9CC;, &#xBC29;&#xB300;&#xD55C; &#xC815;&#xBCF4;&#xC640; &#xBCF5;&#xC7A1;&#xD55C; &#xACBD;&#xB85C; &#xB54C;&#xBB38;&#xC5D0; &#xC2DC;&#xB2C8;&#xC5B4; &#xAD50;&#xC721;&#xC774; &#xC81C;&#xACF5;&#xB418;&#xB354;&#xB77C;&#xB3C4; &#xC811;&#xADFC;&#xC774; &#xC5B4;&#xB835;&#xACE0;, &#xC774;&#xB85C; &#xC778;&#xD574; &#xC790;&#xC874;&#xAC10;&#xC774; &#xB0AE;&#xC544;&#xC838; &#xC0C8;&#xB85C;&#xC6B4; &#xC2DC;&#xB3C4;&#xB97C; &#xC8FC;&#xC800;&#xD558;&#xAC8C; &#xB418;&#xC5B4; &#xACE0;&#xB839;&#xCE35;&#xC758; &#xC0AC;&#xD68C;&#xC801; &#xC18C;&#xC678;&#xAC00; &#xC2EC;&#xD654;&#xB418;&#xB294; &#xC545;&#xC21C;&#xD658;&#xC774; &#xC774;&#xC5B4;&#xC9C0;&#xACE0; &#xC788;&#xB2E4;.</p>
<p> (&#xD1B5;&#xACC4;&#xCCAD; -2018)</p>
<figure class="kg-card kg-image-card"><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXddqKA6Lc3aEEsKVr2oziDQ3YALOsHR0SfMHOss2SWCq2uezgMrAPTVC5jCXNcXm-d7mvsvs1q75qK_t3RlXXDIUD6XbbxyFbSUIEt87zKt4n-5WtlKWG2IPK505762sZysKCdaiL6ODL8Ddtt_1EQkL6Q?key=IWENy6KXjDjaS8CsbK2W5Q" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="213" height="97"></figure>
<p>&#xA0;&#xC774;&#xB7EC;&#xD55C; &#xBB38;&#xC81C;&#xB97C; &#xD574;&#xACB0;&#xD558;&#xAE30; &#xC704;&#xD574;, &#xC6B0;&#xB9AC;&#xB294; &#xC0DD;&#xC131;&#xD615; AI &#xAE30;&#xC220;&#xC744; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xB178;&#xB144;&#xCE35;&#xC774; &#xAFC8;&#xAFB8;&#xB358; &#xC774;&#xC57C;&#xAE30;&#xC640; &#xC0AC;&#xC9C4;&#xC744; &#xB9CC;&#xB4E4;&#xC5B4;&#xAC00;&#xB294; &#xB180;&#xC774; &#xBC29;&#xC2DD;&#xC73C;&#xB85C; &#xB514;&#xC9C0;&#xD138; &#xC7A5;&#xBCBD;&#xC744; &#xB0AE;&#xCD94;&#xB824; &#xD55C;&#xB2E4;. &#xB610;&#xD55C;, &#xC774;&#xB7EC;&#xD55C; &#xC811;&#xADFC; &#xBC29;&#xC2DD;&#xC744; &#xD1B5;&#xD574; &#xC2DC;&#xB2C8;&#xC5B4; &#xAD50;&#xC721; &#xD504;&#xB85C;&#xADF8;&#xB7A8;&#xACFC; &#xAD6C;&#xC9C1; &#xAD00;&#xB828; &#xC815;&#xBCF4;&#xB97C; &#xC81C;&#xACF5;&#xD558;&#xBA70;, &#xCD94;&#xCC9C; &#xC2DC;&#xC2A4;&#xD15C;&#xC744; &#xAE30;&#xBC18;&#xC73C;&#xB85C; &#xAD50;&#xC721; &#xBC0F; &#xCC44;&#xC6A9; &#xD68C;&#xC0AC;&#xB4E4;&#xB85C;&#xBD80;&#xD130; &#xCEE4;&#xBBF8;&#xC158;&#xC744; &#xBC1B;&#xB294; B2B &#xBAA8;&#xB378;&#xB85C; &#xC6B4;&#xC601;&#xD560; &#xACC4;&#xD68D;&#xC774;&#xB2E4;. &#xB354; &#xB098;&#xC544;&#xAC00;, &#xCC28;&#xD6C4; &#xC815;&#xBD80;&#xC640; &#xD611;&#xB825;&#xD558;&#xC5EC; &#xB178;&#xC778; &#xBCF5;&#xC9C0;&#xAE30;&#xAD00;&#xC744; &#xD1B5;&#xD574; &#xC11C;&#xBE44;&#xC2A4;&#xB97C; &#xBCF4;&#xAE09;&#xD558;&#xACE0;, &#xC774;&#xB97C; B2G &#xB514;&#xC9C0;&#xD138; &#xBB38;&#xD654;/&#xAD50;&#xC721; &#xD50C;&#xB7AB;&#xD3FC;&#xC73C;&#xB85C; &#xD655;&#xC7A5;&#xD558;&#xACE0;&#xC790; &#xD55C;&#xB2E4;.</p>
<h2 id="%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5"><strong>&#xC8FC;&#xC694; &#xAE30;&#xB2A5;</strong></h2>
<p>1. <strong>&#xD575;&#xC2EC; &#xB0B4;&#xC6A9;</strong>:</p>
<ul><li><strong>&#xC0AC;&#xC6A9;&#xC790; &#xB9DE;&#xCDA4;&#xD615; &#xC774;&#xC57C;&#xAE30; &#xC0DD;&#xC131;</strong>: &#xC0AC;&#xC6A9;&#xC790;&#xAC00; &#xC785;&#xB825;&#xD55C; &#xC815;&#xBCF4;&#xB97C; &#xBC14;&#xD0D5;&#xC73C;&#xB85C; LLM generation model&#xC774; RAG &#xAE30;&#xBC95;&#xACFC; Diffusion model &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xB3C5;&#xCC3D;&#xC801;&#xC778; &#xC774;&#xC57C;&#xAE30;&#xC640; &#xC774;&#xBBF8;&#xC9C0;&#xB97C; &#xC0DD;&#xC131;. &#xC774; &#xACFC;&#xC815;&#xC5D0;&#xC11C; &#xCD5C;&#xC2E0; &#xD14D;&#xC2A4;&#xD2B8; &#xBC0F; &#xC774;&#xBBF8;&#xC9C0; &#xC0DD;&#xC131; &#xAE30;&#xC220;&#xC744; &#xD65C;&#xC6A9;.</li><li><strong>&#xAD50;&#xC721; &#xD504;&#xB85C;&#xADF8;&#xB7A8; &#xBC0F; &#xCDE8;&#xC5C5; &#xC815;&#xBCF4; &#xB9E4;&#xCE6D;</strong>: &#xC0DD;&#xC131;&#xB41C; &#xC774;&#xC57C;&#xAE30;&#xC5D0;&#xC11C; &#xC8FC;&#xC694; &#xD0A4;&#xC6CC;&#xB4DC;&#xB97C; &#xC790;&#xB3D9; &#xCD94;&#xCD9C;&#xD558;&#xACE0;, &#xC774;&#xB97C; &#xBC14;&#xD0D5;&#xC73C;&#xB85C; &#xC720;&#xC0AC;&#xB3C4;&#xAC00; &#xB192;&#xC740; &#xAD50;&#xC721; &#xD504;&#xB85C;&#xADF8;&#xB7A8;&#xC774;&#xB098; &#xCDE8;&#xC5C5; &#xC815;&#xBCF4;&#xB97C; &#xCD94;&#xCC9C;&#xD558;&#xC5EC; &#xC0AC;&#xC6A9;&#xC790;&#xC5D0;&#xAC8C; &#xC2E4;&#xC9C8;&#xC801;&#xC778; &#xD559;&#xC2B5;&#xACFC; &#xC9C4;&#xB85C; &#xC120;&#xD0DD;&#xC744; &#xB3D5;&#xB294; &#xC11C;&#xBE44;&#xC2A4; &#xC81C;&#xACF5;.</li></ul>
<p>2. <strong>&#xAE30;&#xC220;&#xC801; &#xD65C;&#xC6A9;</strong>:</p>
<ol><li><strong>AI &#xAE30;&#xBC18; &#xD14D;&#xC2A4;&#xD2B8; &#xC0DD;&#xC131; (LLM - GPT, RAG, langchain &#xB4F1;)</strong>:<ul><li>&#xC790;&#xC5F0;&#xC5B4; &#xCC98;&#xB9AC; &#xAE30;&#xC220;&#xC744; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xC0AC;&#xC6A9;&#xC790;&#xAC00; &#xC81C;&#xACF5;&#xD55C; &#xC785;&#xB825;&#xC744; &#xAE30;&#xBC18;&#xC73C;&#xB85C; &#xC0AC;&#xC6A9;&#xC790;&#xAC00; &#xAFC8;&#xAFB8;&#xB358; &#xC2A4;&#xD1A0;&#xB9AC;&#xB97C; &#xC0DD;&#xC131;.&#xC5EC;&#xAE30;&#xC11C; LLM(&#xB300;&#xADDC;&#xBAA8; &#xC5B8;&#xC5B4; &#xBAA8;&#xB378;)&#xC744; &#xC0AC;&#xC6A9;&#xD558;&#xC5EC; &#xBB38;&#xB9E5;&#xC744; &#xC774;&#xD574;&#xD558;&#xACE0; &#xC790;&#xC5F0;&#xC2A4;&#xB7EC;&#xC6B4; &#xD14D;&#xC2A4;&#xD2B8;&#xB97C; &#xC0DD;&#xC131; RAG(Relevance-Augmented Generation) &#xAE30;&#xBC95;&#xACFC; Langchain&#xC744; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xC678;&#xBD80; &#xB370;&#xC774;&#xD130; &#xC18C;&#xC2A4;&#xB97C; &#xCC38;&#xC870;, &#xAD00;&#xB828;&#xC131; &#xB192;&#xC740; &#xC815;&#xBCF4;&#xB97C; &#xD14D;&#xC2A4;&#xD2B8; &#xC0DD;&#xC131;&#xC5D0; &#xBC18;&#xC601;. <br>- RAG &#xD65C;&#xC6A9;&#xBC29;&#xC548;: &#xC790;&#xC11C;&#xC804; &#xB370;&#xC774;&#xD130;&#xB4E4;&#xC744; &#xCE74;&#xD14C;&#xACE0;&#xB9AC;&#xBCC4;&#xB85C; &#xB514;&#xBE44;&#xC5D0; &#xC800;&#xC7A5;&#xD55C; &#xB4A4; &#xC2A4;&#xD1A0;&#xB9AC;&#xC0DD;&#xC131; &#xBD80;&#xBD84;&#xC5D0; &#xB9DE;&#xAC8C; &#xAC00;&#xC838;&#xC62C; &#xAC83;<br>- Langchain &#xD65C;&#xC6A9;&#xBC29;&#xC548;: &#xCC45;&#xC744; &#xC791;&#xC131;&#xD558;&#xB294; &#xBC29;&#xBC95;&#xACFC; &#xC720;&#xC0AC;&#xD558;&#xAC8C;, &#xAE30;&#xC2B9;&#xC804;&#xACB0;&#xACFC; &#xAC19;&#xC740; &#xB9E5;&#xB77D;&#xC73C;&#xB85C; &#xC2A4;&#xD1A0;&#xB9AC;&#xB97C; &#xBF51;&#xC744;&#xC218; &#xC788;&#xB3C4;&#xB85D; &#xD504;&#xB86C;&#xD504;&#xD2B8;&#xB97C; &#xC791;&#xC131;&#xD560;&#xAC83;.</li><li>&#xC120;&#xD0DD; &#xC774;&#xC720;:GPT &#xAC19;&#xC740; &#xB300;&#xADDC;&#xBAA8; &#xC5B8;&#xC5B4; &#xBAA8;&#xB378;&#xC740; &#xBB38;&#xB9E5; &#xC774;&#xD574;&#xC640; &#xC790;&#xC5F0;&#xC2A4;&#xB7EC;&#xC6B4; &#xC5B8;&#xC5B4; &#xC0DD;&#xC131;&#xC5D0; &#xB6F0;&#xC5B4;&#xB098;&#xBA70;, &#xD2B9;&#xD788; &#xC0AC;&#xC6A9;&#xC790; &#xB9DE;&#xCDA4;&#xD615; &#xC774;&#xC57C;&#xAE30;&#xB97C; &#xC0DD;&#xC131;&#xD558;&#xB294; &#xB370; &#xAC15;&#xB825;&#xD55C; &#xC131;&#xB2A5;&#xC744; &#xBCF4;&#xC784;. RAG &#xAE30;&#xBC95;&#xC744; &#xD1B5;&#xD574; &#xC2E4;&#xC2DC;&#xAC04; &#xC678;&#xBD80; &#xB370;&#xC774;&#xD130; &#xAC80;&#xC0C9;&#xACFC; &#xCC38;&#xC870;&#xAC00; &#xAC00;&#xB2A5;&#xD574; &#xB354;&#xC6B1; &#xD48D;&#xBD80;&#xD558;&#xACE0; &#xCD5C;&#xC2E0; &#xC815;&#xBCF4;&#xB97C; &#xBC14;&#xD0D5;&#xC73C;&#xB85C; &#xD55C; &#xD14D;&#xC2A4;&#xD2B8; &#xC0DD;&#xC131;&#xC744; &#xC9C0;&#xC6D0;. Langchain&#xC740; &#xC774;&#xB7EC;&#xD55C; &#xB370;&#xC774;&#xD130; &#xC18C;&#xC2A4;&#xC640; LLM&#xC744; &#xD6A8;&#xACFC;&#xC801;&#xC73C;&#xB85C; &#xC5F0;&#xACB0;&#xD558;&#xC5EC; &#xC0AC;&#xC6A9;&#xC790; &#xB9DE;&#xCDA4;&#xD615; &#xC2A4;&#xD1A0;&#xB9AC;&#xB97C; &#xD6A8;&#xC728;&#xC801;&#xC73C;&#xB85C; &#xC0DD;&#xC131;&#xD558;&#xB294; &#xB370; &#xAE30;&#xC5EC;.</li></ul></li><li><strong>&#xD14D;&#xC2A4;&#xD2B8; &#xAE30;&#xBC18; &#xC774;&#xBBF8;&#xC9C0; &#xC0DD;&#xC131; (DALL-E, Stable Diffusion &#xB4F1;)</strong>:<ul><li>&#xC0DD;&#xC131;&#xB41C; &#xC774;&#xC57C;&#xAE30;&#xB97C; &#xC2DC;&#xAC01;&#xC801;&#xC73C;&#xB85C; &#xAD6C;&#xD604;&#xD558;&#xAE30; &#xC704;&#xD574; AI &#xAE30;&#xBC18; &#xC774;&#xBBF8;&#xC9C0; &#xC0DD;&#xC131; &#xAE30;&#xC220;&#xC744; &#xC0AC;&#xC6A9;. &#xC774;&#xB294; &#xC2A4;&#xD1A0;&#xB9AC;&#xC640; &#xC77C;&#xCE58;&#xD558;&#xB294; &#xB9DE;&#xCDA4;&#xD615; &#xC774;&#xBBF8;&#xC9C0;&#xB97C; &#xC81C;&#xACF5;&#xD558;&#xC5EC; &#xC0AC;&#xC6A9;&#xC790; &#xACBD;&#xD5D8;&#xC744; &#xADF9;&#xB300;&#xD654;.</li><li>&#xC120;&#xD0DD; &#xC774;&#xC720;: &#xCD5C;&#xC2E0; &#xD14D;&#xC2A4;&#xD2B8;-&#xC774;&#xBBF8;&#xC9C0; &#xBAA8;&#xB378;&#xC740; &#xAC04;&#xB2E8;&#xD55C; &#xD14D;&#xC2A4;&#xD2B8; &#xC124;&#xBA85;&#xC744; &#xAE30;&#xBC18;&#xC73C;&#xB85C; &#xCC3D;&#xC758;&#xC801;&#xC778; &#xC774;&#xBBF8;&#xC9C0;&#xB97C; &#xC0DD;&#xC131;&#xD560; &#xC218; &#xC788;&#xC5B4;, &#xC2DC;&#xAC01;&#xC801; &#xCF58;&#xD150;&#xCE20;&#xB97C; &#xC81C;&#xACF5;&#xD568;&#xC73C;&#xB85C;&#xC368; &#xC0AC;&#xC6A9;&#xC790; &#xB9CC;&#xC871;&#xB3C4;&#xB97C; &#xB192;&#xC77C; &#xC218; &#xC788;&#xC74C;.</li></ul></li><li><strong>&#xCD94;&#xCC9C; &#xC2DC;&#xC2A4;&#xD15C; (&#xC720;&#xC0AC;&#xB3C4; &#xAE30;&#xBC18; &#xB9E4;&#xCE6D;)</strong>:<ul><li>&#xC0DD;&#xC131;&#xB41C; &#xC774;&#xC57C;&#xAE30;&#xC5D0;&#xC11C; BERT&#xC640; &#xAC19;&#xC740; NLP&#xBAA8;&#xB378;&#xB85C; &#xD0A4;&#xC6CC;&#xB4DC;&#xB97C; &#xCD94;&#xCD9C;&#xD558;&#xACE0; &#xAD50;&#xC721; &#xBC0F; &#xCDE8;&#xC5C5; &#xB370;&#xC774;&#xD130;&#xBCA0;&#xC774;&#xC2A4;&#xC758; &#xB0B4;&#xC6A9;&#xC744; &#xBE44;&#xAD50;&#xD558;&#xC5EC; &#xC720;&#xC0AC;&#xB3C4;&#xAC00; &#xB192;&#xC740; &#xD504;&#xB85C;&#xADF8;&#xB7A8;&#xC744; &#xC0AC;&#xC6A9;&#xC790;&#xC5D0;&#xAC8C; &#xB9DE;&#xCDA4; &#xCD94;&#xCC9C;.</li><li>&#xC120;&#xD0DD; &#xC774;&#xC720;: &#xAC1C;&#xC778;&#xD654; &#xCD94;&#xCC9C; &#xC2DC;&#xC2A4;&#xD15C;&#xC740; &#xC0AC;&#xC6A9;&#xC790;&#xC758; &#xAD00;&#xC2EC;&#xC0AC;&#xC640; &#xC5F0;&#xACC4;&#xB41C; &#xAD50;&#xC721; &#xBC0F; &#xCDE8;&#xC5C5; &#xC815;&#xBCF4;&#xB97C; &#xC81C;&#xC2DC;&#xD558;&#xC5EC; &#xC0AC;&#xC6A9;&#xC790; &#xB9CC;&#xC871;&#xB3C4;&#xB97C; &#xB192;&#xC774;&#xACE0;, &#xAD50;&#xC721; &#xBC0F; &#xCDE8;&#xC5C5; &#xC5F0;&#xACB0;&#xC131;&#xC744; &#xAC15;&#xD654;</li></ul></li></ol>
<p>3. <strong>&#xB3C5;&#xCC3D;&#xC131;, &#xC6B0;&#xC218;&#xC131;</strong>:&#xA0;</p>
<p>&#xAE30;&#xC874; &#xAD50;&#xC721; &#xBC0F; &#xCDE8;&#xC5C5; &#xC815;&#xBCF4; &#xCD94;&#xCC9C; &#xC11C;&#xBE44;&#xC2A4;&#xB294; <strong>&#xB178;&#xC778;&#xCE35;&#xC774;&#xB098; &#xACE0;&#xB839;&#xCE35;</strong>&#xC774; &#xC811;&#xADFC;&#xD558;&#xAE30; &#xC5B4;&#xB835;&#xACE0;, &#xC0AC;&#xC6A9;&#xC790;&#xC758; <strong>&#xACFC;&#xAC70; &#xBAA9;&#xD45C;&#xC640; &#xAC10;&#xC815;&#xC744; &#xC5F0;&#xACB0;</strong>&#xD558;&#xC9C0; &#xBABB;&#xD55C;&#xB2E4;&#xB294; &#xD55C;&#xACC4;&#xAC00; &#xC788;&#xB2E4;.</p>
<ul><li><strong>&#xACFC;&#xAC70; &#xAFC8; &#xAE30;&#xBC18; &#xBAB0;&#xC785;&#xD615; &#xACBD;&#xD5D8;</strong>: &#xC0AC;&#xC6A9;&#xC790;&#xAC00; &#xC5B4;&#xB9B0; &#xC2DC;&#xC808; &#xAFC8;&#xC744; &#xC785;&#xB825;&#xD558;&#xBA74;, AI&#xAC00; &#xC2A4;&#xD1A0;&#xB9AC;&#xC640; &#xC774;&#xBBF8;&#xC9C0;&#xB97C; &#xC0DD;&#xC131;&#xD574; &#xAC10;&#xC815;&#xC801; &#xBAB0;&#xC785;&#xC744; &#xC81C;&#xACF5;&#xD558;&#xC5EC; &#xAD50;&#xC721;&#xC5D0; &#xB300;&#xD55C; &#xB3D9;&#xAE30;&#xB97C; &#xBD80;&#xC5EC;</li><li><strong>&#xACE0;&#xB839;&#xCE35; &#xB9DE;&#xCDA4;&#xD615; &#xC11C;&#xBE44;&#xC2A4;</strong>: &#xACFC;&#xAC70;&#xC758; &#xAFC8;&#xC744; &#xB418;&#xC0B4;&#xB824; &#xAC10;&#xC815;&#xC801; &#xC5F0;&#xACB0;&#xC744; &#xAC15;&#xD654;&#xD558;&#xB294; &#xBAB0;&#xC785;&#xD615; &#xC11C;&#xBE44;&#xC2A4;&#xB97C; &#xC81C;&#xACF5;&#xD558;&#xBA70;, &#xACE0;&#xB839;&#xCE35;&#xC774; &#xC27D;&#xAC8C; &#xC811;&#xADFC;&#xD560; &#xC218; &#xC788;&#xB3C4;&#xB85D; &#xC124;&#xACC4;</li><li><strong>&#xAD50;&#xC721; &#xBC0F; &#xC9C1;&#xC5C5; &#xCD94;&#xCC9C; &#xC5F0;&#xACC4;</strong>: &#xC2A4;&#xD1A0;&#xB9AC;&#xC5D0;&#xC11C; &#xCD94;&#xCD9C;&#xB41C; &#xD0A4;&#xC6CC;&#xB4DC;&#xB85C; &#xAD00;&#xB828; &#xAD50;&#xC721; &#xD504;&#xB85C;&#xADF8;&#xB7A8;&#xACFC; &#xC9C1;&#xC5C5; &#xC815;&#xBCF4;&#xB97C; &#xCD94;&#xCC9C;&#xD558;&#xC5EC;, &#xC0AC;&#xC6A9;&#xC790;&#xAC00; &#xC790;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xC2E4;&#xD604;&#xD560; &#xC218; &#xC788;&#xB294; &#xC2E4;&#xC9C8;&#xC801;&#xC778; &#xACBD;&#xB85C;&#xB97C; &#xC81C;&#xC2DC;</li></ul>
<p>&#xC774; &#xC11C;&#xBE44;&#xC2A4;&#xB294; <strong>&#xB178;&#xB144;&#xCE35;&#xC758; &#xAFC8;&#xC744; &#xAE30;&#xBC18;&#xC73C;&#xB85C; &#xD55C; &#xBAB0;&#xC785;&#xD615; &#xACBD;&#xD5D8;</strong>&#xACFC; <strong>&#xB9DE;&#xCDA4;&#xD615; &#xAD50;&#xC721; &#xBC0F; &#xC9C1;&#xC5C5; &#xCD94;&#xCC9C;</strong>&#xC744; &#xC81C;&#xACF5;&#xD558;&#xC5EC; <strong>&#xC2E4;&#xC9C8;&#xC801;&#xC778; &#xB3D9;&#xAE30; &#xBD80;&#xC5EC;&#xC640; &#xD559;&#xC2B5; &#xAE30;&#xD68C; &#xD655;&#xB300;</strong>&#xB97C; &#xC9C0;&#xC6D0;&#xD558;&#xB294; &#xC810;&#xC5D0;&#xC11C; &#xB3C5;&#xCC3D;&#xC801;&#xC778; &#xCC28;&#xBCC4;&#xC810;&#xC744; &#xAC00;&#xC9C4;&#xB2E4;.</p>
<hr>
<h2 id="%08%EC%83%9D%EC%84%B1%ED%98%95-ai-%EA%B8%B0%EC%88%A0"><strong>&#xC0DD;&#xC131;&#xD615; AI &#xAE30;&#xC220;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-33.png" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="1946" height="668" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-33.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-33.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-33.png 1600w, https://ilmincho.me/content/images/2024/10/image-33.png 1946w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%08%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%9D%90%EB%A6%84"><strong>&#xC11C;&#xBE44;&#xC2A4; &#xD750;&#xB984;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-34.png" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="1878" height="962" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-34.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-34.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-34.png 1600w, https://ilmincho.me/content/images/2024/10/image-34.png 1878w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%EA%B5%AC%EC%A1%B0"><strong>&#xC544;&#xD0A4;&#xD14D;&#xCCD0; &#xAD6C;&#xC870;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-35.png" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="1714" height="770" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-35.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-35.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-35.png 1600w, https://ilmincho.me/content/images/2024/10/image-35.png 1714w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-36.png" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="392" height="850"><figcaption><span style="white-space: pre-wrap;">&#xAFC8;&#xAFD4;&#xC628; &#xC9C1;&#xC5C5;, &#xADF8;&#xB9AC;&#xB358; &#xC0B6;&#xC744; &#xD3EC;&#xC2A4;&#xD2B8;&#xC787;&#xC5D0; &#xC801;&#xAE30;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-37.png" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="392" height="846"><figcaption><span style="white-space: pre-wrap;">&#x2018;&#xAFC8;&#xC744; &#xC774;&#xB8EC; &#xB098;&#x2019;&#xC758; &#xC774;&#xC57C;&#xAE30;&#xB97C; &#xCC45;&#xC73C;&#xB85C; &#xC77D;&#xC5B4;&#xBCF4;&#xAE30;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-38.png" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="380" height="824"><figcaption><span style="white-space: pre-wrap;">&apos;&#xAFC8;&#xC744; &#xC774;&#xB8EC; &#xB098;&#x2019;&#xB97C; &#xC0AC;&#xC9C4;&#xC73C;&#xB85C; &#xC81C;&#xACF5; / &#xAFC8;&#xACFC; &#xAD00;&#xB828;&#xB41C; &#xD504;&#xB85C;&#xADF8;&#xB7A8; &#xC77C;&#xC790;&#xB9AC; &#xCD94;&#xCC9C;</span></figcaption></figure>
<hr>
<p>&#xC774;&#xBC88; &#xD504;&#xB85C;&#xC81D;&#xD2B8;&#xB294; Kakao x Groom &#xD574;&#xCEE4;&#xD1A4;&#xACFC; KDT &#xD574;&#xCEE4;&#xD1A4;&#xC5D0; &#xC5F0;&#xC774;&#xC5B4; &#xCC38;&#xC5EC;&#xD558;&#xBA74;&#xC11C; &#xC9C4;&#xD589;&#xB410;&#xC5C8;&#xB2E4;. &#xD300;&#xC6D0;&#xB4E4;&#xC740; &#xBD80;&#xD2B8;&#xCEA0;&#xD504;&#xC5D0;&#xC11C; &#xB9C8;&#xC74C;&#xB9DE;&#xB294; &#xB3D9;&#xB8CC;&#xB4E4;&#xB85C; &#xAD6C;&#xC131;&#xB410;&#xACE0;, &#xC6B0;&#xB9AC;&#xB294; &#xC758;&#xBBF8; &#xC788;&#xB294; &#xACB0;&#xACFC;&#xBB3C;&#xC744; &#xB9CC;&#xB4E4;&#xC5B4;&#xB0B4;&#xAE30; &#xC704;&#xD574; &#xC81C;&#xD55C;&#xB41C; &#xC2DC;&#xAC04; &#xC18D;&#xC5D0;&#xC11C; &#xAC01;&#xC790;&#xC758; &#xC5F4;&#xC815;&#xC744; &#xC3DF;&#xC544;&#xBD80;&#xC5C8;&#xC5C8;&#xB2E4;. &#xD2B9;&#xD788; &#xB450; &#xD574;&#xCEE4;&#xD1A4;&#xC5D0; &#xB3D9;&#xC2DC;&#xC5D0; &#xCC38;&#xC5EC;&#xD574;&#xC57C; &#xD588;&#xB358; &#xC0C1;&#xD669;&#xC774;&#xB77C;, KDT &#xD574;&#xCEE4;&#xD1A4;&#xC5D0; &#xC81C;&#xCD9C;&#xD560; &#xC544;&#xC774;&#xB514;&#xC5B4;&#xB97C; &#xBA3C;&#xC800; &#xC120;&#xC815;&#xD558;&#xACE0; &#xB098;&#xC11C; Kakao &#xD574;&#xCEE4;&#xD1A4;&#xC744; &#xD1B5;&#xD574; &#xC774;&#xB97C; &#xBBF8;&#xB9AC; &#xD14C;&#xC2A4;&#xD2B8;&#xD558;&#xBA70; &#xC11C;&#xBE44;&#xC2A4;&#xC758; &#xAC00;&#xB2A5;&#xC131;&#xC744; &#xAC80;&#xC99D;&#xD574;&#xBCF4;&#xAE30;&#xB85C; &#xD588;&#xC5C8;&#xB2E4;. </p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-003.jpeg" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="1428" height="804" srcset="https://ilmincho.me/content/images/size/w600/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-003.jpeg 600w, https://ilmincho.me/content/images/size/w1000/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-003.jpeg 1000w, https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-003.jpeg 1428w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xCD08;&#xAE30;&#xC5D0; &#xC544;&#xC774;&#xB514;&#xC5B4;&#xB97C; &#xC815;&#xD558;&#xB294; &#xB2E8;&#xACC4;&#xC5D0;&#xC11C;&#xB294; &#xD300;&#xC6D0;&#xB4E4;&#xC774; &#xB2E4;&#xC591;&#xD55C; &#xCC3D;&#xC758;&#xC801;&#xC778; &#xC11C;&#xBE44;&#xC2A4; &#xC544;&#xC774;&#xB514;&#xC5B4;&#xB97C; &#xC81C;&#xC548;&#xD588;&#xC5C8;&#xB2E4;. &#xB178;&#xC778;&#xACFC; &#xC544;&#xC774;&#xB4E4;&#xC744; &#xC704;&#xD55C; &#xADF8;&#xB9BC; &#xCE58;&#xB8CC; &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158;&#xC774;&#xB098;, &#xB178;&#xC778; &#xBCA0;&#xC774;&#xBE44;&#xC2DC;&#xD130; &#xB9E4;&#xCE6D; &#xD50C;&#xB7AB;&#xD3FC;, &#xC2DC;&#xB2C8;&#xC5B4;&#xB97C; &#xC704;&#xD55C; &#xB9DE;&#xCDA4;&#xD615; &#xCEE4;&#xBBA4;&#xB2C8;&#xCF00;&#xC774;&#xC158; &#xC11C;&#xBE44;&#xC2A4;(&#xD560;&#xCE74;&#xC624;&#xD1A1;) &#xB4F1; &#xC5EC;&#xB7EC; &#xAC00;&#xC9C0; &#xBC29;&#xD5A5;&#xC73C;&#xB85C; &#xB17C;&#xC758;&#xAC00; &#xC624;&#xAC14;&#xC5C8;&#xB2E4;. &#xD558;&#xC9C0;&#xB9CC; &#xC774;&#xBBF8; &#xC874;&#xC7AC;&#xD558;&#xB294; &#xC11C;&#xBE44;&#xC2A4;&#xB4E4;&#xACFC; &#xCC28;&#xBCC4;&#xC131;&#xB3C4; &#xBD80;&#xC871;&#xD588;&#xACE0;, &#xAE30;&#xC220;&#xC801;&#xC73C;&#xB85C; &#xAD6C;&#xD604; &#xAC00;&#xB2A5;&#xD55C;&#xC9C0;, &#xADF8;&#xB9AC;&#xACE0; &#xC9E7;&#xC740; &#xAE30;&#xAC04; &#xC548;&#xC5D0; &#xC2E4;&#xD604;&#xD560; &#xC218; &#xC788;&#xC744;&#xC9C0;&#xB97C; &#xACE0;&#xBBFC;&#xD558;&#xBA74;&#xC11C; &#xCD5C;&#xC885;&#xC801;&#xC73C;&#xB85C; &#xAD6C;&#xD604;&#xD560; &#xC11C;&#xBE44;&#xC2A4; &#xC544;&#xC774;&#xB514;&#xC5B4;&#xB97C; &#xD655;&#xC815;&#xD558;&#xB294; &#xB370; &#xC2DC;&#xAC04;&#xC774; &#xAF64; &#xAC78;&#xB838;&#xC5C8;&#xB2E4;. &#xD300;&#xC6D0; &#xBAA8;&#xB450;&#xAC00; &#xBE44;&#xD310;&#xC801;&#xC778; &#xC2DC;&#xAC01;&#xC73C;&#xB85C; &#xD1A0;&#xB860;&#xC5D0; &#xCC38;&#xC5EC;&#xD558;&#xBA70;, &#xAC01;&#xC790;&#xC758; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC544;&#xC774;&#xB514;&#xC5B4;&#xB97C; &#xAC80;&#xD1A0;&#xD558;&#xACE0; &#xB2E4;&#xB4EC;&#xC5B4;&#xAC00;&#xB294; &#xACFC;&#xC815;&#xC744; &#xAC70;&#xCE58;&#xBA74;&#xC11C; &#xB354; &#xB098;&#xC740; &#xBC29;&#xD5A5;&#xC131;&#xC744; &#xC815;&#xB9AC;&#xD560; &#xC218; &#xC788;&#xC5C8;&#xC5C8;&#xB2E4;.</p>
<p>&#xD2B9;&#xD788; KDT &#xD574;&#xCEE4;&#xD1A4;&#xC5D0; &#xC81C;&#xCD9C;&#xD560; &#xAE30;&#xD68D;&#xC11C;&#xB97C; &#xC791;&#xC131;&#xD558;&#xB294; &#xB370; &#xC815;&#xB9D0; &#xB9CE;&#xC740; &#xC2DC;&#xAC04;&#xC744; &#xC3DF;&#xC544;&#xBD80;&#xC5C8;&#xC5C8;&#xB2E4;. &#xC774; &#xAE30;&#xD68D;&#xC11C; &#xC791;&#xC131;&#xC740; &#xB2E8;&#xC21C;&#xD788; &#xC544;&#xC774;&#xB514;&#xC5B4;&#xB97C; &#xC815;&#xB9AC;&#xD558;&#xB294; &#xAC83;&#xC744; &#xB118;&#xC5B4;&#xC11C;, &#xC2E4;&#xC9C8;&#xC801;&#xC778; &#xC0AC;&#xC5C5;&#xC131;&#xACFC; &#xC0AC;&#xC6A9;&#xC790;&#xC758; &#xC694;&#xAD6C;&#xB97C; &#xCDA9;&#xC871;&#xC2DC;&#xD0A4;&#xB294; &#xC11C;&#xBE44;&#xC2A4;&#xB85C; &#xBC1C;&#xC804;&#xC2DC;&#xD0A4;&#xAE30; &#xC704;&#xD55C; &#xC911;&#xC694;&#xD55C; &#xACFC;&#xC815;&#xC774;&#xC5C8;&#xB2E4;. &#xC6B0;&#xB9AC;&#xB294; &#xC2DC;&#xC7A5; &#xC870;&#xC0AC;&#xB97C; &#xD1B5;&#xD574; &#xC11C;&#xBE44;&#xC2A4; &#xC218;&#xC694;&#xB97C; &#xBD84;&#xC11D;&#xD588;&#xACE0;, &#xAD00;&#xB828; &#xD1B5;&#xACC4; &#xC790;&#xB8CC;&#xB97C; &#xC870;&#xC0AC;&#xD558;&#xBA74;&#xC11C; &#xAE30;&#xD68D;&#xC11C;&#xB97C; &#xB354; &#xD0C4;&#xD0C4;&#xD558;&#xAC8C; &#xB9CC;&#xB4E4;&#xC5C8;&#xC5C8;&#xB2E4;. &#xC774; &#xACFC;&#xC815;&#xC5D0;&#xC11C; &#xBAA8;&#xB4E0; &#xD300;&#xC6D0;&#xC774; &#xB2E8;&#xC21C;&#xD788; &#xAC1C;&#xBC1C;&#xC790;&#xC758; &#xC5ED;&#xD560;&#xC744; &#xB118;&#xC5B4; PM &#xC5ED;&#xD560;&#xAE4C;&#xC9C0; &#xACBD;&#xD5D8;&#xD560; &#xC218; &#xC788;&#xC5C8;&#xACE0;, &#xC11C;&#xBE44;&#xC2A4; &#xAE30;&#xD68D;&#xACFC; &#xBB38;&#xC11C; &#xC791;&#xC131; &#xC5ED;&#xB7C9;&#xB3C4; &#xD06C;&#xAC8C; &#xC131;&#xC7A5;&#xD560; &#xC218; &#xC788;&#xC5C8;&#xC5C8;&#xB2E4;.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-002.jpeg" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="1428" height="803" srcset="https://ilmincho.me/content/images/size/w600/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-002.jpeg 600w, https://ilmincho.me/content/images/size/w1000/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-002.jpeg 1000w, https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-002.jpeg 1428w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xADF8;&#xB7F0;&#xB370; &#xAE30;&#xD68D;&#xC5D0; &#xB108;&#xBB34; &#xB9CE;&#xC740; &#xC2DC;&#xAC04;&#xC744; &#xC4F0;&#xB2E4; &#xBCF4;&#xB2C8; &#xC2E4;&#xC81C; &#xAD6C;&#xD604;&#xD560; &#xC2DC;&#xAC04;&#xC774; &#xB9CE;&#xC774; &#xBD80;&#xC871;&#xD574;&#xC84C;&#xC5C8;&#xB2E4;. &#xD574;&#xCEE4;&#xD1A4; &#xC911; &#xAE30;&#xAC04; 4&#xC77C; &#xC911;&#xC5D0; 3&#xC77C;&#xC744; KDT&#xC11C;&#xBE44;&#xC2A4; &#xAE30;&#xD68D;&#xC11C;&#xB97C; &#xC791;&#xC131;&#xD558;&#xB290;&#xB77C; &#xBAA8;&#xB4E0; &#xC2DC;&#xAC04;&#xC744; &#xBCF4;&#xB0C8;&#xB2E4;. &#xADF8;&#xB798;&#xC11C; &#xC6B0;&#xB9AC;&#xB294; &#xBD80;&#xAC00;&#xC801;&#xC778; &#xAE30;&#xB2A5;&#xB4E4;&#xC744; &#xC0DD;&#xB7B5;&#xD558;&#xACE0;, &#xD575;&#xC2EC; &#xAE30;&#xB2A5;&#xC5D0;&#xB9CC; &#xC9D1;&#xC911;&#xD558;&#xAE30;&#xB85C; &#xACB0;&#xC815;&#xD588;&#xC5C8;&#xB2E4;. &#xBA3C;&#xC800; &#xC11C;&#xBE44;&#xC2A4;&#xC758; &#xC804;&#xBC18;&#xC801;&#xC778; &#xD750;&#xB984;&#xACFC; &#xAE30;&#xC220;&#xC801;&#xC778; &#xC774;&#xD574;&#xB97C; &#xD300;&#xC6D0;&#xB4E4; &#xAC04;&#xC5D0; &#xB9DE;&#xCD94;&#xACE0;, &#xAC01;&#xC790; &#xC5ED;&#xD560;&#xC744; &#xBA85;&#xD655;&#xD788; &#xBD84;&#xB2F4;&#xD588;&#xC5C8;&#xB2E4;. &#xAE30;&#xC220;&#xC801;&#xC778; &#xBD80;&#xBD84;&#xC744; &#xC11C;&#xB85C; &#xC774;&#xD574;&#xC2DC;&#xD0A4;&#xB294; &#xACFC;&#xC815;&#xC5D0;&#xC11C; &#xC5EC;&#xB7EC; &#xCC28;&#xB840; &#xB17C;&#xC758;&#xB97C; &#xAC70;&#xCCE4;&#xACE0;, &#xC11C;&#xBE44;&#xC2A4; &#xC544;&#xD0A4;&#xD14D;&#xCC98;&#xB97C; &#xB2E4;&#xC2DC; &#xC815;&#xB9AC;&#xD558;&#xBA74;&#xC11C; &#xAC01; &#xD30C;&#xD2B8;&#xC5D0;&#xC11C; &#xBC1C;&#xC0DD;&#xD558;&#xB294; &#xBB38;&#xC81C;&#xB4E4;&#xC744; &#xBE60;&#xB974;&#xAC8C; &#xD574;&#xACB0;&#xD558;&#xAE30; &#xC704;&#xD574; &#xACC4;&#xC18D; &#xC18C;&#xD1B5;&#xD588;&#xC5C8;&#xB2E4;.</p>
<p>&#xAC1C;&#xBC1C; &#xACFC;&#xC815;&#xC5D0;&#xC11C; &#xC790;&#xC798;&#xD55C; &#xC774;&#xC288;&#xB4E4;&#xC774; &#xACC4;&#xC18D; &#xBC1C;&#xC0DD;&#xD588;&#xC5C8;&#xC9C0;&#xB9CC;, &#xD300;&#xC6D0;&#xB4E4;&#xC758; &#xD611;&#xB825; &#xB355;&#xBD84;&#xC5D0; &#xADF8;&#xB7F0; &#xBB38;&#xC81C;&#xB4E4;&#xC744; &#xBE60;&#xB974;&#xAC8C; &#xD574;&#xACB0;&#xD574; &#xB098;&#xAC14;&#xC5C8;&#xB2E4;. &#xC6B0;&#xB9AC;&#xB294; &#xB04A;&#xC784;&#xC5C6;&#xC774; &#xC11C;&#xB85C;&#xB97C; &#xC9C0;&#xC6D0;&#xD558;&#xACE0; &#xD53C;&#xB4DC;&#xBC31;&#xC744; &#xC8FC;&#xACE0;&#xBC1B;&#xC73C;&#xBA74;&#xC11C; &#xBC24;&#xC744; &#xC0C8;&#xC6B0;&#xBA70; &#xAE30;&#xB2A5; &#xAD6C;&#xD604;&#xC5D0; &#xC9D1;&#xC911;&#xD588;&#xC5C8;&#xB2E4;. &#xD2B9;&#xD788; &#xAE30;&#xC220;&#xC801; &#xC5B4;&#xB824;&#xC6C0;&#xB4E4;&#xC774; &#xBC1C;&#xC0DD;&#xD560; &#xB54C;&#xB9C8;&#xB2E4; &#xC11C;&#xB85C;&#xC758; &#xACBD;&#xD5D8;&#xACFC; &#xC9C0;&#xC2DD;&#xC744; &#xACF5;&#xC720;&#xD558;&#xBA74;&#xC11C; &#xBB38;&#xC81C;&#xB4E4;&#xC744; &#xD574;&#xACB0;&#xD588;&#xACE0;, &#xB05D;&#xAE4C;&#xC9C0; &#xD3EC;&#xAE30;&#xD558;&#xC9C0; &#xC54A;&#xACE0; &#xBAA9;&#xD45C;&#xB97C; &#xB2EC;&#xC131;&#xD558;&#xB294; &#xB370; &#xC8FC;&#xB825;&#xD588;&#xC5C8;&#xB2E4;.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-001.jpeg" class="kg-image" alt="Dream (&#xB2F9;&#xC2E0;&#xC758; &#xAFC8;&#xC744; &#xB4DC;&#xB9BD;&#xB2C8;&#xB2E4;.),  Hackathon, kakao x goorm" loading="lazy" width="1050" height="1400" srcset="https://ilmincho.me/content/images/size/w600/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-001.jpeg 600w, https://ilmincho.me/content/images/size/w1000/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-001.jpeg 1000w, https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-12-13-14-36-001.jpeg 1050w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xACB0;&#xAD6D; &#xC6B0;&#xB9AC;&#xB294; &#xD575;&#xC2EC; &#xAE30;&#xB2A5;&#xC744; &#xC131;&#xACF5;&#xC801;&#xC73C;&#xB85C; &#xAD6C;&#xD604;&#xD560; &#xC218; &#xC788;&#xC5C8;&#xB2E4;. &#xC774; &#xACFC;&#xC815;&#xC744; &#xD1B5;&#xD574; &#xD300;&#xC6CC;&#xD06C;&#xC758; &#xC911;&#xC694;&#xC131;&#xC744; &#xB2E4;&#xC2DC; &#xD55C; &#xBC88; &#xAE68;&#xB2EC;&#xC558;&#xACE0;, &#xC81C;&#xD55C;&#xB41C; &#xC2DC;&#xAC04; &#xC548;&#xC5D0;&#xC11C;&#xB3C4; &#xD6A8;&#xC728;&#xC801;&#xC73C;&#xB85C; &#xD611;&#xC5C5;&#xD558;&#xBA74;&#xC11C; &#xAE30;&#xB2A5;&#xC744; &#xC644;&#xC131;&#xD574; &#xB098;&#xAC00;&#xB294; &#xBC29;&#xBC95;&#xC744; &#xBC30;&#xC6E0;&#xC5C8;&#xB2E4;. &#xB354;&#xBD88;&#xC5B4; &#xAC1C;&#xBC1C;&#xC790;&#xB85C;&#xC11C;&#xC758; &#xAE30;&#xC220;&#xC801;&#xC778; &#xC5ED;&#xB7C9;&#xBFD0;&#xB9CC; &#xC544;&#xB2C8;&#xB77C;, &#xAE30;&#xD68D;&#xACFC; &#xD611;&#xC5C5;, &#xBB38;&#xC81C; &#xD574;&#xACB0; &#xB2A5;&#xB825; &#xB4F1; &#xB2E4;&#xBC29;&#xBA74;&#xC5D0;&#xC11C; &#xC131;&#xC7A5;&#xD560; &#xC218; &#xC788;&#xC5C8;&#xB358; &#xAC12;&#xC9C4; &#xACBD;&#xD5D8;&#xC774;&#xC5C8;&#xB2E4;.</p>
<p>&#xC6B0;&#xB9AC;&#xB294; &#xC6D0;&#xD588;&#xB358; &#xC11C;&#xBE44;&#xC2A4;&#xB97C; &#xC815;&#xD655;&#xD558;&#xAC8C; &#xB9CC;&#xB4E4;&#xAC8C; &#xB418;&#xC5C8;&#xACE0;, &#xB300;&#xC0C1;&#xC744; &#xBC1B;&#xC9C0;&#xC54A;&#xC744;&#xAE4C;&#xB77C;&#xB294; &#xAE30;&#xB300;&#xC5D0; &#xBD80;&#xD480;&#xC5C8;&#xC9C0;&#xB9CC; &#xC544;&#xC27D;&#xAC8C;&#xB3C4; &#xC218;&#xC0C1;&#xC740; &#xD558;&#xC9C0;&#xBABB;&#xD588;&#xB2E4;. &#xD558;&#xC9C0;&#xB9CC; &#xC9E7;&#xC740;&#xAE30;&#xAC04;&#xB3D9;&#xC548; &#xBAB0;&#xC785;&#xD574;&#xC11C; &#xBAA9;&#xD45C;&#xD588;&#xB358; &#xC11C;&#xBE44;&#xC2A4;&#xB97C; &#xB9CC;&#xB4E4;&#xC5B4;&#xB0B4;&#xB294; &#xACFC;&#xC815;&#xC5D0;&#xC11C; &#xD611;&#xC5C5;&#xD558;&#xACE0; &#xB9E1;&#xC740;&#xBC14;&#xB97C; &#xB2E4;&#xD558;&#xBA74;&#xC11C; &#xB9CE;&#xC774; &#xC131;&#xC7A5;&#xD588;&#xB2E4;&#xACE0; &#xC0DD;&#xAC01;&#xD55C;&#xB2E4;. &#xC88B;&#xC740; &#xD300;&#xC6D0;&#xB4E4;&#xC744; &#xB9CC;&#xB0AC;&#xACE0; &#xC5EC;&#xAE30;&#xC11C; &#xADF8;&#xCE58;&#xC9C0;&#xC54A;&#xACE0; &#xB2E4;&#xB978; &#xB300;&#xD68C;&#xB4E4;&#xC744; &#xD568;&#xAED8; &#xB098;&#xAC00;&#xBA74;&#xC11C; &#xBC1C;&#xC804;&#xD558;&#xAE30;&#xB85C; &#xC57D;&#xC18D;&#xD588;&#xB2E4;. </p>
<p>&#xB2E4;&#xB4E4; &#xACE0;&#xC0DD;&#xB9CE;&#xC558;&#xC5B4; :) &#x314E;&#x314E;  </p>
<hr>
<h2 id="%08%EC%84%9C%EB%B9%84%EC%8A%A4%EC%97%90-%EA%B4%80%ED%95%9C-%ED%9A%8C%EA%B3%A0"><strong>&#xC11C;&#xBE44;&#xC2A4;&#xC5D0; &#xAD00;&#xD55C; &#xD68C;&#xACE0;</strong></h2>
<ul><li>&#xBE44;&#xC988;&#xB2C8;&#xC2A4;&#xBAA8;&#xB378;&#xC5D0; &#xB300;&#xD55C; &#xACE0;&#xBBFC; ( &#xADF8;&#xB0E5; &#xC2A4;&#xD1A0;&#xB9AC;,&#xC774;&#xBBF8;&#xC9C0; &#xC0DD;&#xC131;&#xD558;&#xC5EC; &#xAD50;&#xC721;&#xD504;&#xB85C;&#xADF8;&#xB7A8;&#xC744; &#xCD94;&#xCC9C;&#xD558;&#xB294;&#xAC83;&#xC774; &#xC544;&#xB2CC; &#xACE0;&#xB839;&#xCE35;&#xB4E4;&#xC744; &#xC704;&#xD55C; &#xAD50;&#xC721;&#xD50C;&#xB7AB;&#xD3FC;&#xB9CC;&#xB4E4;&#xAE30;&#xB85C; &#xBC14;&#xAFD4;&#xC57C;&#xD558;&#xB098;?, &#xAC1C;&#xBC1C;&#xD558;&#xB824;&#xB294; &#xC11C;&#xBE44;&#xC2A4;&#xAC00; &#xB514;&#xC9C0;&#xD138;&#xC7A5;&#xBCBD;&#xC744; &#xD5C8;&#xBB3C;&#xAE30;&#xC704;&#xD55C; &#xC218;&#xB2E8;&#xC911; &#xD558;&#xB098;&#xB77C;&#xACE0; &#xC5B4;&#xD544;&#xD558;&#xC9C0;&#xB9CC; &#xC124;&#xB4DD;&#xB825;&#xC774; &#xC5C6;&#xC5B4;&#xBCF4;&#xC784;&#x2026;&#xB4F1;&#xB4F1;)</li><li>&#xAE30;&#xC220;&#xC801;&#xC778; &#xBD80;&#xBD84;( &#xBAA8;&#xB378;&#xC744; gpt4&#xAC00; &#xC544;&#xB2CC; &#xAE30;&#xC874; llm&#xBAA8;&#xB378; &#xC0AC;&#xC6A9;&#xD574;&#xC11C; &#xC2A4;&#xD1A0;&#xB9AC;&#xC0DD;&#xC131;&#xD558;&#xB294; &#xBAA8;&#xB378; &#xB9CC;&#xB4E4;&#xC5B4;&#xBCF4;&#xAE30;(&#xC11C;&#xBC84;&#xC758; &#xD55C;&#xACC4;), TTS&#xB97C; &#xCD94;&#xAC00;&#xD55C;&#xB2E4;&#xB358;&#xC9C0;, RAG&#xB97C; &#xC0AC;&#xC6A9;&#xD560;&#xB54C; &#xD55C;&#xAD6D;&#xC758; &#xC2DC;&#xB300;&#xC801; &#xBC30;&#xACBD;&#xC744; &#xB123;&#xC5B4;&#xC11C; &#xD14D;&#xC2A4;&#xD2B8; &#xC0DD;&#xC131;&#xD558;&#xAE30;, &#xC774;&#xBBF8;&#xC9C0;&#xC5D0; &#xC0AC;&#xC6A9;&#xC790; &#xC5BC;&#xAD74; &#xC0BD;&#xC785;&#xD558;&#xAE30;)</li></ul>
<hr>]]></content:encoded></item><item><title><![CDATA[식당 어때?, Review-Based Restaurant RecSys]]></title><description><![CDATA[<hr>
<h2 id="2024-kakaotech-bootcamp%08machine-learning-model-serving-202407202408"><strong>2024 KakaoTech Bootcamp - Machine Learning Model Serving (2024.07 - 2024.08)</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/KakaoTechBC-GOATNINE?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">KakaoTechBC-GOATNINE</div><div class="kg-bookmark-description">KakaoTechBC-GOATNINE has 3 repositories available. Follow their code on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://avatars.githubusercontent.com/u/174582085?s=280&amp;v=4" alt></div></a></figure>
<table class="bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888]"><thead class="border-b-border-100/50 border-b-[0.5px] text-left"><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD300;&#xC6D0;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xACFC;&#xC815;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xB2F4;&#xB2F9;&#xC5C5;&#xBB34;</th></tr></thead><tbody><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">ilmin(&#xC870;&#xC77C;&#xBBFC;) -&#xD300;&#xC7A5;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC778;&#xACF5;&#xC9C0;&#xB2A5;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xB370;&#xC774;&#xD130; &#xD06C;&#xB864;&#xB9C1;</td></tr></tbody></table>]]></description><link>https://ilmincho.me/restaurant-recsys/</link><guid isPermaLink="false">6704e1de8680d90496636506</guid><category><![CDATA[Projects]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Sat, 31 Aug 2024 15:08:00 GMT</pubDate><media:content url="https://ilmincho.me/content/images/2024/10/ezgif.com-animated-gif-maker.gif" medium="image"/><content:encoded><![CDATA[<hr>
<h2 id="2024-kakaotech-bootcamp%08machine-learning-model-serving-202407202408"><strong>2024 KakaoTech Bootcamp - Machine Learning Model Serving (2024.07 - 2024.08)</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/KakaoTechBC-GOATNINE?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">KakaoTechBC-GOATNINE</div><div class="kg-bookmark-description">KakaoTechBC-GOATNINE has 3 repositories available. Follow their code on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys"><span class="kg-bookmark-author">GitHub</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://avatars.githubusercontent.com/u/174582085?s=280&amp;v=4" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys"></div></a></figure>
<table class="bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888]"><thead class="border-b-border-100/50 border-b-[0.5px] text-left"><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD300;&#xC6D0;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xACFC;&#xC815;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xB2F4;&#xB2F9;&#xC5C5;&#xBB34;</th></tr></thead><tbody><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">ilmin(&#xC870;&#xC77C;&#xBBFC;) -&#xD300;&#xC7A5;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC778;&#xACF5;&#xC9C0;&#xB2A5;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xB370;&#xC774;&#xD130; &#xD06C;&#xB864;&#xB9C1;, &#xB370;&#xC774;&#xD130; &#xC804;&#xCC98;&#xB9AC; &#xBC0F; &#xBD84;&#xC11D; - &#xD30C;&#xC774;&#xD504;&#xB77C;&#xC778; &#xAD6C;&#xCD95;, &#xBAA8;&#xB378; &#xAD6C;&#xD604; &#xBC0F; &#xAC1C;&#xC120;, &#xB9AC;&#xBDF0; &#xD074;&#xB7EC;&#xC2A4;&#xD130;&#xB9C1;, AI api &#xAD6C;&#xCD95; &#xBC0F; &#xC5F0;&#xB3D9;</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">lucy(&#xC2EC;&#xBA85;&#xC120;)</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC778;&#xACF5;&#xC9C0;&#xB2A5;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xB370;&#xC774;&#xD130; &#xD06C;&#xB864;&#xB9C1;, &#xB370;&#xC774;&#xD130; &#xC804;&#xCC98;&#xB9AC;, &#xBAA8;&#xB378; &#xAD6C;&#xD604; AI-front &#xB9F5;, &#xB9AC;&#xC2A4;&#xD2B8; &#xAD6C;&#xCD95;</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">pocco(&#xBC15;&#xC0C1;&#xC740;)</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD480;&#xC2A4;&#xD0DD;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">UI &#xBC0F; UX &#xC124;&#xACC4;, &#xD504;&#xB860;&#xD2B8;, &#xBC31;&#xC5D4;&#xB4DC;</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">neo(&#xC774;&#xC815;&#xC9C4;)</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD480;&#xC2A4;&#xD0DD;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD504;&#xB860;&#xD2B8;, &#xBC31;&#xC5D4;&#xB4DC;</td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">terry(&#xAC15;&#xC6B0;&#xBE48;)</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD074;&#xB77C;&#xC6B0;&#xB4DC;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC11C;&#xBC84;&#xAC04; &#xD1B5;&#xC2E0; &#xAD6C;&#xCD95;, &#xBC31;&#xC5D4;&#xB4DC;, &#xC778;&#xD504;&#xB77C; &#xAD6C;&#xCD95;</td></tr></tbody></table>
<hr>
<figure class="kg-card kg-embed-card"><iframe width="200" height="150" src="https://www.youtube.com/embed/zjOHfGqeT1Y?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="&#xCE74;&#xD14C;&#xBD80;_1st_mlms"></iframe></figure>
<hr>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-14.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1059" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-14.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-14.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-14.png 1600w, https://ilmincho.me/content/images/2024/10/image-14.png 2350w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xB79C;&#xB529; &#xD398;&#xC774;&#xC9C0; - &#xAC80;&#xC0C9; &#xD398;&#xC774;&#xC9C0;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-22.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1098" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-22.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-22.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-22.png 1600w, https://ilmincho.me/content/images/2024/10/image-22.png 2356w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xCD94;&#xCC9C; &#xB9AC;&#xC2A4;&#xD2B8;- &#xD540; &#xB9C8;&#xCEE4; &#xD45C;&#xC2DC;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-15.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1938" height="1558" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-15.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-15.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-15.png 1600w, https://ilmincho.me/content/images/2024/10/image-15.png 1938w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xCD94;&#xCC9C; &#xACB0;&#xACFC; - keyword: &#xBD84;&#xB2F9;&#xC2DC; &#xB3C8;&#xAE4C;&#xC2A4;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-16.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1626" height="632" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-16.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-16.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-16.png 1600w, https://ilmincho.me/content/images/2024/10/image-16.png 1626w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">QnA &#xD398;&#xC774;&#xC9C0;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-17.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1628" height="904" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-17.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-17.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-17.png 1600w, https://ilmincho.me/content/images/2024/10/image-17.png 1628w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">QnA &#xAE00; &#xB4F1;&#xB85D;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-18.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1890" height="750" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-18.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-18.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-18.png 1600w, https://ilmincho.me/content/images/2024/10/image-18.png 1890w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Admin - QnA</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-19.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1900" height="938" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-19.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-19.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-19.png 1600w, https://ilmincho.me/content/images/2024/10/image-19.png 1900w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Admin - User</span></figcaption></figure>
<hr>
<h2 id="%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94"><strong>&#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xAC1C;&#xC694;</strong></h2>
<ul><li>&#xC0AC;&#xC6A9;&#xC790;&#xC5D0;&#xAC8C; &#xAC1C;&#xC778; &#xB9DE;&#xCDA4;&#xD615; &#xB9DB;&#xC9D1; &#xCD94;&#xCC9C; &#xC11C;&#xBE44;&#xC2A4;&#xB97C; &#xC81C;&#xACF5;&#xD558;&#xAE30; &#xC704;&#xD574; &#xBA38;&#xC2E0;&#xB7EC;&#xB2DD; &#xBAA8;&#xB378;&#xC744; &#xC11C;&#xBE59;&#xD558;&#xB294; &#xC6F9; &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158;&#xC744; &#xAC1C;&#xBC1C;&#xA0;</li><li>&#xC0AC;&#xC6A9;&#xC790;&#xAC00; &#xC6D0;&#xD558;&#xB294; &#xC74C;&#xC2DD; &#xC885;&#xB958;&#xB098; &#xD0A4;&#xC6CC;&#xB4DC;&#xB97C; &#xC785;&#xB825;&#xD558;&#xBA74;, &#xBAA8;&#xB378;&#xC740; &#xC2E4;&#xC2DC;&#xAC04;&#xC73C;&#xB85C; &#xC0AC;&#xC6A9;&#xC790; &#xADFC;&#xBC29;&#xC758; &#xC801;&#xD569;&#xD55C; &#xB9DB;&#xC9D1; &#xB9AC;&#xC2A4;&#xD2B8;&#xB97C; &#xCD94;&#xCC9C;</li></ul>
<h2 id="%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5"><strong>&#xC8FC;&#xC694; &#xAE30;&#xB2A5;</strong></h2>
<img src="https://ilmincho.me/content/images/2024/10/ezgif.com-animated-gif-maker.gif" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys"><p><strong>API &#xC5D4;&#xB4DC;&#xD3EC;&#xC778;&#xD2B8; &#xC124;&#xACC4;</strong>:</p>
<ul><li>&#xC0AC;&#xC6A9;&#xC790;&#xC758; &#xC785;&#xB825;(&#xC74C;&#xC2DD; &#xC885;&#xB958;, &#xD0A4;&#xC6CC;&#xB4DC;)&#xC744; &#xBC1B;&#xC544;, &#xD604;&#xC7AC; &#xC704;&#xCE58; &#xAE30;&#xBC18;&#xC73C;&#xB85C; &#xCD94;&#xCC9C; &#xB9DB;&#xC9D1; &#xB9AC;&#xC2A4;&#xD2B8;(&#xAC00;&#xAC8C;&#xC774;&#xB984;, &#xC810;&#xC218;, &#xBE48;&#xB3C4;&#xC218;&#xAC00; &#xB192;&#xC740; &#xB2E8;&#xC5B4;)&#xB97C; &#xC81C;&#xACF5;&#xD558;&#xB294; API&#xB97C; &#xC124;&#xACC4;&#xD568;</li><li>&#xCD94;&#xCC9C;&#xB41C; &#xB9DB;&#xC9D1; &#xB9AC;&#xC2A4;&#xD2B8;&#xB294; &#xC0AC;&#xC6A9;&#xC790; &#xADFC;&#xBC29;&#xC5D0;&#xC11C; &#xC811;&#xADFC; &#xAC00;&#xB2A5;&#xD558;&#xB3C4;&#xB85D; &#xC815;&#xB82C;&#xB418;&#xC5B4; &#xC81C;&#xACF5;&#xB418;&#xBA70;, &#xC9C0;&#xB3C4; &#xC0C1;&#xC5D0; &#xC2DC;&#xAC01;&#xC801;&#xC73C;&#xB85C; &#xD45C;&#xC2DC;&#xD568;</li></ul>
<p><strong>&#xB370;&#xC774;&#xD130; &#xC218;&#xC9D1;</strong>:</p>
<ul><li><strong>&#xB370;&#xC774;&#xD130; &#xC18C;&#xC2A4;</strong>: &#xB9AC;&#xBDF0; &#xC2E0;&#xB8B0;&#xC131;&#xC774; &#xB192;&#xC740;, &#xCE74;&#xCE74;&#xC624; &#xB9F5;&#xC744; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xC2DD;&#xB2F9;&#xC758; &#xBCC4;&#xC810;, &#xBC29;&#xBB38;&#xC790; &#xB9AC;&#xBDF0; &#xD14D;&#xC2A4;&#xD2B8;, &#xBC29;&#xBB38;&#xC790; &#xC218;, &#xC0AC;&#xC6A9;&#xC790; &#xBCC4; &#xD3C9;&#xADE0;&#xD3C9;&#xC810; &#xB4F1;&#xC758; &#xB370;&#xC774;&#xD130;&#xB97C; &#xC218;&#xC9D1;</li><li><strong>&#xB370;&#xC774;&#xD130; &#xC218;&#xC9D1;</strong>: selenium, beautifulSoup&#xC744; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xBCD1;&#xB82C; &#xD06C;&#xB864;&#xB9C1;&#xC744; &#xC9C4;&#xD589;&#xD55C;&#xB4A4;, elastic search&#xC5D0; &#xB370;&#xC774;&#xD130;&#xB97C; &#xC800;&#xC7A5;&#xD558;&#xACE0; kibana&#xB85C; &#xB370;&#xC774;&#xD130;&#xB97C; &#xBD84;&#xC11D;</li></ul>
<p><strong>&#xB370;&#xC774;&#xD130; &#xC804;&#xCC98;&#xB9AC; &#xBC0F; &#xB808;&#xC774;&#xBE14;&#xB9C1;</strong>:</p>
<ul><li><strong>&#xB9AC;&#xBDF0; &#xD14D;&#xC2A4;&#xD2B8; &#xC804;&#xCC98;&#xB9AC;</strong>: &#xB9AC;&#xBDF0; &#xB370;&#xC774;&#xD130;&#xB294; &#xC815;&#xADDC;&#xD45C;&#xD604;&#xC2DD; &#xBC0F; &#xD1A0;&#xD070;&#xD654;&#xB97C; &#xD1B5;&#xD574; &#xD544;&#xC694; &#xC5C6;&#xB294; &#xBD80;&#xBD84;&#xC744; &#xC81C;&#xAC70;&#xD558;&#xACE0;, &#xBD84;&#xC11D;&#xC5D0; &#xC801;&#xD569;&#xD55C; &#xD615;&#xD0DC;&#xB85C; &#xAC00;&#xACF5;, &#xC774;&#xB7EC;&#xD55C; &#xC804;&#xCC98;&#xB9AC; &#xACFC;&#xC815;&#xC744; &#xD1B5;&#xD574; &#xBAA8;&#xB378;&#xC774; &#xD14D;&#xC2A4;&#xD2B8; &#xB370;&#xC774;&#xD130;&#xB97C; &#xD6A8;&#xACFC;&#xC801;&#xC73C;&#xB85C; &#xD559;&#xC2B5;</li><li><strong>&#xB77C;&#xBCA8;&#xB9C1;</strong>: &#xC0AC;&#xC6A9;&#xC790; &#xB9CC;&#xC758; &#xD3C9;&#xADE0; &#xD3C9;&#xC810;&#xC744; &#xAE30;&#xBC18;&#xC73C;&#xB85C; &#xB77C;&#xBCA8;&#xB9C1; &#xC791;&#xC5C5;&#xC744; &#xC218;&#xD589;&#xD55C;&#xB4A4;, &#xCC28;&#xD6C4;&#xC5D0; &#xC9C1;&#xC811; &#xB9CC;&#xB4E0; &#xBAA8;&#xB378;&#xB85C; &#xB808;&#xC774;&#xBE14;&#xB9C1;(0,1,2)&#xB41C; &#xB9AC;&#xBDF0;&#xB4E4;&#xC744; &#xB2E4;&#xC2DC; &#xD3C9;&#xAC00; &#xC9C4;&#xD589;&#xD558;&#xBA70; &#xB77C;&#xBCA8;&#xB9C1; &#xC9C1;&#xC811; &#xC218;&#xC815; &#xACFC;&#xC815;&#xC744; &#xAC70;&#xCE68;.</li></ul>
<p><strong>&#xD2B9;&#xC0C9;&#xC788;&#xB294; &#xAE30;&#xB2A5;</strong>:</p>
<ul><li><strong>KcELENTRA, </strong>pre-trained&#xB41C; &#xBAA8;&#xB378;&#xACFC; &#xC9C1;&#xC811;&#xC218;&#xC9D1;&#xD558;&#xACE0; &#xB808;&#xC774;&#xBE14;&#xB9C1;&#xD55C; &#xB370;&#xC774;&#xD130;&#xB97C; &#xD65C;&#xC6A9;&#xD55C; &#xAC10;&#xC131;&#xD3C9;&#xAC00; &#xBAA8;&#xB378;&#xBCF4;&#xC720;.</li><li><strong>Sentence-BERT &#xBAA8;&#xB378;</strong>&#xC744; &#xC0AC;&#xC6A9;&#xD574; &#xB9AC;&#xBDF0; &#xD14D;&#xC2A4;&#xD2B8;&#xB97C; &#xC784;&#xBCA0;&#xB529;&#xC73C;&#xB85C; &#xBCC0;&#xD658;.</li><li><strong>UMAP</strong>&#xC73C;&#xB85C; &#xC784;&#xBCA0;&#xB529;&#xC744; &#xCC28;&#xC6D0; &#xCD95;&#xC18C;&#xD558;&#xC5EC; &#xAD70;&#xC9D1;&#xD654; &#xD6A8;&#xC728;&#xC131;&#xC99D;&#xAC00;.</li><li><strong>HDBSCAN</strong>&#xC744; &#xC0AC;&#xC6A9;&#xD574; &#xB9AC;&#xBDF0;&#xB4E4;&#xC744; &#xC790;&#xB3D9;&#xC73C;&#xB85C; &#xAD70;&#xC9D1;&#xD654; 1:&#xAC00;&#xC7A5; &#xB9CE;&#xC740; &#xAD70;&#xC9D1;, 0:&#xC801;&#xC740; &#xAD70;&#xC9D1;, -1: &#xB178;&#xC774;&#xC988;</li><li><strong>&#xAD70;&#xC9D1;&#xBCC4; &#xB2E8;&#xC5B4; &#xBD84;&#xC11D;</strong>: &#xAC01; &#xAD70;&#xC9D1;&#xC5D0; &#xC18D;&#xD55C; &#xB9AC;&#xBDF0;&#xB4E4;&#xC5D0;&#xC11C; &#xC790;&#xC8FC; &#xC5B8;&#xAE09;&#xB41C; &#xB2E8;&#xC5B4;&#xB4E4;&#xC744; &#xCD94;&#xCD9C;.</li></ul>
<hr>
<h2 id="%EA%B8%B0%EC%88%A0%EC%8A%A4%ED%83%9D"><strong>&#xAE30;&#xC220;&#xC2A4;&#xD0DD;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-23.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1894" height="914" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-23.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-23.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-23.png 1600w, https://ilmincho.me/content/images/2024/10/image-23.png 1894w" sizes="(min-width: 720px) 720px"></figure>
<h2 id="%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%EA%B5%AC%EC%A1%B0"><strong>&#xC544;&#xD0A4;&#xD14D;&#xCCD0; &#xAD6C;&#xC870;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-24.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1744" height="952" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-24.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-24.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-24.png 1600w, https://ilmincho.me/content/images/2024/10/image-24.png 1744w" sizes="(min-width: 720px) 720px"></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUc-TyQ_ar80UCMm-yqfJ4nprLqeOK59vqme1hagSFI7flxI8lP5T94Z8mBlMEnAV_qXNoAemsrZIa6QKPM5yL5_W4dhrjhuFbmtdV0Qisl3-EssA3ysLEPvsvOIPtvCrp1pq_hYLHdCpGaLKRzYJc7zsLFtXzWK=s2048?key=SJZ9SuxoqvhCgv9vXMznQg" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="929" height="564"><figcaption><span style="white-space: pre-wrap;">ERD</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-13.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="463" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-13.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-13.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-13.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-13.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">RecSys, Work-Flow</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUd2cxD8PWa8cIe_ovBPECycumL1OteWl75QL_HC141n_I_0ucgR1rMvsvzM0Cpi3u9FHxwxdACF8JVN5M298yP4X30N5uYCu5MS8T2CkJyjSP46p3tvILUrB9Rw_IxWjhs8PlQx1VVSXyd2Und5KSqFTM5ufNfa=s2048?key=SJZ9SuxoqvhCgv9vXMznQg" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1093" height="534"><figcaption><span style="white-space: pre-wrap;">API &#xBA85;&#xC138;&#xC11C;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-25.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1081" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-25.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-25.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-25.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-25.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">API &#xAD6C;&#xD604;</span></figcaption></figure>
<hr>
<h2 id="%08data-pipeline-ai-model-clustering"><strong>Data Pipeline, AI Model, Clustering</strong></h2>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-27.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="964" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-27.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-27.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-27.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-27.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xB370;&#xC774;&#xD130; &#xC218;&#xC9D1; &#xBC0F; &#xC804;&#xCC98;&#xB9AC;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-28.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="994" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-28.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-28.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-28.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-28.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xBCA1;&#xD130;&#xB514;&#xBE44; &#xBC0F; &#xB808;&#xC774;&#xBE14;&#xB9C1;&#xD654;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-29.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1012" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-29.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-29.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-29.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-29.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC131;&#xB2A5; &#xAC1C;&#xC120;&#xC744; &#xC704;&#xD55C; pretrained &#xBAA8;&#xB378; &#xC120;&#xC815; &#xBC0F; &#xC9C0;&#xB3C4;&#xBC29;&#xC2DD; &#xC790;&#xCCB4; &#xBAA8;&#xB378; &#xAD6C;&#xCD95; </span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-30.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1087" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-30.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-30.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-30.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-30.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;"> BiLSTM &#xD65C;&#xC6A9;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-31.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1021" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-31.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-31.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-31.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-31.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xC559;&#xC0C1;&#xBE14; &#xAE30;&#xBC95; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xCD94;&#xCC9C; API &#xAD6C;&#xCD95; &#xBC0F; &#xCD94;&#xCC9C; &#xBC29;&#xBC95;&#xB860; &#xC801;&#xC6A9;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-32.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="999" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-32.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-32.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-32.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-32.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xD074;&#xB7EC;&#xC2A4;&#xD130;&#xB9C1; &#xAD6C;&#xD604;</span></figcaption></figure>
<hr>
<h2 id="%08issues-problem-solving"><strong>Issues &amp; Problem-Solving</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://quark-wool-636.notion.site/Issues-Problem-Solving-11a5748c13ff8021971bf950f5f6089a?pvs=4&amp;ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Notion &#x2013; The all-in-one workspace for your notes, tasks, wikis, and databases.</div><div class="kg-bookmark-description">A new tool that blends your everyday work apps into one. It&#x2019;s the all-in-one workspace for you and your team</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://quark-wool-636.notion.site/images/logo-ios.png" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys"><span class="kg-bookmark-author">Notion</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.notion.so/images/meta/default.png" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys"></div></a></figure>
<p>&#xC131;&#xB2A5; &#xC774;&#xC288;&#xB97C; &#xD574;&#xACB0;&#xD558;&#xAE30; &#xC704;&#xD574; &#xC8FC;&#xAE30;&#xC801;&#xC73C;&#xB85C; &#xBAA8;&#xB378; &#xC131;&#xB2A5;&#xC744; &#xBD84;&#xC11D;&#xD558;&#xACE0;, &#xAC01;&#xC885; &#xD558;&#xC774;&#xD37C;&#xD30C;&#xB77C;&#xBBF8;&#xD130;&#xB97C; &#xC870;&#xC815;&#xD558;&#xBA70; &#xCD5C;&#xC801;&#xD654; &#xACFC;&#xC815;&#xC744; &#xAC70;&#xCCE4;&#xC74C;. &#xD2B9;&#xD788;, &#xC131;&#xB2A5; &#xAC1C;&#xC120;&#xC744; &#xC704;&#xD55C; &#xC8FC;&#xC694; &#xC811;&#xADFC; &#xBC29;&#xC2DD;&#xC73C;&#xB85C;&#xB294; &#xB2E4;&#xC74C;&#xACFC; &#xAC19;&#xC740; &#xBC29;&#xBC95;&#xC744; &#xC2DC;&#xB3C4;&#xD568;:</p>
<ul><li>&#xB370;&#xC774;&#xD130; &#xC804;&#xCC98;&#xB9AC; &#xAC1C;&#xC120;</li><li>&#xBAA8;&#xB378; &#xC544;&#xD0A4;&#xD14D;&#xCC98; &#xC870;&#xC815;</li><li>&#xD559;&#xC2B5; &#xC18D;&#xB3C4;&#xC640; &#xC131;&#xB2A5;&#xC758; &#xADE0;&#xD615;&#xC744; &#xACE0;&#xB824;&#xD55C; &#xCD5C;&#xC801;&#xD654;</li></ul>
<p>&#xAE30;&#xC874;&#xC5D0; <strong><em>222&#xCD08; &#xAC78;&#xB9AC;&#xB358; &#xC2DC;&#xAC04;</em></strong>&#xC744; &#xBCA1;&#xD130; &#xB514;&#xBE44;&#xB97C; &#xC0DD;&#xC131;&#xD558;&#xACE0; &#xB7AD;&#xD0B9;&#xD654; &#xD560; &#xB54C; &#xBC30;&#xCE58;&#xB97C; &#xC124;&#xC815;&#xD558;&#xACE0; &#xD074;&#xB7EC;&#xC2A4;&#xD130;&#xB9C1; &#xD560; &#xB54C;, &#xC77C;&#xC77C;&#xC774; &#xBAA8;&#xB378;&#xC744; &#xB2E4;&#xC6B4;&#xD558;&#xB358; &#xAD6C;&#xC870;&#xB791; &#xD5C8;&#xAE45;&#xD398;&#xC774;&#xC2A4;&#xC5D0;&#xC11C; &#xB04C;&#xC5B4;&#xC624;&#xB358; &#xAC83;&#xC744; &#xC11C;&#xBC84;&#xC5D0; &#xBAA8;&#xB378;&#xC744; &#xC62C;&#xB824; &#xC9C4;&#xD589;&#xD574; <strong><em>&#xCD1D; 26&#xCD08; &#xC815;&#xB3C4;&#xB85C; &#xC751;&#xB2F5;&#xC18D;&#xB3C4;&#xB97C; &#xC904;&#xC784;</em></strong>.</p>
<hr>
<h2 id="%ED%98%91%EC%97%85-%EA%B3%BC%EC%A0%95-agile"><strong>&#xD611;&#xC5C5; &#xACFC;&#xC815;-Agile</strong></h2>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-6.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1040" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-6.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-6.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-6.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-6.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Jira Ticket</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-8.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="2000" height="1122" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-8.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-8.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-8.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-8.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xB9E4;&#xC8FC; Scrum &#xBC0F; Sprint</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-7.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1702" height="1496" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-7.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-7.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-7.png 1600w, https://ilmincho.me/content/images/2024/10/image-7.png 1702w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Github Code-Reviews</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-9.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1328" height="1490" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-9.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-9.png 1000w, https://ilmincho.me/content/images/2024/10/image-9.png 1328w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">MVP &#xB2E8;&#xACC4; &#xAC1C;&#xBC1C;&#xD6C4; &#xC131;&#xB2A5; &#xAC1C;&#xC120;</span></figcaption></figure>
<hr>
<h2 id="%ED%9A%8C%EA%B3%A0"><strong>&#xD68C;&#xACE0;</strong></h2>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-26.png" class="kg-image" alt="&#xC2DD;&#xB2F9; &#xC5B4;&#xB54C;?, Review-Based Restaurant RecSys" loading="lazy" width="1846" height="874" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-26.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-26.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-26.png 1600w, https://ilmincho.me/content/images/2024/10/image-26.png 1846w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong><em>&#xCC28;&#xD6C4;&#xB85C; &#xC9C4;&#xD589;&#xD574;&#xBCFC;&#xAC83; - ONNX&#xB3C4;&#xC785; &#xBC0F; &#xBA40;&#xD2F0;&#xD504;&#xB85C;&#xC138;&#xC2F1;&#xC788;&#xB294;&#xAC83;&#xC5D0; &#xBA40;&#xD2F0;&#xC2A4;&#xB808;&#xB529; &#xCD94;&#xAC00;&#xD574;&#xC11C; &#xB458;&#xB2E4; &#xC9C4;&#xD589;&#xD574;&#xBCF4;&#xAE30;</em></strong></p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[MetLife - Hackathon, Grand Prize]]></title><description><![CDATA[<hr>
<h2 id="%08metlifehack4job%EA%B3%A0%EA%B0%9D-%EB%A7%9E%EC%B6%A4%ED%98%95-ai-%EB%B3%B4%ED%97%98-%EB%8F%84%EC%9A%B0%EB%AF%B8-%EC%84%9C%EB%B9%84%EC%8A%A4"><strong>MetLife_Hack4Job - &#xACE0;&#xAC1D; &#xB9DE;&#xCDA4;&#xD615; AI &#xBCF4;&#xD5D8; &#xB3C4;&#xC6B0;&#xBBF8; &#xC11C;&#xBE44;&#xC2A4;</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/MetLife-Hackathon/MetLife-Hackathon?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - MetLife-Hackathon/MetLife-Hackathon: 2024&#xB144; 3&#xC6D4; 23 ~ 2024&#xB144; 3&#xC6D4; 24&#xC77C;&#xAE4C;&#xC9C0; MetLife &#xC0AC;&#xC5D0;&#xC11C; &#xC8FC;&#xCD5C;&#xD55C; Hackathon &#xB300;&#xC0C1; &#xC218;&#xC0C1;&#xC791;</div><div class="kg-bookmark-description">2024&#xB144; 3&</div></div></a></figure>]]></description><link>https://ilmincho.me/metlife-hackathon/</link><guid isPermaLink="false">6704e70b8680d90496636522</guid><category><![CDATA[Projects]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Sun, 24 Mar 2024 10:35:00 GMT</pubDate><media:content url="https://ilmincho.me/content/images/2024/10/ezgif-1-8d45ebd60a.gif" medium="image"/><content:encoded><![CDATA[<hr>
<h2 id="%08metlifehack4job%EA%B3%A0%EA%B0%9D-%EB%A7%9E%EC%B6%A4%ED%98%95-ai-%EB%B3%B4%ED%97%98-%EB%8F%84%EC%9A%B0%EB%AF%B8-%EC%84%9C%EB%B9%84%EC%8A%A4"><strong>MetLife_Hack4Job - &#xACE0;&#xAC1D; &#xB9DE;&#xCDA4;&#xD615; AI &#xBCF4;&#xD5D8; &#xB3C4;&#xC6B0;&#xBBF8; &#xC11C;&#xBE44;&#xC2A4;</strong></h2>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/MetLife-Hackathon/MetLife-Hackathon?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - MetLife-Hackathon/MetLife-Hackathon: 2024&#xB144; 3&#xC6D4; 23 ~ 2024&#xB144; 3&#xC6D4; 24&#xC77C;&#xAE4C;&#xC9C0; MetLife &#xC0AC;&#xC5D0;&#xC11C; &#xC8FC;&#xCD5C;&#xD55C; Hackathon &#xB300;&#xC0C1; &#xC218;&#xC0C1;&#xC791;</div><div class="kg-bookmark-description">2024&#xB144; 3&#xC6D4; 23 ~ 2024&#xB144; 3&#xC6D4; 24&#xC77C;&#xAE4C;&#xC9C0; MetLife &#xC0AC;&#xC5D0;&#xC11C; &#xC8FC;&#xCD5C;&#xD55C; Hackathon &#xB300;&#xC0C1; &#xC218;&#xC0C1;&#xC791; - GitHub - MetLife-Hackathon/MetLife-Hackathon: 2024&#xB144; 3&#xC6D4; 23 ~ 2024&#xB144; 3&#xC6D4; 24&#xC77C;&#xAE4C;&#xC9C0; MetLife &#xC0AC;&#xC5D0;&#xC11C; &#xC8FC;&#xCD5C;&#xD55C; Hackathon &#xB300;&#xC0C1; &#xC218;&#xC0C1;&#xC791;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="MetLife - Hackathon, Grand Prize"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">MetLife-Hackathon</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/edd6f163581c6b02d3f9983b3f9cb7e61bbeb1dd38b0ea6bda33627e3f902eb5/MetLife-Hackathon/MetLife-Hackathon" alt="MetLife - Hackathon, Grand Prize"></div></a></figure>
<table class="bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888]"><thead class="border-b-border-100/50 border-b-[0.5px] text-left"><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC774;&#xB984;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC5ED;&#xD560;</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">GitHub</th><th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC774;&#xBA54;&#xC77C;</th></tr></thead><tbody><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC774;&#xD0DC;&#xACB8;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">FrontEnd Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EC%9D%B4%ED%83%9C%EA%B2%B8?ref=ilmincho.me">&#xC774;&#xD0DC;&#xACB8;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xBC15;&#xD0DC;&#xC644;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">FrontEnd Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EB%B0%95%ED%83%9C%EC%99%84?ref=ilmincho.me">&#xBC15;&#xD0DC;&#xC644;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="mailto:swimingtw@gmail.com">swimingtw@gmail.com</a></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC870;&#xC77C;&#xBBFC;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">FrontEnd Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EC%A1%B0%EC%9D%BC%EB%AF%BC?ref=ilmincho.me">&#xC870;&#xC77C;&#xBBFC;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="mailto:choim426@gmail.com">choim426@gmail.com</a></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xCD5C;&#xC2B9;&#xC6D0;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">BackEnd Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EC%B5%9C%EC%8A%B9%EC%9B%90?ref=ilmincho.me">&#xCD5C;&#xC2B9;&#xC6D0;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="mailto:wonny921@gmail.com">wonny921@gmail.com</a></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xAE40;&#xC608;&#xC2AC;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">BackEnd Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EA%B9%80%EC%98%88%EC%8A%AC?ref=ilmincho.me">&#xAE40;&#xC608;&#xC2AC;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC774;&#xC740;&#xC9C0;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xD300;&#xC7A5; &amp; BackEnd Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EC%9D%B4%EC%9D%80%EC%A7%80?ref=ilmincho.me">&#xC774;&#xC740;&#xC9C0;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="mailto:dhbdg11@gmail.com">dhbdg11@gmail.com</a></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xC774;&#xD604;&#xC218;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">AI API Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EC%9D%B4%ED%98%84%EC%88%98?ref=ilmincho.me">&#xC774;&#xD604;&#xC218;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xBC15;&#xBB34;&#xD604;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">AI API Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EB%B0%95%EB%AC%B4%ED%98%84?ref=ilmincho.me">&#xBC15;&#xBB34;&#xD604;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="mailto:pjhg410@gmail.com">pjhg410@gmail.com</a></td></tr><tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10"><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">&#xBC15;&#xB3C4;&#xD604;</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">AI API Dev</td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="https://github.com/%EB%B0%95%EB%8F%84%ED%98%84?ref=ilmincho.me">&#xBC15;&#xB3C4;&#xD604;</a></td><td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><a href="mailto:zerosugarcoke@naver.com">zerosugarcoke@naver.com</a></td></tr></tbody></table>
<hr>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image.png" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1248" height="706" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image.png 1000w, https://ilmincho.me/content/images/2024/10/image.png 1248w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xB79C;&#xB529; &#xD398;&#xC774;&#xC9C0; - &#xCC57;&#xBD07; &#xBC0F; &#xD15C;&#xD50C;&#xB9BF; &#xC81C;&#xACF5;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-1.png" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1140" height="134" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-1.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-1.png 1000w, https://ilmincho.me/content/images/2024/10/image-1.png 1140w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xBCF4;&#xD5D8; &#xC9C8;&#xBB38; &#xB2E8;&#xACC4;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-2.png" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1252" height="690" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-2.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-2.png 1000w, https://ilmincho.me/content/images/2024/10/image-2.png 1252w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">AI &#xCC57;&#xBD07; &#xBCF4;&#xD5D8; &#xCD94;&#xCC9C;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/10/image-3.png" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1244" height="642" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-3.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-3.png 1000w, https://ilmincho.me/content/images/2024/10/image-3.png 1244w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#xB2E4;&#xB978; &#xC9C8;&#xBB38; &#xBC0F; &#xB2F5;&#xBCC0;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfEM44ICGZv5Y0ac1xbPFAbc_VBj6TvZGPqvDZ5gRU_76VofJ06QTRAxeutATd1WPpDDPB1PkE8nTwdwdE-KqzUPOWnq0FDiJzdJMvfz36v5y3oloyrcjJ_-YJXaCCRGwSkC0pVtx5tMhEj784xzI4uRjQSutWbH7mP8KxucTxeFnAvFpp3Dw?key=FApziF_Gc_SAEQO9IH2oYA" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="624" height="314"><figcaption><span style="white-space: pre-wrap;">&#xB300;&#xD654; &#xB0B4;&#xC6A9; &#xAE30;&#xBC18; &#xC0C1;&#xB2F4;&#xC0AC; &#xC694;&#xCCAD;</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdvxXO6LtNNm0GIY5q0IZo3-BMWIRJ673W8daBm35CBzMtofEYG6c3gWK1Knwa5kcq8wrUxXYLhYaKNe9IFnvVTxtY9yBf9mYBV-1TCL23GBX3Xp7IEmdZc6CtBXzUGbtwsDHXptgGprZyXnQLuqmfvjn6szvsfG-DvskdNo1TpecwxGupxzfY?key=FApziF_Gc_SAEQO9IH2oYA" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="624" height="340"><figcaption><span style="white-space: pre-wrap;">&#xC0C1;&#xB2F4;&#xC2E0;&#xCCAD; &#xACE0;&#xAC1D;&#xD604;&#xD669;</span></figcaption></figure>
<hr>
<img src="https://ilmincho.me/content/images/2024/10/ezgif-1-8d45ebd60a.gif" alt="MetLife - Hackathon, Grand Prize"><p>&#x203B;&#xBCF4;&#xC548; &#xC774;&#xC288;&#xB85C; &#xC778;&#xD55C;  &#xAC04;&#xB2E8;&#xD55C; &#xC815;&#xB9AC; &#xBC0F; &#xD68C;&#xACE0;</p>
<h2 id="%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94">&#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xAC1C;&#xC694;</h2>
<p>&#xBA54;&#xD2B8;&#xB77C;&#xC774;&#xD504;&#xC758; 300&#xC885;&#xC758; &#xBCF4;&#xD5D8; &#xC0C1;&#xD488; &#xBC0F; &#xC57D;&#xAD00; &#xB370;&#xC774;&#xD130;&#xB97C; &#xD65C;&#xC6A9;&#xD558;&#xC5EC; &#xC0AC;&#xC6A9;&#xC790;&#xC5D0;&#xAC8C; &#xB9DE;&#xCDA4;&#xD615; &#xC751;&#xB2F5;&#xC744; &#xC81C;&#xACF5;&#xD558;&#xB294; &#xC11C;&#xBE44;&#xC2A4;&#xC785;&#xB2C8;&#xB2E4;. &#xC8FC;&#xC694; &#xAE30;&#xB2A5;&#xC740; &#xB2E4;&#xC74C;&#xACFC; &#xAC19;&#xC2B5;&#xB2C8;&#xB2E4;:</p>
<ul><li>&#xAC1C;&#xC778;&#xC758; &#xD544;&#xC694;&#xC5D0; &#xB9DE;&#xB294; &#xBCF4;&#xD5D8; &#xCD94;&#xCC9C;</li><li>&#xD2B9;&#xC815; &#xBCF4;&#xD5D8;&#xC758; &#xC7A5;&#xC810; &#xC548;&#xB0B4;</li><li>&#xBCF4;&#xD5D8; &#xAC00;&#xC785; &#xC870;&#xAC74; &#xBC0F; &#xAC00;&#xB2A5; &#xC5EC;&#xBD80; &#xD655;&#xC778;</li><li>&#xACE0;&#xAC1D;&#xC758; &#xC815;&#xBCF4;&#xC640; &#xB300;&#xD654; &#xAE30;&#xB85D;&#xC744; &#xBC14;&#xD0D5;&#xC73C;&#xB85C; &#xBCF4;&#xD5D8; &#xC0C1;&#xB2F4;&#xC0AC;&#xC5D0;&#xAC8C; &#xD6A8;&#xC728;&#xC801;&#xC73C;&#xB85C; &#xC5F0;&#xACB0;</li></ul>
<p>AI &#xAE30;&#xBC18; &#xD50C;&#xB7AB;&#xD3FC;&#xC740; &#xCD5C;&#xC801;&#xC758; &#xC751;&#xB2F5; &#xD15C;&#xD50C;&#xB9BF;&#xC744; &#xC81C;&#xACF5;&#xD558;&#xC5EC; &#xC0C1;&#xB2F4;&#xC0AC;&#xC640;&#xC758; &#xC5F0;&#xACB0;&#xBFD0;&#xB9CC; &#xC544;&#xB2C8;&#xB77C; &#xC0C1;&#xB2F4;&#xC758; &#xC9C8;&#xC744; &#xD5A5;&#xC0C1;&#xC2DC;&#xD0B5;&#xB2C8;&#xB2E4;.</p>
<h3 id="%EC%A3%BC%EC%9A%94-%EA%B8%B0%EC%88%A0">&#xC8FC;&#xC694; &#xAE30;&#xC220;</h3>
<ol><li><strong>Elastic Search Vector Database &#xAD6C;&#xCD95;</strong>: &#xBCF4;&#xD5D8; &#xC57D;&#xAD00;&#xC758; &#xC800;&#xC7A5; &#xBC0F; &#xAC80;&#xC0C9;&#xC744; &#xC704;&#xD574; &#xAD6C;&#xCD95;&#xB418;&#xC5C8;&#xC2B5;&#xB2C8;&#xB2E4;.</li><li><strong>Elastic Search Vector &#xC720;&#xC0AC;&#xB3C4; &#xAC80;&#xC0C9;</strong>: Elastic Search&#xB97C; &#xC774;&#xC6A9;&#xD55C; &#xBCA1;&#xD130; &#xC720;&#xC0AC;&#xB3C4; &#xAC80;&#xC0C9;</li><li><strong>ChatGPT OCR Text &#xCD94;&#xCD9C;</strong>: Chat GPT OCR &#xBAA8;&#xB378;&#xC744; &#xD1B5;&#xD55C; PDF &#xD30C;&#xC77C; &#xB0B4; &#xD14D;&#xC2A4;&#xD2B8; &#xCD94;&#xCD9C;</li><li><strong>Chat GPT Embedding</strong>: Chat GPT Embedding &#xBAA8;&#xB378;&#xC744; &#xD65C;&#xC6A9;&#xD55C; &#xBB38;&#xC11C; &#xBC0F; &#xCFFC;&#xB9AC; &#xC784;&#xBCA0;&#xB529;</li><li><strong>Chat GPT4-1106-preview</strong>: Chat GPT API &#xD638;&#xCD9C;&#xB85C; &#xC0AC;&#xC6A9;&#xC790; &#xB9DE;&#xCDA4;&#xD615; &#xAC80;&#xC0C9; &#xB2F5;&#xBCC0; &#xC0DD;&#xC131;</li></ol>
<h3 id="%EA%B8%B0%EC%88%A0-%EC%8A%A4%ED%83%9D">&#xAE30;&#xC220; &#xC2A4;&#xD0DD;</h3>
<ul><li>FrontEnd:<ul><li>React (UI library)</li><li>TypeScript (Programming language)</li><li>UI Components: MUI (Material-UI)</li><li>State Management: Recoil Design Framework: Tailwind CSS</li></ul></li><li>AI &amp; BackEnd :<ul><li>JDK 11: ElasticSearch,Spring Boot &#xD658;&#xACBD; &#xD1B5;&#xC77C;</li><li>ElasticSearch 8.7.0: &#xBCF4;&#xD5D8; &#xC57D;&#xAD00; &#xB370;&#xC774;&#xD130; &#xC800;&#xC7A5; &#xBC0F; &#xAC80;&#xC0C9;</li><li>Spring boot 3.2.4 / 2.7.0, Spring Data JPA, Spring Security 3.1.5: API &#xC81C;&#xACF5; &#xC11C;&#xBC84; &#xAC1C;&#xBC1C;</li><li>(GPT)text-embedding-3-small,text-embedding-3-large &#xBAA8;&#xB378;: &#xBB38;&#xC11C; &#xBC0F; &#xCFFC;&#xB9AC; &#xC784;&#xBCA0;&#xB529;</li><li>GPT-4-1106-preview: &#xC0AC;&#xC6A9;&#xC790; &#xC9C8;&#xC758;&#xC5D0; &#xB300;&#xD55C; &#xB2F5;&#xBCC0; &#xC0DD;&#xC131;</li><li>Python FastAPI: pdf &#xD30C;&#xC77C; &#xC2E4;&#xC2DC;&#xAC04; &#xC784;&#xBCA0;&#xB529; &#xBC0F; ElasticSearch &#xC0C9;&#xC778; &#xC11C;&#xBC84; &#xAC1C;&#xBC1C;</li></ul></li></ul>
<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-003.jpeg" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1050" height="1400" srcset="https://ilmincho.me/content/images/size/w600/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-003.jpeg 600w, https://ilmincho.me/content/images/size/w1000/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-003.jpeg 1000w, https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-003.jpeg 1050w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xD574;&#xCEE4;&#xD1A4;&#xC744; &#xC9C4;&#xD589;&#xD558;&#xAE30; &#xC804;&#xC5D0; &#xD300;&#xC740; &#xC0AC;&#xC804;&#xC5D0; &#xAD6C;&#xC131;&#xB41C; &#xAC83;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xC784;&#xC758;&#xB85C; &#xD3B8;&#xC131;&#xB418;&#xC5C8;&#xACE0;, &#xBAA8;&#xB450; &#xCC98;&#xC74C; &#xB9CC;&#xB098;&#xB294; &#xC0AC;&#xC774;&#xC600;&#xB2E4;. &#xADF8; &#xACFC;&#xC815;&#xC5D0;&#xC11C; &#xC11C;&#xB85C;&#xC758; &#xAE30;&#xC220; &#xC2A4;&#xD0DD;&#xC744; &#xACF5;&#xC720;&#xD558;&#xACE0; &#xD504;&#xB85C;&#xC81D;&#xD2B8;&#xB97C; &#xAE30;&#xD68D;&#xD558;&#xB294; &#xC77C;&#xC774; &#xC27D;&#xC9C0;&#xB9CC;&#xC740; &#xC54A;&#xC558;&#xB2E4;. &#xB098;&#xB294; &#xC8FC;&#xB85C; &#xD30C;&#xC774;&#xC36C;&#xC744; &#xC0AC;&#xC6A9;&#xD574;&#xC654;&#xACE0;, &#xD300;&#xC6D0; &#xC911; &#xD55C; &#xBA85;&#xC740; &#xD504;&#xB860;&#xD2B8;&#xC5D4;&#xB4DC;, &#xB610; &#xB2E4;&#xB978; &#xD55C; &#xBA85;&#xC740; &#xC548;&#xB4DC;&#xB85C;&#xC774;&#xB4DC; &#xAC1C;&#xBC1C;&#xC790;&#xC600;&#xC73C;&#xBA70;, &#xB098;&#xBA38;&#xC9C0; &#xB300;&#xBD80;&#xBD84;&#xC740; &#xC790;&#xBC14; &#xAE30;&#xBC18; &#xBC31;&#xC5D4;&#xB4DC; &#xAC1C;&#xBC1C;&#xC790;&#xC600;&#xB2E4;.</p>
<p>&#xAE30;&#xC220; &#xC2A4;&#xD0DD;&#xC758; &#xCC28;&#xC774;&#xB85C; &#xC778;&#xD574; &#xB098;&#xB294; &#xC0C8;&#xB85C;&#xC6B4; &#xB3C4;&#xC804;&#xC744; &#xC990;&#xAE30;&#xACE0; &#xBE60;&#xB974;&#xAC8C; &#xD559;&#xC2B5;&#xD560; &#xC218; &#xC788;&#xB2E4;&#xB294; &#xC790;&#xC2E0;&#xAC10;&#xC73C;&#xB85C;, &#xB2E4;&#xB978; &#xC790;&#xBC14; &#xAC1C;&#xBC1C;&#xC790;&#xB4E4;&#xC774; &#xD504;&#xB860;&#xD2B8;&#xC5D4;&#xB4DC;&#xB85C; &#xC804;&#xD658;&#xD558;&#xAE30;&#xBCF4;&#xB2E4;&#xB294; &#xB0B4;&#xAC00; &#xADF8; &#xC5ED;&#xD560;&#xC744; &#xB9E1;&#xB294; &#xAC83;&#xC774; &#xD611;&#xC5C5;&#xC5D0; &#xC720;&#xB9AC;&#xD558;&#xB2E4;&#xACE0; &#xD310;&#xB2E8;&#xD588;&#xB2E4;. &#xADF8;&#xB798;&#xC11C; &#xD504;&#xB860;&#xD2B8;&#xC5D4;&#xB4DC;&#xB85C; &#xB118;&#xC5B4;&#xAC00;, &#xB300;&#xD68C;&#xC804; MUI&#xB97C; &#xC0AC;&#xC6A9;&#xD574;&#xBCF4;&#xBA70; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xB97C; &#xC775;&#xD788;&#xACE0; React &#xCD08;&#xAE30; &#xC124;&#xC815;&#xC744; &#xD574;&#xB450;&#xBA70; &#xB300;&#xD68C;&#xB97C; &#xC900;&#xBE44;&#xD588;&#xC5C8;&#xB2E4;.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-4.png" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="2000" height="1152" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-4.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-4.png 1000w, https://ilmincho.me/content/images/size/w1600/2024/10/image-4.png 1600w, https://ilmincho.me/content/images/size/w2400/2024/10/image-4.png 2400w" sizes="(min-width: 720px) 720px"></figure>
<p>AI&#xC758; &#xD3C9;&#xAC00; &#xBE44;&#xC911;&#xC774; &#xB192;&#xC740; &#xC810;&#xC744; &#xACE0;&#xB824;&#xD574; &#xC6B0;&#xB9AC; &#xD300;&#xC740; AI &#xD30C;&#xD2B8;&#xB3C4; &#xB098;&#xB204;&#xC5B4; &#xB9E1;&#xAE30;&#xB85C; &#xD588;&#xB2E4;. AI&#xC5D0; &#xAD00;&#xC2EC;&#xC774; &#xC788;&#xC5C8;&#xC9C0;&#xB9CC;, &#xD300; &#xB0B4; AI &#xACBD;&#xD5D8;&#xC774; &#xD48D;&#xBD80;&#xD55C; &#xD300;&#xC6D0;&#xC774; &#xADF8; &#xBD80;&#xBD84;&#xC744; &#xB9AC;&#xB529;&#xD558;&#xACE0;, &#xB098;&#xBA38;&#xC9C0; &#xBC31;&#xC5D4;&#xB4DC; &#xD300;&#xC6D0;&#xB4E4;&#xC774; &#xADF8;&#xCABD;&#xC73C;&#xB85C; &#xB118;&#xC5B4;&#xAC00; &#xD300;&#xB2F9; 3&#xBA85;&#xC529; &#xB098;&#xB220; &#xD574;&#xCEE4;&#xD1A4;&#xC5D0; &#xC784;&#xD558;&#xAE30;&#xB85C; &#xACB0;&#xC815;&#xD588;&#xB2E4;. &#xB610;&#xD55C;, &#xD574;&#xCEE4;&#xD1A4;&#xC5D0; &#xC55E;&#xC11C; Azure &#xAE30;&#xBC18;&#xC758; CI/CD &#xC778;&#xD504;&#xB77C;&#xB97C; &#xBBF8;&#xB9AC; &#xAD6C;&#xCD95;&#xD558;&#xACE0;, &#xD30C;&#xD2B8;&#xBCC4;&#xB85C; &#xC0AC;&#xC6A9;&#xD560; &#xAE30;&#xC220; &#xC2A4;&#xD0DD;&#xC744; &#xB17C;&#xC758;&#xD558;&#xC5EC; &#xBF08;&#xB300; &#xCF54;&#xB4DC;&#xB97C; &#xB9C8;&#xB828;&#xD588;&#xB2E4;.</p>
<p>&#xB300;&#xD68C; &#xC804;&#xC5D0;&#xB294; AI &#xAD00;&#xB828; &#xAE30;&#xC0AC;&#xC640; OpenAI &#xAE30;&#xC220;, &#xB370;&#xC774;&#xD130;&#xC14B; &#xB4F1;&#xC744; &#xBBF8;&#xB9AC; &#xC870;&#xC0AC;&#xD558;&#xBA74;&#xC11C; &#xC624;&#xD508;&#xB41C; &#xBCF4;&#xD5D8;&#xC0AC; &#xB370;&#xC774;&#xD130;&#xC640; &#xD504;&#xB86C;&#xD504;&#xD2B8; &#xC5D4;&#xC9C0;&#xB2C8;&#xC5B4;&#xB9C1;, &#xBAA8;&#xB378; &#xB9AC;&#xC2A4;&#xD2B8; &#xB4F1;&#xC744; &#xD0D0;&#xC0C9;&#xD588;&#xB2E4;. &#xC774;&#xB7EC;&#xD55C; &#xC0AC;&#xC804; &#xC791;&#xC5C5; &#xB355;&#xBD84;&#xC5D0; &#xC5F4;&#xC815;&#xC774; &#xACE0;&#xCDE8;&#xB418;&#xC5C8;&#xACE0;, &#xC88B;&#xC740; &#xACB0;&#xACFC;&#xB97C; &#xC5BB;&#xC744; &#xC218; &#xC788;&#xC744; &#xAC83; &#xAC19;&#xC740; &#xD655;&#xC2E0;&#xC774; &#xC0DD;&#xACBC;&#xB2E4;.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/image-5.png" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1492" height="1334" srcset="https://ilmincho.me/content/images/size/w600/2024/10/image-5.png 600w, https://ilmincho.me/content/images/size/w1000/2024/10/image-5.png 1000w, https://ilmincho.me/content/images/2024/10/image-5.png 1492w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xB300;&#xD68C; &#xB2F9;&#xC77C;&#xC5D0;&#xB294; &#xC8FC;&#xC81C;&#xB97C; &#xC815;&#xD558;&#xB294; &#xB370;&#xC5D0; &#xB9CE;&#xC740; &#xC2DC;&#xAC04;&#xC774; &#xC18C;&#xC694;&#xB418;&#xC5C8;&#xB2E4;. &#xD300;&#xC6D0;&#xB4E4; &#xBAA8;&#xB450; &#xB2E4;&#xC591;&#xD55C; &#xB3C5;&#xCC3D;&#xC801;&#xC778; &#xC544;&#xC774;&#xB514;&#xC5B4;&#xB97C; &#xC81C;&#xC2DC;&#xD558;&#xACE0;, &#xBE44;&#xD310;&#xC801;&#xC778; &#xC2DC;&#xAC01;&#xC73C;&#xB85C; &#xAC80;&#xD1A0;&#xD558;&#xBA70; &#xC758;&#xACAC;&#xC744; &#xC870;&#xC728;&#xD558;&#xB290;&#xB77C; &#xC624;&#xD6C4;&#xC758; &#xB300;&#xBD80;&#xBD84;&#xC744; &#xC0AC;&#xC6A9;&#xD588;&#xB2E4;. &#xBE44;&#xB85D; &#xC2DC;&#xAC04;&#xC774; &#xAC78;&#xB838;&#xC9C0;&#xB9CC;, &#xAE30;&#xD68D; &#xB2E8;&#xACC4;&#xAC00; &#xD504;&#xB85C;&#xC81D;&#xD2B8;&#xC758; &#xD575;&#xC2EC; &#xC911; &#xD558;&#xB098;&#xB77C;&#xB294; &#xC810;&#xC5D0;&#xC11C; &#xC774;&#xB294; &#xAC12;&#xC9C4; &#xC2DC;&#xAC04;&#xC774;&#xC5C8;&#xB2E4;&#xACE0; &#xC0DD;&#xAC01;&#xD55C;&#xB2E4;. </p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-002.jpeg" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1050" height="1400" srcset="https://ilmincho.me/content/images/size/w600/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-002.jpeg 600w, https://ilmincho.me/content/images/size/w1000/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-002.jpeg 1000w, https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-09-19-45-20-002.jpeg 1050w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xC774;&#xD6C4; &#xC6B0;&#xB9AC;&#xB294; &#xC124;&#xC815;&#xD55C; &#xBAA9;&#xD45C;&#xB97C; &#xD5A5;&#xD574; &#xB098;&#xC544;&#xAC00;, &#xB300;&#xD68C; &#xB9C8;&#xAC10; &#xC9C1;&#xC804;&#xAE4C;&#xC9C0; &#xAC01;&#xC790;&#xC758; &#xC5ED;&#xD560;&#xC744; &#xCDA9;&#xC2E4;&#xD788; &#xC218;&#xD589;&#xD558;&#xBA70; &#xBAA9;&#xD45C;&#xD588;&#xB358; &#xAE30;&#xB2A5;&#xB4E4;&#xC744; &#xC131;&#xACF5;&#xC801;&#xC73C;&#xB85C; &#xAD6C;&#xD604;&#xD574;&#xB0C8;&#xB2E4;. &#xBC1C;&#xD45C; &#xB2F9;&#xC2DC;&#xC5D0;&#xB294; &#xD575;&#xC2EC; &#xAE30;&#xB2A5;&#xC758; &#xAD6C;&#xD604;&#xC5D0; &#xC2E4;&#xD328;&#xD588;&#xC9C0;&#xB9CC;, &#xB300;&#xD68C; &#xB3D9;&#xC548; &#xC2EC;&#xC0AC;&#xC704;&#xC6D0;&#xB4E4;&#xC774; &#xC778;&#xD130;&#xBDF0;&#xD558;&#xB4EF; &#xC9C4;&#xD589; &#xC0C1;&#xD669;&#xC744; &#xC9C0;&#xC18D;&#xC801;&#xC73C;&#xB85C; &#xAD00;&#xCC30;&#xD558;&#xACE0; &#xAD81;&#xAE08;&#xD55C; &#xC0AC;&#xD56D;&#xB4E4;&#xC744; &#xC9C8;&#xBB38;&#xD588;&#xAE30; &#xB54C;&#xBB38;&#xC5D0;, &#xC6B0;&#xB9AC;&#xC758; &#xD611;&#xC5C5; &#xB2A5;&#xB825;&#xACFC; &#xD504;&#xB85C;&#xC81D;&#xD2B8; &#xCD94;&#xC9C4; &#xBC29;&#xC2DD;&#xC774; &#xAE0D;&#xC815;&#xC801;&#xC73C;&#xB85C; &#xD3C9;&#xAC00;&#xB418;&#xC5C8;&#xB294;&#xC9C0; &#xACB0;&#xAD6D; &#xB300;&#xC0C1;&#xC744; &#xBC1B;&#xC744; &#xC218; &#xC788;&#xC5C8;&#xB2E4;.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/--------------2.jpeg" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1400" height="1050" srcset="https://ilmincho.me/content/images/size/w600/2024/10/--------------2.jpeg 600w, https://ilmincho.me/content/images/size/w1000/2024/10/--------------2.jpeg 1000w, https://ilmincho.me/content/images/2024/10/--------------2.jpeg 1400w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xB098;&#xB294; &#xD504;&#xB860;&#xD2B8;&#xC5D4;&#xB4DC; &#xD30C;&#xD2B8;&#xC5D0;&#xC11C; React &#xAE30;&#xBC18;&#xC758; &#xCC44;&#xD305; &#xB300;&#xD654; &#xC8FC;&#xC81C; &#xAC00;&#xC774;&#xB4DC;&#xB77C;&#xC778; &#xD1A0;&#xAE00; &#xAD6C;&#xD604;, &#xC0C1;&#xB2F4;&#xC0AC; &#xB9E4;&#xCE6D; &#xACE0;&#xAC1D; &#xB9AC;&#xC2A4;&#xD2B8; &#xD655;&#xC778; &#xD14C;&#xC774;&#xBE14; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8; &#xAC1C;&#xBC1C;, &#xC5D0;&#xB7EC; &#xD578;&#xB4E4;&#xB9C1; &#xBC0F; &#xC608;&#xC678; &#xCC98;&#xB9AC;&#xB97C; &#xB9E1;&#xC544; &#xC791;&#xC5C5;&#xD588;&#xB2E4;.</p>
<p>&#xD300;&#xC758; &#xC8FC;&#xC694; &#xC774;&#xC288; &#xC911; &#xD558;&#xB098;&#xB294; Elastic Search&#xC5D0; &#xC800;&#xC7A5;&#xB41C; &#xBCF4;&#xD5D8;&#xC0AC; &#xB370;&#xC774;&#xD130;&#xC758; &#xCFFC;&#xB9AC; &#xC720;&#xC0AC;&#xB3C4;&#xB97C; &#xBE44;&#xAD50;&#xD560; &#xB54C; &#xBC1C;&#xC0DD;&#xD588;&#xB2E4;. &#xC0C1;&#xC704; &#xC2A4;&#xCF54;&#xC5B4;&#xB97C; &#xAC00;&#xC9C4; &#xBB38;&#xC11C;&#xB97C; &#xAC00;&#xC838;&#xC624;&#xB824;&#xACE0; &#xD588;&#xC73C;&#xB098;, &#xD56D;&#xC0C1; &#xC5F0;&#xAD00;&#xC131;&#xC774; &#xB0AE;&#xC740; &#xBB38;&#xC11C;&#xB4E4;&#xC774; &#xD3EC;&#xD568;&#xB418;&#xC5C8;&#xB2E4;. &#xC608;&#xB97C; &#xB4E4;&#xC5B4;, &#xCFFC;&#xB9AC;&#xC5D0; &quot;&#xBCF4;&#xD5D8;&quot;&#xC774;&#xB77C;&#xB294; &#xB2E8;&#xC5B4;&#xAC00; &#xC788;&#xC73C;&#xBA74;, &#xBB38;&#xC11C; &#xB0B4;&#xC5D0; &quot;&#xBCF4;&#xD5D8;&quot;&#xC774;&#xB77C;&#xB294; &#xB2E8;&#xC5B4;&#xAC00; &#xB9CE;&#xC774; &#xD3EC;&#xD568;&#xB41C; &#xBB38;&#xC11C;&#xAC00; &#xAD00;&#xB828;&#xB3C4;&#xAC00; &#xB0AE;&#xC544;&#xB3C4; &#xACB0;&#xACFC;&#xB85C; &#xB098;&#xD0C0;&#xB098;&#xB294; &#xACBD;&#xC6B0;&#xAC00; &#xC788;&#xC5C8;&#xB2E4;. &#xC774;&#xB97C; &#xD574;&#xACB0;&#xD558;&#xAE30; &#xC704;&#xD574; &#xC5F0;&#xAD00;&#xB3C4;&#xAC00; &#xB0AE;&#xC740; &#xD0A4;&#xC6CC;&#xB4DC;&#xB97C; &#xB530;&#xB85C; &#xB9E4;&#xD551;&#xD558;&#xC5EC; &#xAC80;&#xC0C9;&#xC5D0; &#xC0AC;&#xC6A9;&#xD558;&#xC9C0; &#xC54A;&#xB294; &#xB85C;&#xC9C1;&#xC744; &#xB3C4;&#xC785;&#xD55C; &#xACB0;&#xACFC;, &#xC131;&#xB2A5;&#xC744; &#xD06C;&#xAC8C; &#xAC1C;&#xC120;&#xD560; &#xC218; &#xC788;&#xC5C8;&#xB2E4;.</p>
<p>&#xB610; &#xB2E4;&#xB978; &#xBB38;&#xC81C;&#xB294; OpenAI API &#xD638;&#xCD9C; &#xC2DC;, &#xC751;&#xB2F5; &#xC2DC;&#xAC04;&#xC774; 1&#xBD84; &#xC774;&#xC0C1; &#xC9C0;&#xC5F0;&#xB418;&#xBA74; &#xC5F0;&#xACB0;&#xC774; &#xC790;&#xB3D9;&#xC73C;&#xB85C; &#xB04A;&#xAE30;&#xB294; &#xC810;&#xC774;&#xC5C8;&#xB2E4;. GPT-4 &#xBAA8;&#xB378;&#xC744; &#xC0AC;&#xC6A9;&#xD560; &#xB54C;, &#xB9CE;&#xC740; &#xD1A0;&#xD070; &#xC218;&#xC640; &#xC544;&#xC6C3;&#xD48B; &#xB300;&#xC6A9;&#xB7C9; &#xD14D;&#xC2A4;&#xD2B8; &#xCC98;&#xB9AC;&#xAC00; &#xC2DC;&#xAC04;&#xC774; &#xC624;&#xB798; &#xAC78;&#xB9AC;&#xB294; &#xC6D0;&#xC778;&#xC774;&#xC5C8;&#xB2E4;. &#xC774;&#xB97C; &#xD574;&#xACB0;&#xD558;&#xAE30; &#xC704;&#xD574; &#xD0C0;&#xC784;&#xC544;&#xC6C3; &#xC7AC;&#xC2DC;&#xB3C4; &#xD69F;&#xC218;&#xB97C; &#xB298;&#xB9AC;&#xACE0;, &#xBCA1;&#xD130; DB &#xB0B4; &#xB370;&#xC774;&#xD130;&#xAC00; &#xC5C6;&#xC744; &#xACBD;&#xC6B0; &#xB300;&#xBE44;&#xD574; &#xC2A4;&#xCF54;&#xC5B4; &#xAC12;&#xC744; &#xC870;&#xC815;&#xD558;&#xBA70; &#xD30C;&#xC778;&#xD29C;&#xB2DD;&#xC744; &#xC2DC;&#xB3C4;&#xD574; &#xC131;&#xB2A5;&#xC744; &#xD5A5;&#xC0C1;&#xC2DC;&#xCF30;&#xB2E4;.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-09-19-45-19-001.jpeg" class="kg-image" alt="MetLife - Hackathon, Grand Prize" loading="lazy" width="1050" height="1400" srcset="https://ilmincho.me/content/images/size/w600/2024/10/KakaoTalk_Photo_2024-10-09-19-45-19-001.jpeg 600w, https://ilmincho.me/content/images/size/w1000/2024/10/KakaoTalk_Photo_2024-10-09-19-45-19-001.jpeg 1000w, https://ilmincho.me/content/images/2024/10/KakaoTalk_Photo_2024-10-09-19-45-19-001.jpeg 1050w" sizes="(min-width: 720px) 720px"></figure>
<p>&#xC774;&#xBC88; &#xD574;&#xCEE4;&#xD1A4;&#xC744; &#xD1B5;&#xD574; &#xB0AF;&#xC120; &#xC0AC;&#xB78C;&#xB4E4;&#xACFC; &#xD558;&#xB098;&#xC758; &#xBAA9;&#xD45C;&#xB97C; &#xC704;&#xD574; &#xD611;&#xB825;&#xD558;&#xBA70; &#xBC1C;&#xC0DD;&#xD558;&#xB294; &#xB2E4;&#xC591;&#xD55C; &#xBB38;&#xC81C;&#xC640; &#xC5B4;&#xB824;&#xC6C0;&#xC744; &#xD574;&#xACB0;&#xD574; &#xB098;&#xAC00;&#xB294; &#xACFC;&#xC815;&#xC5D0;&#xC11C; &#xD070; &#xBCF4;&#xB78C;&#xC744; &#xB290;&#xAF08;&#xB2E4;. &#xB610;&#xD55C;, &#xC2A4;&#xC2A4;&#xB85C;&#xB3C4; &#xC131;&#xC7A5;&#xD560; &#xC218; &#xC788;&#xB294; &#xC18C;&#xC911;&#xD55C; &#xAE30;&#xD68C;&#xC600;&#xB2E4;. AI&#xC5D0; &#xB300;&#xD55C; &#xD765;&#xBBF8;&#xAC00; &#xB354;&#xC6B1; &#xCEE4;&#xC84C;&#xC73C;&#xBA70;, &#xC774;&#xBC88; &#xACBD;&#xD5D8;&#xC744; &#xD1B5;&#xD574; AI &#xAE30;&#xC220;&#xC758; &#xAC00;&#xB2A5;&#xC131;&#xACFC; &#xC9C0;&#xC2DD;&#xC744; &#xC313;&#xC544; &#xC5B8;&#xC820;&#xAC00; &#xC9C1;&#xC811; &#xD300;&#xC744; &#xC774;&#xB04C;&#xC5B4; &#xBA4B;&#xC9C4; &#xC11C;&#xBE44;&#xC2A4;&#xB97C; &#xB9CC;&#xB4E4;&#xC5B4; &#xBCF4;&#xACE0; &#xC2F6;&#xB2E4;&#xB294; &#xC0DD;&#xAC01;&#xC774; &#xAE4A;&#xAC8C; &#xC790;&#xB9AC; &#xC7A1;&#xC558;&#xB2E4;. </p>
<p>&#xAC10;&#xC0AC;&#xD569;&#xB2C8;&#xB2E4;, &#xC6B0;&#xB9AC; 10&#xD300;! &#xB2E4;&#xB4E4; &#xACE0;&#xC0DD;&#xD558;&#xC168;&#xC5B4;&#xC694;&#x314E; :) </p>
<hr>]]></content:encoded></item><item><title><![CDATA[Algorithms - Graph, BFS, DFS]]></title><description><![CDATA[<hr>
<ul><li><strong>Graph</strong></li></ul>
<p>A graph is a pictorial representation of a set of objects where some pairs of objects are connected by links. The interconnected objects are represented by points termed as vertices, and the links that connect the vertices are called edges.</p>
<p>Graphs are used to represent networks. The networks may</p>]]></description><link>https://ilmincho.me/algorithms-graph-bfs-dfs/</link><guid isPermaLink="false">65aa038139059704734d5819</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Mon, 15 Jan 2024 05:07:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1539627831859-a911cf04d3cd?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxjdWJlfGVufDB8fHx8MTcwNTY0MTIyNnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<ul><li><strong>Graph</strong></li></ul>
<img src="https://images.unsplash.com/photo-1539627831859-a911cf04d3cd?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxjdWJlfGVufDB8fHx8MTcwNTY0MTIyNnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Algorithms - Graph, BFS, DFS"><p>A graph is a pictorial representation of a set of objects where some pairs of objects are connected by links. The interconnected objects are represented by points termed as vertices, and the links that connect the vertices are called edges.</p>
<p>Graphs are used to represent networks. The networks may include paths in a city or telephone network or circuit network. Graphs are also used in social networks like linkedIn, Facebook. Each person is a node that consists of the individuals metadata and the edges are friendships.</p>
<ul>
<li>
<p>A graph is a mathematical representation of a network</p>
<ul>
<li>Set of nodes (vertices) V</li>
<li>Set of pairs of nodes (edges) E (a relation)</li>
<li>Graph G = (V,E)</li>
<li>Notation: n = |V |, m = |E| (almost always used)</li>
</ul>
</li>
<li>
<p>Definitions: Edge, Path</p>
<ul>
<li>
<p>Edge e = {u, v} &#x2014; but usually written e = (u, v) u and v are neighbors, adjacent, endpoints of e, e is incident to u and v.</p>
</li>
<li>
<p>A path is a sequence P = v1, v2, . . . , vk&#x2212;1, vk such that each consecutive pair vi, vi+1 is joined by an edge in G.<br>
Called: path &#x201C;from v1 to vk&#x201D;. Or: a v1&#x2013;vk path.<br>
Special case: empty path from any v to itself (just node, no edges).</p>
</li>
</ul>
</li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-84.png" class="kg-image" alt="Algorithms - Graph, BFS, DFS" loading="lazy" width="1312" height="464" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-84.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-84.png 1000w, https://ilmincho.me/content/images/2024/01/image-84.png 1312w" sizes="(min-width: 720px) 720px"></figure>
<ul>
<li>
<p>Simple path: path where all vertices are distinct</p>
<ul>
<li>Exercise. Prove: If there is a path from u to v then there is a simple path from u to v.</li>
<li>Different terms elsewhere: walk: arbitrary (called path here), trail: no repeated edges, path (here: simple path)</li>
</ul>
</li>
<li>
<p>Distance from u to v: minimum number of edges in a u&#x2013;v path</p>
</li>
<li>
<p>(Simple) Cycle: path v1, . . . , vk&#x2212;1, vk where</p>
<ul>
<li>v1 = vk</li>
<li>First k &#x2212; 1 nodes distinct</li>
<li>All edges distinct</li>
</ul>
</li>
<li>
<p>Connected component: maximal subset of nodes such that a path exists between each pair in the set.</p>
<ul>
<li>maximal = if a new node is added to the set, there will no longer be a path between each pair<br>
<img src="https://ilmincho.me/content/images/2024/01/cc.png" alt="Algorithms - Graph, BFS, DFS" loading="lazy"><br>
Node set: {1, 2, 4}: there is a path between any two nodes. But it is not maximal: can add 3, property still holds. {1, 2, 3, 4} is maximal: can&#x2019;t add any other node</li>
</ul>
</li>
</ul>

<ul><li><strong>Trees</strong></li></ul>
<p>Tree = a connected graph with no cycles</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-85.png" class="kg-image" alt="Algorithms - Graph, BFS, DFS" loading="lazy" width="262" height="313"></figure>
<ul>
<li>Tree properties<br>
Let G be an undirected graph with n nodes. Then any two of the following statements imply the third:
<ul>
<li>G is connected</li>
<li>G does not contain a cycle</li>
<li>G has n &#x2212; 1 edges</li>
</ul>
</li>
<li>Rooted tree: tree with parent-child relationship
<ul>
<li>Pick root r and &#x201C;orient&#x201D; all edges away from root</li>
<li>Parent of v = predecessor on path from r to v</li>
</ul>
</li>
</ul>

<ul>
<li>Directed graph G = (V,E)
<ul>
<li>Directed edge e = (u, v) is now an ordered pair</li>
<li>e leaves u (source) and enters v (sink)<br>
<img src="https://ilmincho.me/content/images/2024/01/cccc.png" alt="Algorithms - Graph, BFS, DFS" loading="lazy"></li>
<li>Directed path, cycle: same as before, but with directed edges</li>
<li>Strongly connected: directed graph with directed path<br>
between every pair of vertices</li>
<li>Note: graphs undirected if not otherwise specified</li>
</ul>
</li>
</ul>

<hr>
<ul><li><strong>Breadth-First Search (BFS)</strong></li></ul>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-86.png" class="kg-image" alt="Algorithms - Graph, BFS, DFS" loading="lazy" width="542" height="455"></figure>
<ul>
<li>Explore outward from starting node s.</li>
<li>Define layer Li = all nodes at distance exactly i from s.</li>
<li>Layers
<ul>
<li>L0 = {s}</li>
<li>L1 = nodes with edge to L0</li>
<li>L2 = nodes with an edge to L1 that don&#x2019;t belong to L0 or L1</li>
<li>. . .</li>
<li>Li+1 = nodes with an edge to Li that don&#x2019;t belong to any earlier layer.</li>
</ul>
</li>
<li>Observation: There is a path from s to t if and only if t appears in some layer.</li>
</ul>

<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div><div style="line-height:130%">13</div><div style="line-height:130%">14</div><div style="line-height:130%">15</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">BFS(s):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;s&#xA0;<span style="color:#ff3399">as</span>&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#c10aff">1</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;L[<span style="color:#c10aff">0</span>]&#xA0;&#x2190;&#xA0;{s},&#xA0;i&#xA0;&#x2190;&#xA0;<span style="color:#c10aff">0</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#c10aff">1</span>&#xA0;&#xA0;<span style="color:#999999">#&#xA0;Discover&#xA0;s</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">while</span>&#xA0;L[i]&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;empty&#xA0;<span style="color:#ff3399">do</span>&#xA0;&#xA0;&#xA0;&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;L[i&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">+</span>&#xA0;<span style="color:#c10aff">1</span>]&#xA0;&#x2190;&#xA0;empty&#xA0;list&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">&lt;</span><span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;n</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;all&#xA0;nodes&#xA0;v&#xA0;<span style="color:#ff3399">in</span>&#xA0;L[i]&#xA0;<span style="color:#ff3399">do</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;n</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;all&#xA0;neighbors&#xA0;w&#xA0;of&#xA0;v&#xA0;<span style="color:#ff3399">do</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;2m&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#999999">#&#xA0;Explore&#xA0;v</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;w&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;marked&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span>&#xA0;2m&#xA0;then</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;w&#xA0;<span style="color:#ff3399">as</span>&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;n&#xA0;&#xA0;&#xA0;<span style="color:#999999">#&#xA0;Discover&#xA0;w</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;put&#xA0;w&#xA0;<span style="color:#ff3399">in</span>&#xA0;L[i&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">+</span>&#xA0;<span style="color:#c10aff">1</span>]&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;n</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;end&#xA0;<span style="color:#ff3399">if</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;end&#xA0;<span style="color:#ff3399">for</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;end&#xA0;<span style="color:#ff3399">for</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;i&#xA0;&#x2190;&#xA0;i&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">+</span>&#xA0;<span style="color:#c10aff">1</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">&lt;</span><span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;n</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;end&#xA0;<span style="color:#ff3399">while</span></div></div><div style="text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic"><a style="color:#4f4f4ftext-decoration:none" href="http://colorscripter.com/info?ref=ilmincho.me#e">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<p>Running time: O(m + n). More precisely: &#x398;(m + n) (why?)<br>Assumption: can efficiently iterate over neighbors of v. OK with adjacency list. </p>
<p>How to explore entire graph even if it is disconnected?<br></p>
<p>Running time? Does it change? No, still O(m + n) 	<br>
Naive: O(m + n) per component &#x21D2; O(c(m + n)) if c components.<br>
Better: Search on component C only works on nodes/edges in C<br>
- Time for component C: O(#edges in C + #nodes in C)<br>
- O(n) to detect all components (why? how many tests for &#x201C;unexplored node&#x201D;?)<br>
- Total time: O(m + n)</p>

<ul><li>BFS Tree</li></ul>
<p>Any graph search builds a spanning tree (per connected component)<br>Tree edges = edges that reach a node for the first time.</p>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div><div style="line-height:130%">13</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">BFS(s):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;s&#xA0;<span style="color:#ff3399">as</span>&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;L[<span style="color:#c10aff">0</span>]&#xA0;&#x2190;&#xA0;{s},&#xA0;i&#xA0;&#x2190;&#xA0;<span style="color:#c10aff">0</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;T&#xA0;&#x2190;&#xA0;empty&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#999999">#&#xA0;Tree</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">while</span>&#xA0;L[i]&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;empty&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;L[i&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">+</span>&#xA0;<span style="color:#c10aff">1</span>]&#xA0;&#x2190;&#xA0;empty&#xA0;list</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;all&#xA0;nodes&#xA0;v&#xA0;<span style="color:#ff3399">in</span>&#xA0;L[i]&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;all&#xA0;neighbors&#xA0;w&#xA0;of&#xA0;v&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;w&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;marked&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span>&#xA0;then</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;w&#xA0;<span style="color:#ff3399">as</span>&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;put&#xA0;w&#xA0;<span style="color:#ff3399">in</span>&#xA0;L[i&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">+</span>&#xA0;<span style="color:#c10aff">1</span>]</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;put&#xA0;(v,w)&#xA0;<span style="color:#ff3399">in</span>&#xA0;T&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#999999">#&#xA0;Tree</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;i&#xA0;&#x2190;&#xA0;i&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">+</span>&#xA0;<span style="color:#c10aff">1</span></div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-87.png" class="kg-image" alt="Algorithms - Graph, BFS, DFS" loading="lazy" width="632" height="371" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-87.png 600w, https://ilmincho.me/content/images/2024/01/image-87.png 632w"></figure>
<ul>
<li>
<p>Claim: let T be the tree discovered by BFS on graph G = (V,E), and let (x, y) be any edge of G. Then the layer of x and y in T differ by at most 1.</p>
</li>
<li>
<p>Proof</p>
<ul>
<li>Let (x, y) be an edge</li>
<li>Assume x is discovered first and placed in Li</li>
<li>Then y &#x2208; Lj for j &#x2265; i</li>
<li>When neighbors of x are explored, y is either already in Li, or is discovered and added to Li+1</li>
</ul>
</li>
</ul>

<ul><li>Can we use BFS to detect cycles ?<br>What if we find a neighbor that&#x2019;s already discovered?<br>Cycle! but only if it is not the parent (same edge backwards)</li></ul>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">for</span>&#xA0;all&#xA0;nodes&#xA0;v&#xA0;<span style="color:#ff3399">in</span>&#xA0;L[i]&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;all&#xA0;neighbors&#xA0;w&#xA0;of&#xA0;v&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;w&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;marked&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span>&#xA0;then</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;w&#xA0;<span style="color:#ff3399">as</span>&#xA0;<span style="color:#ffd500">&quot;discovered&quot;</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;put&#xA0;w&#xA0;<span style="color:#ff3399">in</span>&#xA0;L[i]</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;parent[w]&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;v&#xA0;&#xA0;<span style="color:#999999">#&#xA0;store&#xA0;parent&#xA0;of&#xA0;each&#xA0;node</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">else</span>&#xA0;<span style="color:#ff3399">if</span>&#xA0;w&#xA0;&#x338;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;parent[v]&#xA0;then</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;output&#xA0;<span style="color:#ffd500">&quot;graph&#xA0;has&#xA0;cycle&quot;</span></div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<hr>
<ul><li><strong>Depth-First Search (DFS)</strong></li></ul>
<p>Depth-first search (DFS): keep exploring from the most recently added node until you have to backtrack.</p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-88.png" class="kg-image" alt="Algorithms - Graph, BFS, DFS" loading="lazy" width="676" height="355" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-88.png 600w, https://ilmincho.me/content/images/2024/01/image-88.png 676w"><figcaption><span style="white-space: pre-wrap;">Figure assumes neighbors explores in numerical order</span> <span style="white-space: pre-wrap;">Dotted edges: to already explored nodes</span></figcaption></figure>
<ul><li>DFS: Recursive Implementation</li></ul>
<p>How to analyze if algorithm is recursive?<br>Same: count executions of each line, including recursive call</p>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">DFS(u)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;u&#xA0;<span style="color:#ff3399">as</span>&#xA0;<span style="color:#ffd500">&quot;explored&quot;</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;n</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;all&#xA0;edges&#xA0;(u,&#xA0;v)&#xA0;<span style="color:#ff3399">do</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;2m</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;v&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ffd500">&quot;explored&quot;</span>&#xA0;then&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;2m</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;call&#xA0;DFS(v)&#xA0;recursively&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;n</div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<p>Running time: O(m + n) same complexity as BFS<br>Same assumptions: can traverse neighbor list in time proportional to<br>node degree</p>
<ul><li>DFS Tree</li></ul>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-89.png" class="kg-image" alt="Algorithms - Graph, BFS, DFS" loading="lazy" width="292" height="371"></figure>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">T&#xA0;&#x2190;&#xA0;empty</div><div style="padding:0 6px; white-space:pre; line-height:130%">DFS(u)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;u&#xA0;<span style="color:#ff3399">as</span>&#xA0;<span style="color:#ffd500">&quot;explored&quot;</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;all&#xA0;edges&#xA0;(u,&#xA0;v)&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;v&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ffd500">&quot;explored&quot;</span>&#xA0;then</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;put&#xA0;(u,&#xA0;v)&#xA0;<span style="color:#ff3399">in</span>&#xA0;T</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;call&#xA0;DFS(v)&#xA0;recursively</div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<p>Claim: Non-tree edges lead to (indirect) ancestors</p>
<ul>
<li>Claim: Let T be the tree discovered by DFS, and let (x, y) be an edge of G that is not in T. Then x or y is an ancestor of the other.</li>
<li>Proof:<br>
All nodes marked explored between call to and return from DFS(v)<br>
are descendents of v. (due to workings of recursion/call stack)
<ul>
<li>Let x be the first of the two nodes explored</li>
<li>Is y explored at beginning of DFS(x)? No.</li>
<li>At some point during DFS(x), we examine the edge (x, y). Is y explored then? Yes, otherwise we would put (x, y) in T</li>
<li>&#x21D2; y was explored during DFS(x) &#x21D2; is a descendant of x</li>
</ul>
</li>
</ul>
<p>We first see the edge as (y, x) when exploring y: ancestor x is already marked explored, so (y, x) is a <strong>back edge.</strong><br>
x can&#x2019;t be parent of y, since then (x, y) is a <strong>tree edge.</strong></p>

<hr>
<ul><li>Traversal Implementations</li></ul>
<p>Generic approach:<br>
maintain set of explored nodes and discovered nodes</p>
<ul>
<li>Explored = have seen this node and explored its outgoing edges</li>
<li>Discovered = the &#x201C;frontier&#x201D;.<br>
Have seen the node, but not explored its outgoing edges.</li>
</ul>

<p>Let A = data structure of discovered nodes</p>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">Traverse(s)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;put&#xA0;s&#xA0;<span style="color:#ff3399">in</span>&#xA0;A</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">while</span>&#xA0;A&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;empty&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;take&#xA0;a&#xA0;node&#xA0;v&#xA0;<span style="color:#ff3399">from</span>&#xA0;A</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;v&#xA0;<span style="color:#ff3399">is</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;marked&#xA0;<span style="color:#ffd500">&quot;explored&quot;</span>&#xA0;then</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;mark&#xA0;v&#xA0;<span style="color:#ffd500">&quot;explored&quot;</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;each&#xA0;edge&#xA0;(v,w)&#xA0;incident&#xA0;to&#xA0;v&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;put&#xA0;w&#xA0;<span style="color:#ff3399">in</span>&#xA0;A&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#999999">#&#xA0;w&#xA0;is&#xA0;discovered</span></div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<p>BFS: A is a queue (FIFO) / DFS: A is a stack (LIFO)<br>Can a node be discovered (placed in A) multiple times? Yes.<br>For DFS, node is explored from parent that added it last (LIFO).<br>For BFS, can avoid by not adding discovered nodes.</p>
<p>How to explore entire graph even if it is disconnected?</p>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;there&#xA0;<span style="color:#ff3399">is</span>&#xA0;some&#xA0;unexplored&#xA0;node&#xA0;s&#xA0;<span style="color:#ff3399">do</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;Traverse(s)&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#999999">#&#xA0;Run&#xA0;BFS/DFS&#xA0;starting&#xA0;from&#xA0;s.</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;Extract&#xA0;connected&#xA0;component&#xA0;containing&#xA0;s</div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/Data-Structure?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/Data-Structure</div><div class="kg-bookmark-description">Contribute to IlMinCho/Data-Structure development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Algorithms - Graph, BFS, DFS"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/390d478b676cc36ef51f837cbdf2c8ca94a417c8e1c9ff1f791d260d8a1cb2fb/IlMinCho/Data-Structure" alt="Algorithms - Graph, BFS, DFS"></div></a></figure>
<hr>]]></content:encoded></item><item><title><![CDATA[Artificial Intelligence - Heuristic/Local search]]></title><description><![CDATA[<hr>
<p><strong>Heuristic Function</strong><br>&#x2022; A heuristic function h(n) yields the estimated cost of the cheapest path from the state at node n to a goal state.<br>&#x2022; What do we mean by &#x201C;heuristic&#x201D;?</p>
<ul><ul><li>Oxford Dictionary: Proceeding to a solution by trial and error or by rules that are</li></ul></ul>]]></description><link>https://ilmincho.me/ai-heuristic-local-search/</link><guid isPermaLink="false">65a9ff3839059704734d5801</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Thu, 11 Jan 2024 04:48:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1696258686286-1191184126aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI5fHxBSXxlbnwwfHx8fDE3MDU2MzkyOTZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<img src="https://images.unsplash.com/photo-1696258686286-1191184126aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI5fHxBSXxlbnwwfHx8fDE3MDU2MzkyOTZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Artificial Intelligence - Heuristic/Local search"><p><strong>Heuristic Function</strong><br>&#x2022; A heuristic function h(n) yields the estimated cost of the cheapest path from the state at node n to a goal state.<br>&#x2022; What do we mean by &#x201C;heuristic&#x201D;?</p>
<ul><ul><li>Oxford Dictionary: Proceeding to a solution by trial and error or by rules that are only loosely defined.</li><li>Wikipedia: A technique designed to solve a problem that ignores whether the solution can be proven to be correct, but which usually produces a good solution or solves a simpler problem that contains or intersects with the solution of the more complex problem.</li></ul><li>In this post - ex) Greedy Best-First Search and A*</li></ul>
<hr>
<p><strong>Search Terminology</strong></p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-62.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="722" height="438" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-62.png 600w, https://ilmincho.me/content/images/2024/01/image-62.png 722w" sizes="(min-width: 720px) 720px"></figure>
<p></p>
<ul><li>Tree Search</li></ul>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(INITIAL_STATE)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.get_next_node()</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(nd):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">elif</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(nd)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-63.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="641" height="223" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-63.png 600w, https://ilmincho.me/content/images/2024/01/image-63.png 641w"></figure>
<p></p>
<ul><li>Graph Search</li></ul>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(INITIAL_STATE)</div><div style="padding:0 6px; white-space:pre; line-height:130%">explored&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;{}</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.get_next_node()</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;explored.add(node)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(nd):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">elif</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;explored):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(nd)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div><div style="text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic"><a style="color:#4f4f4ftext-decoration:none" href="http://colorscripter.com/info?ref=ilmincho.me#e">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-64.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="644" height="229" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-64.png 600w, https://ilmincho.me/content/images/2024/01/image-64.png 644w"></figure>
<ul>
<li>
<p>Tree Search vs. Graph Search</p>
<ol>
<li>Without some sort of bookkeeping, naive tree search methods may repeat themselves, possibly ad infinitum</li>
<li>Graph search methods maintain a data structure to track previously explored states, avoiding repetition</li>
<li>Graph search is going to take up more space given the extra data structure</li>
<li>For our purposes, we&#x2019;ll always assume that we&#x2019;re using graph search unless explicitly said otherwise</li>
</ol>
</li>
</ul>

<ul><li>Breadth-First Search (BFS)</li></ul>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(INITIAL_STATE)&#xA0;<span style="color:#999999">#&#xA0;FIFO&#xA0;queue</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">explored&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;{}</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.pop()&#xA0;<span style="color:#999999">#&#xA0;dequeue</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;explored.add(node)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(nd):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">elif</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;explored):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(nd)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div><div style="text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic"><a style="color:#4f4f4ftext-decoration:none" href="http://colorscripter.com/info?ref=ilmincho.me#e">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-66.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="1015" height="659" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-66.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-66.png 1000w, https://ilmincho.me/content/images/2024/01/image-66.png 1015w" sizes="(min-width: 720px) 720px"></figure>
<ol>
<li>Complete? Yes (if branching factor b is finite)</li>
<li>Optimal? Yes, if step costs are identical, but not in general</li>
<li>Time? 1+b+b2+b3+&#x2026;+bd = O(bd)</li>
<li>Space? O(bd) (b = branching factor, d = depth of solution)</li>
</ol>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-68.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="767" height="544" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-68.png 600w, https://ilmincho.me/content/images/2024/01/image-68.png 767w" sizes="(min-width: 720px) 720px"></figure>
<ul><li>Depth-First Search (DFS)</li></ul>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(INITIAL_STATE)&#xA0;<span style="color:#999999">#&#xA0;LIFO&#xA0;stack</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">explored&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;{}</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.pop()</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;explored.add(node)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(nd):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">elif</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;explored):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(nd)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div><div style="text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic"><a style="color:#4f4f4ftext-decoration:none" href="http://colorscripter.com/info?ref=ilmincho.me#e">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-67.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="1013" height="642" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-67.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-67.png 1000w, https://ilmincho.me/content/images/2024/01/image-67.png 1013w" sizes="(min-width: 720px) 720px"></figure>
<p>DFS ( Graph )</p>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div><div style="line-height:130%">13</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(INITIAL_STATE)&#xA0;<span style="color:#999999">#&#xA0;LIFO&#xA0;stack</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">explored&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;{}</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.pop()</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;explored.add(node)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;n&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;(n&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(n&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;explored):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(n):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">else</span>:</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(n)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div><div style="text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic"><a style="color:#4f4f4ftext-decoration:none" href="http://colorscripter.com/info?ref=ilmincho.me#e">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<p>DFS ( Tree )</p>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div><div style="line-height:130%">13</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(INITIAL_STATE)</div><div style="padding:0 6px; white-space:pre; line-height:130%">explored&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;{}</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.pop()</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;n&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;(n&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(n):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">else</span>:</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(n)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-70.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="675" height="407" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-70.png 600w, https://ilmincho.me/content/images/2024/01/image-70.png 675w"></figure>
<hr>
<ul><li>Uniform-Cost Search</li></ul>
<pre><code>&#x2022; How can we modify BFS to retain optimality in problems with different transition costs?
&#x2022; Intuition: expand nodes in order of least path cost so far
&#x2022; Instead of FIFO or LIFO queue, store frontier as a priority queue
&#x2022; Recall: priority queues are an abstract data type that holds a collection of elements associated with a (usually numeric) priority, such that higher priority items are dequeued (popped) before lower ones.
</code></pre>

<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div><div style="line-height:130%">13</div><div style="line-height:130%">14</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(INITIAL_STATE)&#xA0;<span style="color:#999999">#&#xA0;Priority&#xA0;queue</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">explored&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;{}</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.pop()</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;explored.add(node)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;explored):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(nd)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">else</span>&#xA0;<span style="color:#ff3399">if</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(frontier.get(nd)&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">&gt;</span>&#xA0;nd.cost):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.update(nd,&#xA0;nd.cost)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div><div style="text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic"><a style="color:#4f4f4ftext-decoration:none" href="http://colorscripter.com/info?ref=ilmincho.me#e">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-71.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="1026" height="759" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-71.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-71.png 1000w, https://ilmincho.me/content/images/2024/01/image-71.png 1026w" sizes="(min-width: 720px) 720px"></figure>
<ol>
<li>Complete? Yes</li>
<li>Optimal? Yes</li>
<li>Time? O(b^(1+[C*/&#x3F5;]))</li>
<li>Space? O(b^(1+[C*/&#x3F5;]))<br>
(b = branching factor, C* = cost of optimal solution, &#x3F5; = minimum step cost)</li>
</ol>

<hr>
<ul><li>Greedy Best-First Search</li></ul>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-72.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="643" height="440" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-72.png 600w, https://ilmincho.me/content/images/2024/01/image-72.png 643w"></figure>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-73.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="628" height="418" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-73.png 600w, https://ilmincho.me/content/images/2024/01/image-73.png 628w"></figure>
<ul><li>A* Search</li></ul>
<ul>
<li>Intuition: avoid expanding paths that are already expensive, but still prefer those that seem closest to the goal</li>
<li>Evaluation function:
<ul>
<li>f(n) = g(n) + h(n)</li>
<li>g(n) = cost so far to reach state n (like UCS)</li>
<li>h(n) = est. cost of cheapest path from n to goal (like Greedy)</li>
<li>f(n) = est. cost of cheapest path through n to goal</li>
</ul>
</li>
</ul>

<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div><div style="line-height:130%">13</div><div style="line-height:130%">14</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">frontier.add(START_STATE,&#xA0;<span style="color:#c10aff">0</span>)&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%">explored&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;{}</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_empty(frontier):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;frontier.pop()</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;is_goal(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;solution</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;explored.add(node)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">for</span>&#xA0;nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;expand(node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">not</span>&#xA0;<span style="color:#ff3399">in</span>&#xA0;explored):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.add(nd)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">else</span>&#xA0;<span style="color:#ff3399">if</span>&#xA0;(nd&#xA0;<span style="color:#ff3399">in</span>&#xA0;frontier)&#xA0;<span style="color:#ff3399">and</span>&#xA0;(frontier.get(nd)&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">&gt;</span>&#xA0;nd.cost):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;frontier.update(nd,&#xA0;nd.cost)</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">return</span>&#xA0;failure</div></div><div style="text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic"><a style="color:#4f4f4ftext-decoration:none" href="http://colorscripter.com/info?ref=ilmincho.me#e">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-74.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="1036" height="785" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-74.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-74.png 1000w, https://ilmincho.me/content/images/2024/01/image-74.png 1036w" sizes="(min-width: 720px) 720px"></figure>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-75.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="605" height="388" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-75.png 600w, https://ilmincho.me/content/images/2024/01/image-75.png 605w"></figure>
<hr>
<p><strong>Local Search</strong></p>
<p>&#x2022; Local search algorithms that keep a single current state, and then try to improve 	it.<br>&#x2022; State space is the set of complete configurations<br>&#x2022; In many optimization problems, the path to the goal is irrelevant; the goal state itself is the solution<br>&#x2022; We may not know what the goal is! In that case, the search becomes an optimization problem &#x2014; we return the best state we can find.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-76.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="765" height="403" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-76.png 600w, https://ilmincho.me/content/images/2024/01/image-76.png 765w" sizes="(min-width: 720px) 720px"></figure>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-79.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="1023" height="607" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-79.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-79.png 1000w, https://ilmincho.me/content/images/2024/01/image-79.png 1023w" sizes="(min-width: 720px) 720px"></figure>
<ul><li>Hill Climbing Search</li></ul>
<table style="margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;" class="colorscripter-code-table"><tbody><tr><td style="padding:6px;border-right:2px solid #4f4f4f"><div style="margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div></div></td><td style="padding:6px 0;text-align:left"><div style="margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &apos;Liberation Mono&apos;, Menlo, Courier, monospace !important;line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%">current_node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;INITIAL_STATE</div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">while</span>&#xA0;<span style="color:#ff3399">not</span>&#xA0;is_goal(current_node):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;successors&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;expand(current_node)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;best&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;select_best(successors)</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">if</span>&#xA0;objective(current_node)&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">&gt;</span>&#xA0;objective(best):</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">return</span>&#xA0;current_node</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span style="color:#ff3399">else</span>:</div><div style="padding:0 6px; white-space:pre; line-height:130%">&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;current_node&#xA0;<span style="color:#0086b3"></span><span style="color:#ff3399">=</span>&#xA0;best</div></div></td><td style="vertical-align:bottom;padding:0 2px 4px 0"><a style="text-decoration:none;color:white" href="http://colorscripter.com/info?ref=ilmincho.me#e"><span style="font-size:9px;word-break:normal;background-color:#4f4f4f;color:white;border-radius:10px;padding:1px">cs</span></a></td></tr></tbody></table>
<p> = 8-Puzzle Hill Climbing</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-80.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="754" height="174" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-80.png 600w, https://ilmincho.me/content/images/2024/01/image-80.png 754w" sizes="(min-width: 720px) 720px"></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-81.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="1019" height="539" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-81.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-81.png 1000w, https://ilmincho.me/content/images/2024/01/image-81.png 1019w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">so on .....</span></figcaption></figure>
<p><em>Challenges for Hill Climbing</em></p>
<p>&#x2022; Local Maxima/Minima &#x2013; every move has a worse result than the current state. Once a local maximum is reached, there is no way to backtrack or move out of that maximum.<br>&#x2022; &#x201C;Shoulders/Plateaux&#x201D; &#x2013; there are no better moves, but some are just as good. Do we keep exploring? Hill climbing can have difficult time finding its way off of a flat portion of the objective function landscape.</p>
<p><em>So why use local search?</em><br>&#x2022; Low memory requirements &#x2013; usually constant<br>&#x2022; Effective &#x2013; Can often find good solutions in extremely large state spaces<br>&#x2022; Can be useful for optimization problems with continuous, infinite branching factors<br>&#x2022; Randomized variants of hill climbing can mitigate many of the drawbacks in practice</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-82.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="659" height="446" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-82.png 600w, https://ilmincho.me/content/images/2024/01/image-82.png 659w"></figure>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/AI-8Puzzle?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/AI-8Puzzle</div><div class="kg-bookmark-description">Contribute to IlMinCho/AI-8Puzzle development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Artificial Intelligence - Heuristic/Local search"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/fa1f806c638ccdaf839fbec3ce7f7a99e863b2838aa03a40a851dba02136397d/IlMinCho/AI-8Puzzle" alt="Artificial Intelligence - Heuristic/Local search"></div></a></figure>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-83.png" class="kg-image" alt="Artificial Intelligence - Heuristic/Local search" loading="lazy" width="927" height="275" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-83.png 600w, https://ilmincho.me/content/images/2024/01/image-83.png 927w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p>Reference: <a href="https://www.cics.umass.edu/people/rattigan-matthew?ref=ilmincho.me">Matthew Hale Rattigan</a></p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Computer Networking - Reliable Data Transfer (RDT)]]></title><description><![CDATA[<hr>
<p><strong>Principles Of Reliable Data Transfer</strong></p>
<p><img src="https://ilmincho.me/content/images/2024/01/1-9.png" alt="1.png" loading="lazy"></p>
<p><img src="https://ilmincho.me/content/images/2024/01/22-3.png" alt="22.png" loading="lazy"></p>
<p>Complexity of reliable data transfer protocol	will depend (strongly) on characteristics of unreliable channel (lose, corrupt, reorder data?) = Sender, receiver do not know the &#x201C;state&#x201D; of each other, e.g.</p>

<hr>
<p><strong>Reliable Data Transfer Protocol (rdt): Interfaces</strong></p>
<p><img src="https://ilmincho.me/content/images/2024/01/Screenshot-2024-01-06-194829.png" alt="Screenshot 2024-01-06 194829.png" loading="lazy"></p>

<ul>
<li>Incrementally develop sender, receiver sides of reliable</li></ul>]]></description><link>https://ilmincho.me/cn-rdt/</link><guid isPermaLink="false">6598b52c4547a6048f6aa305</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Thu, 04 Jan 2024 01:18:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbXB1dGVyJTIwbmV0d29ya2luZ3xlbnwwfHx8fDE3MDQ0MzU1Mzh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<img src="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbXB1dGVyJTIwbmV0d29ya2luZ3xlbnwwfHx8fDE3MDQ0MzU1Mzh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Computer Networking - Reliable Data Transfer (RDT)"><p><strong>Principles Of Reliable Data Transfer</strong></p>
<p><img src="https://ilmincho.me/content/images/2024/01/1-9.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
<p><img src="https://ilmincho.me/content/images/2024/01/22-3.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
<p>Complexity of reliable data transfer protocol	will depend (strongly) on characteristics of unreliable channel (lose, corrupt, reorder data?) = Sender, receiver do not know the &#x201C;state&#x201D; of each other, e.g.</p>

<hr>
<p><strong>Reliable Data Transfer Protocol (rdt): Interfaces</strong></p>
<p><img src="https://ilmincho.me/content/images/2024/01/Screenshot-2024-01-06-194829.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>

<ul>
<li>Incrementally develop sender, receiver sides of reliable data transfer protocol (rdt)</li>
<li>Consider only unidirectional data transfer -But control info will flow in both directions!</li>
<li>Use finite state machines (FSM) to specify sender, receiver</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/ss-1.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>

<hr>
<p><strong>rdt1.0: Reliable Transfer Over A Reliable Channel</strong></p>
<ul>
<li>Underlying channel perfectly reliable = No bit errors / No loss of packets</li>
<li>Separate FSMs for sender, receiver: Sender sends data into underlying channel , Receiver reads data from underlying channel</li>
</ul>
<p><strong>rdt2.0: Channel With Bit Errors</strong></p>
<ul>
<li>
<p>Underlying channel may flip bits in packet = Checksum to detect bit errors</p>
</li>
<li>
<p>The question: how to recover from errors:</p>
<ol>
<li>Acknowledgements (ACKs): receiver explicitly tells sender that pkt received OK</li>
<li>Negative acknowledgements (NAKs): receiver explicitly tells sender that pkt had 	errors</li>
<li>Sender retransmits pkt on receipt of NAK</li>
</ol>
</li>
<li>
<p>New mechanisms in rdt2.0 (beyond rdt1.0): Error detection / Receiver feedback: control messages (ACK,NAK) receiver &#x2794; sender<br>
<img src="https://ilmincho.me/content/images/2024/01/123.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
</li>
<li>
<p>What happens if ACK/NAK corrupted?</p>
<ol>
<li>Sender doesn&#x2019;t know what happened at receiver!</li>
<li>Can&#x2019;t just retransmit: possible duplicate</li>
</ol>
</li>
<li>
<p>Handling duplicates:</p>
<ol>
<li>Sender retransmits current packet if ACK/NAK corrupted</li>
<li>Sender adds sequence number to each packet</li>
<li>Receiver discards (doesn&#x2019;t deliver up) duplicate packet</li>
</ol>
</li>
</ul>
<p><strong>rdt2.1: Sender, Handling Garbled ACK/NAKs</strong><br>
<img src="https://ilmincho.me/content/images/2024/01/2.1.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
<p><strong>rdt2.1: Receiver, Handles Garbled ACK/NAKs</strong><br>
<img src="https://ilmincho.me/content/images/2024/01/2.2.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
<p><strong>rdt2.2: Sender, Receiver Fragments</strong><br>
<img src="https://ilmincho.me/content/images/2024/01/4421.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
<p><strong>rdt3.0: Channels With Errors And Loss</strong></p>
<ul>
<li>
<p>New assumption: underlying channel can also lose packets (data, ACKs)<br>
= Checksum, seq. #, ACKs, retransmissions will be of help &#x2026; 	but not enough</p>
</li>
<li>
<p>Approach: sender waits &#x201C;reasonable&#x201D; amount of time for ACK</p>
<ol>
<li>Retransmits if no ACK received in this time</li>
<li>If pkt (or ACK) just delayed (not lost):<br>
=Retransmission will be	duplicate, but seq. #&#x2019;s already handles this<br>
=Receiver must specify seq # of pkt being ACKed</li>
<li>Use countdown timer to interrupt after &#x201C;reasonable&#x201D; amount of time</li>
</ol>
</li>
<li>
<p>rdt3.0 Sender<br>
<img src="https://ilmincho.me/content/images/2024/01/sed.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
</li>
<li>
<p>rdt3.0 In action<br>
<img src="https://ilmincho.me/content/images/2024/01/acac.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
</li>
<li>
<p>rdt3.0 Receiver<br>
<img src="https://ilmincho.me/content/images/2024/01/rev.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></p>
</li>
<li>
<p>Performance Of rdt3.0</p>
</li>
</ul>
<ol>
<li>rdt3.0 is correct, but &#x2026;.<br>
=performance stinks</li>
<li>Example: 1 Gbps link, 15 ms prop/net delay, 8K bit packet:<br>
=Time to transmit packet into channel:<img src="https://ilmincho.me/content/images/2024/01/55-1.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"><br>
=U sender: utilization &#x2013; fraction of time sender busy sending<img src="https://ilmincho.me/content/images/2024/01/66.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"><br>
=If RTT=30 msec, 1KB pkt every 30 msec: 33kB/sec throughput over 1 Gbps link</li>
<li>Network protocol limits use of physical resources!</li>
</ol>
<ul>
<li>Stop-And-Wait Operation<br>
<img src="https://ilmincho.me/content/images/2024/01/stop.png" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy"></li>
</ul>

<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/CN-RDT?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/CN-RDT</div><div class="kg-bookmark-description">Contribute to IlMinCho/CN-RDT development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Computer Networking - Reliable Data Transfer (RDT)"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/298ae18b3aa58e53f40c8b6dc37285bf059fa41c1dc5d5797826b5ab4bb646d5/IlMinCho/CN-RDT" alt="Computer Networking - Reliable Data Transfer (RDT)"></div></a></figure>
<p>This sender and receiver will communicate with each other through an intermediary server running on<a href="https://gaia.cs.umass.edu/?ref=ilmincho.me"> gaia.cs.umass.edu</a>, as shown below in Figure, that will function as an unreliable channel connecting this sender and receiver. This sender and receiver will each send messages to the server, and the server will relay (after possibly corrupting, losing or delaying but not reordering) the message to the other side.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-43.png" class="kg-image" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy" width="894" height="501" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-43.png 600w, https://ilmincho.me/content/images/2024/01/image-43.png 894w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><br>In this project, the task involves writing transport-level code for a simple reliable data transfer protocol, specifically an implementation of the rdt 3.0 protocol. This protocol is designed to operate over a channel that may corrupt, lose, or delay messages but will not reorder them. The implementation is close to what is required in real-world scenarios.</p>
<p>The project requires programming a sender and a receiver to reliably transfer the first 200 characters of a text file, using the rdt 3.0 protocol. Unlike the standard rdt 3.0 protocol, the sender in this project will not use rdt_send(data) to send data, nor will the receiver use udt_send(data) to deliver data. Instead, the sender will reliably deliver a file from sender to receiver. Both the sender and receiver will communicate over sockets on the Internet. </p>
<p>The specific task is to transfer the first 200 characters of the Declaration of Independence, available at a given URL, from the sender to the receiver. This process will be executed within the network environment described in the project, employing the rdt 3.0 protocol&apos;s sender and receiver finite state machines (FSMs).<br></p>
<p><strong>Flowchart</strong></p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-44.png" class="kg-image" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy" width="689" height="881" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-44.png 600w, https://ilmincho.me/content/images/2024/01/image-44.png 689w"></figure>
<hr>
<p><strong>Outcomes:</strong></p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-45.png" class="kg-image" alt="Computer Networking - Reliable Data Transfer (RDT)" loading="lazy" width="795" height="769" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-45.png 600w, https://ilmincho.me/content/images/2024/01/image-45.png 795w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p>Reference:Prof.&#xA0;<a href="https://www.cics.umass.edu/people/kermani-parviz?ref=ilmincho.me">Parviz Kermani</a></p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Computer Networking - TCP/UDP]]></title><description><![CDATA[<hr>
<p><strong>Internet Protocol Stack</strong></p>
<ul>
<li>Application: supporting network applications - FTP, SMTP, HTTP</li>
<li><mark>Transport: process-process data transfer - TCP, UDP</mark></li>
<li>Network: routing of datagrams from source to destination - IP, routing protocols</li>
<li>Link: data transfer between neighboring network elements - Ethernet, 802.111 (WiFi), PPP</li>
<li>Physical: bits &#x201C;on the wire&#x201D;</li></ul>]]></description><link>https://ilmincho.me/cn-tcp-udp/</link><guid isPermaLink="false">65979e42254e730492203e47</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Wed, 03 Jan 2024 06:20:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbXB1dGVyJTIwbmV0d29ya2luZ3xlbnwwfHx8fDE3MDQ0MzU1Mzh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<img src="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbXB1dGVyJTIwbmV0d29ya2luZ3xlbnwwfHx8fDE3MDQ0MzU1Mzh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Computer Networking - TCP/UDP"><p><strong>Internet Protocol Stack</strong></p>
<ul>
<li>Application: supporting network applications - FTP, SMTP, HTTP</li>
<li><mark>Transport: process-process data transfer - TCP, UDP</mark></li>
<li>Network: routing of datagrams from source to destination - IP, routing protocols</li>
<li>Link: data transfer between neighboring network elements - Ethernet, 802.111 (WiFi), PPP</li>
<li>Physical: bits &#x201C;on the wire&#x201D;</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/22-2.png" alt="Computer Networking - TCP/UDP" loading="lazy"></p>

<p><strong>What Transport Service Does An App Need?</strong></p>
<ul>
<li>Data integrity<br>
-Some apps (e.g., File transfer, web transactions) require 100% reliable data transfer<br>
-Other apps (e.g., Audio) can tolerate some loss</li>
<li>Timing<br>
-Some apps (e.g., Internet telephony, interactive games) require low delay to be &#x201C;effective&#x201D;</li>
<li>Throughput<br>
-Some apps (e.g., multimedia) require minimum amount of throughput to be &#x201C;effective&#x201D;<br>
-Other apps (&#x201C;elastic apps&#x201D;) make use of whatever throughput they get</li>
<li>Security<br>
-Encryption, data confidentiality, &#x2026;</li>
</ul>

<hr>
<p><strong>Internet Transport Protocols Services</strong></p>

<ul>
<li>TCP service:</li>
</ul>
<blockquote>
<p>Reliable transport: between sending and receiving process.<br>
Flow control:sender won&#x2019;t overwhelm receiver.<br>
Congestion control: throttle sender when network overloaded.<br>
Does not provide: timing, minimum throughput guarantee, security.<br>
Connection-oriented: setup required between client and server processes.</p>
</blockquote>
<ul>
<li>UDP service:</li>
</ul>
<blockquote>
<p>Unreliable data transfer: between sending and receiving process.<br>
Does not provide: reliability, flow control, congestion control, timing, throughput guarantee, security, or connection setup.</p>
</blockquote>

<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-37.png" class="kg-image" alt="Computer Networking - TCP/UDP" loading="lazy" width="522" height="244"><figcaption><span style="white-space: pre-wrap;">Transport Service Requirements: Common Apps</span></figcaption></figure>
<hr>
<p><strong>Socket Programming</strong></p>
<ul>
<li>Goal: learn how to build client/server applications that communicate using sockets</li>
<li>Socket: door between application process and end-end-transport protocol<br>
<img src="https://ilmincho.me/content/images/2024/01/ss.png" alt="Computer Networking - TCP/UDP" loading="lazy"></li>
</ul>
<p><em>Two socket types for two transport services:</em></p>
<ul>
<li>UDP: unreliable datagram</li>
<li>TCP: reliable, byte stream-oriented</li>
</ul>
<p><em>Application Example:</em></p>
<ol>
<li>Client reads a line of characters (data) from its keyboard and sends data to server</li>
<li>Server receives the data and converts characters to uppercase</li>
<li>Server sends modified data to client</li>
<li>Client receives modified data and displays line on its screen</li>
</ol>

<hr>
<p><strong>Socket Programming With UDP</strong></p>
<ul>
<li>UDP: no &#x201C;connection&#x201D;between client &amp; server</li>
</ul>
<blockquote>
<p>No handshaking before sending data.<br>
Sender explicitly attaches IP destination address and port # to each packet.<br>
Receiver extracts sender IP address and port# from received packet.</p>
</blockquote>
<ul>
<li>UDP: transmitted data may be lost or received out-of-order</li>
<li>Application viewpoint: UDP provides unreliabletransfer of groups of bytes (&#x201C;datagrams&#x201D;) between client and server</li>
</ul>

<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-38.png" class="kg-image" alt="Computer Networking - TCP/UDP" loading="lazy" width="1306" height="679" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-38.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-38.png 1000w, https://ilmincho.me/content/images/2024/01/image-38.png 1306w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Client/Server Socket Interaction: UDP</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-39.png" class="kg-image" alt="Computer Networking - TCP/UDP" loading="lazy" width="1405" height="608" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-39.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-39.png 1000w, https://ilmincho.me/content/images/2024/01/image-39.png 1405w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Example App: UDP Client</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-40.png" class="kg-image" alt="Computer Networking - TCP/UDP" loading="lazy" width="1398" height="544" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-40.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-40.png 1000w, https://ilmincho.me/content/images/2024/01/image-40.png 1398w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Example App: UDP Server</span></figcaption></figure>
<p></p>
<p><strong>Client/Server Socket Interaction: TCP</strong></p>
<ul>
<li>Client must contact server</li>
</ul>
<blockquote>
<p>Server Process Must First Be Running.<br>
Server Must Have Created Socket (Door) That Welcomes Client&#x2019;s Contact.</p>
</blockquote>
<ul>
<li>Client contacts server by:</li>
</ul>
<blockquote>
<p>Creating TCP socket, specifying IP address, port number of server process.<br>
When client creates socket: client TCP establishes connection to server TCP.</p>
</blockquote>
<ul>
<li>When contacted by client, server TCP creates new socketfor server process to communicate with that particular client</li>
</ul>
<blockquote>
<p>Allows server to talk with multiple clients.<br>
Source port numbers used to distinguish clients (more in Chap 3).</p>
</blockquote>
<ul>
<li>Application viewpoint: TCP provides reliable, in-order Byte-stream transfer (&#x201C;pipe&#x201D;) between client and server</li>
</ul>

<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-41.png" class="kg-image" alt="Computer Networking - TCP/UDP" loading="lazy" width="957" height="683" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-41.png 600w, https://ilmincho.me/content/images/2024/01/image-41.png 957w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Client/Server Socket Interaction: TCP</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-42.png" class="kg-image" alt="Computer Networking - TCP/UDP" loading="lazy" width="1583" height="603" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-42.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-42.png 1000w, https://ilmincho.me/content/images/2024/01/image-42.png 1583w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Example App: TCP Server</span></figcaption></figure>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/CN-TCP-UDP?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/CN-TCP-UDP</div><div class="kg-bookmark-description">Contribute to IlMinCho/CN-TCP-UDP development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Computer Networking - TCP/UDP"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/0af8dd2d4a4fe52714d470d29b0d1d3b84aa810db7f18af326a9554effd1cf57/IlMinCho/CN-TCP-UDP" alt="Computer Networking - TCP/UDP"></div></a></figure>
<p>a. TCP Client/Server (2 Programs)<br>b. Reliable UDP Client/Server (2 programs)<br>c. Unreliable UDP Client/Server (2 Programs)</p>
<p>A good reference for Python socket programming : <a href="https://docs.python.org/3/howto/sockets.html?ref=ilmincho.me">https://docs.python.org/3/howto/sockets.html</a></p>
<hr>
<p><strong>The Server - a reliable environment</strong><br>The server performs the Operation Code (OC) requested on the two integer numbers it receives from the sender and returns the result. The format of the returned result is &#x201C;status-code numeric-result&#x201D; (without quote), as explained below. More specifically the steps (or algorithm) performed by the server are:</p>
<ol><li><strong>Open a TCP Socket:</strong><ul><li>Initialize and bind a TCP socket to listen for incoming connections.</li></ul></li><li><strong>Listen to the Socket:</strong><ul><li>Put the socket into listening mode to accept connection requests.</li></ul></li><li><strong>Accept Connection and Receive Request:</strong><ul><li>Accept a new connection.</li><li>Receive a request consisting of an Operation Code (OC) and two integer numbers.</li></ul></li><li><strong>Validate Request:</strong><ul><li>Check if OC is one of <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>.</li><li>Ensure both operands are integers.</li><li>Handle division by zero for <code>/</code>.</li></ul></li><li><strong>Error Handling:</strong><ul><li>For invalid OC, send status code <code>620</code> and result <code>-1</code>.</li><li>For invalid operands or division by zero, send status code <code>630</code> and result <code>-1</code>.</li></ul></li><li><strong>Process Valid Request:</strong><ul><li>If request is valid, perform the operation.</li><li>Send back status code <code>200</code> and the result.</li></ul></li><li><strong>Logging:</strong><ul><li>Output <code>{received_line} -&gt; {status_code} {result}</code> to standard output.</li></ul></li><li><strong>Loop Back:</strong><ul><li>Return to Step 2 for handling new requests.</li></ul></li><li><strong>Shutdown:</strong><ul><li>Respond to <code>^C</code> (Control-C) signal to gracefully stop the server.</li></ul></li></ol>
<p><strong>The Client - a reliable environment</strong><br>The client sends an Operation Code (OC), and the two numbers it has acquired from the user. OC can be: Addition (+), Subtraction (-), Multiplication (*), and Division (/)<br>To make the problem simple, your client sends two numbers that are integers.<br>The two numbers and the OC are read from a file which the user has prepared. The algorithm is specified as follows:</p>
<ol><li><strong>Start and Read Input File:</strong><ul><li>Start the client program, accepting a filename as a command-line argument.</li><li>Read the file line by line, where each line contains an OC and two integers, separated by spaces.</li></ul></li><li><strong>Display Input Request:</strong><ul><li>For each line read, display <code>Input request: {input_line}</code>.</li></ul></li><li><strong>Open a TCP Socket:</strong><ul><li>Establish a TCP connection to the server.</li></ul></li><li><strong>Send Request to Server:</strong><ul><li>Send the line read from the file to the server.</li></ul></li><li><strong>Receive Response:</strong><ul><li>Wait for and receive the response from the server (status code and result).</li></ul></li><li><strong>Process Response:</strong><ul><li>If status code is <code>200</code>, display <code>The result is: {result}</code>.</li><li>For other status codes, display <code>Error {status_code}: {description}</code>.</li></ul></li><li><strong>Close Socket:</strong><ul><li>Close the TCP connection.</li></ul></li><li><strong>Repeat for 7 Lines:</strong><ul><li>Repeat steps 2-6 for a total of 7 lines from the file.</li></ul></li><li><strong>Terminate Program:</strong><ul><li>Stop the client program.</li></ul></li></ol>
<p></p>
<p><strong>The UDP Server - an unreliable environment</strong></p>
<ol><li><strong>Start and Read Command Line Parameters:</strong><ul><li>On startup, read two parameters from the command line: the probability <code>p</code> of dropping a received datagram and a string for seeding a random number generator.</li></ul></li><li><strong>Seed Random Number Generator:</strong><ul><li>Use <code>random.seed(sys.argv[2])</code> to seed the random number generator with the provided string. This ensures reproducibility of the random behavior.</li></ul></li><li><strong>Open a UDP Socket:</strong><ul><li>Initialize and bind a UDP socket for the server.</li></ul></li><li><strong>Listen to the Socket:</strong><ul><li>Wait for incoming UDP datagrams.</li></ul></li><li><strong>Receive a Datagram:</strong><ul><li>Receive a request in the form of a datagram.</li></ul></li><li><strong>Simulate Datagram Drop:</strong><ul><li>With probability <code>p</code>, determined by <code>if random.random() &lt;= p</code>, drop the request.</li><li>If dropped, print <code>{received_line} -&gt; dropped</code> and return to Step 4.</li></ul></li><li><strong>Parse the Request:</strong><ul><li>Extract the operation code (OC) and two integer numbers from the received datagram.</li></ul></li><li><strong>Validate the Request:</strong><ul><li>Check if OC is one of <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>.</li><li>Ensure both operands are integers.</li><li>Handle division by zero for <code>/</code>.</li></ul></li><li><strong>Handle Invalid Requests:</strong><ul><li>For an invalid OC, return status code <code>620</code> and result <code>-1</code>.</li><li>For invalid operands or division by zero, return status code <code>630</code> and result <code>-1</code>.</li></ul></li><li><strong>Process Valid Requests:</strong><ul><li>If the request is valid, perform the operation.</li><li>Return status code <code>200</code> and the operation result.</li></ul></li><li><strong>Logging:</strong><ul><li>Print <code>{received_line} -&gt; {status_code} {result}</code> to standard output.</li></ul></li><li><strong>Loop Back:</strong><ul><li>Return to Step 4 for handling new datagrams.</li></ul></li><li><strong>Shutdown Handling:</strong><ul><li>The server should respond to <code>^C</code> (Control-C) for graceful termination.</li></ul></li></ol>
<p><strong>The UDP Client - an unreliable environment</strong></p>
<ol><li><strong>Start and Read Input File:</strong><ul><li>Start the client and read the name of a file passed as a command-line parameter.</li><li>The file contains lines with three values: an Operation Code (OC) and two integer numbers, separated by spaces.</li></ul></li><li><strong>Initialize Timer Value:</strong><ul><li>Set <code>d = 0.1</code> seconds (initial timeout duration).</li></ul></li><li><strong>Open a UDP Socket:</strong><ul><li>Create and configure a UDP socket.</li></ul></li><li><strong>Send Request to Server:</strong><ul><li>Read a line from the file and send it to the server via the UDP socket.</li></ul></li><li><strong>Start Timer and Wait for Reply:</strong><ul><li>Start a timer for <code>d</code> seconds.</li><li>Wait for a reply from the server within this time frame.</li></ul></li><li><strong>Handle Timer Expiry:</strong><ul><li>If the timer expires before a reply is received:<ul><li>Double the timer value (<code>d = 2 * d</code>).</li><li>If <code>d &gt; 2</code> seconds:<ol><li>Raise an exception.</li><li>Notify the user with &#x201C;Request timed out: the server is DEAD&#x201D;.</li><li>Set status code to <code>300</code> (indicating server unavailability).</li><li>Proceed to Step 8 (turn off the timer).</li></ol></li><li>Otherwise, print &#x201C;Request timed out: resending&#x201D; and go back to Step 4.</li></ul></li></ul></li><li><strong>Receive Reply from Server:</strong><ul><li>If a reply is received before timeout, receive the status code and result.</li></ul></li><li><strong>Turn Off Timer:</strong><ul><li>Stop the timer.</li></ul></li><li><strong>Process Server Response:</strong><ul><li>If the status code is <code>200</code>, display &#x201C;Result is {result}&#x201D;.</li><li>For other status codes, display &#x201C;Error {status_code}: {description}&#x201D;.</li></ul></li><li><strong>Close the Socket:</strong><ul><li>Close the UDP socket.</li></ul></li><li><strong>Repeat for Additional Requests:</strong><ul><li>Repeat steps 2-10 six more times, processing a total of seven lines from the input file.</li></ul></li><li><strong>Stop the Program:</strong><ul><li>Terminate the client program.</li></ul></li></ol>
<hr>
<p>Reference:Prof. <a href="https://www.cics.umass.edu/people/kermani-parviz?ref=ilmincho.me">Parviz Kermani</a></p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Patient Tracker System]]></title><description><![CDATA[<hr>
<h3 id="2023-fall-team-project-elitekoders"><strong><em>2023 Fall Team Project_ </em></strong>EliteKoders</h3>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/Patient-Tracker-System?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/Patient-Tracker-System</div><div class="kg-bookmark-description">Contribute to IlMinCho/Patient-Tracker-System development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/9d9045edbfa9a53d663276b7ba83d55647d1084652f3237d5c7a7ea5c342f141/IlMinCho/Patient-Tracker-System" alt></div></a></figure>
<p>Team Member: <a href="https://github.com/IlMinCho?ref=ilmincho.me">Ilmin Cho</a>, <a href="https://github.com/kunalkumar168?ref=ilmincho.me">Kunal Kumar</a>, <a href="https://github.com/Msushi?ref=ilmincho.me">Matthew Lyons</a>, <a href="https://github.com/eshag06?ref=ilmincho.me">Esha Sangramsinh Ghorpade</a></p>
<hr>
<p><strong>Presentation Video</strong>:</p>
<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/0jL7RjzliDg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="CS520 Fall23 EliteKoders Final Presentation"></iframe></figure>
<hr>
<p><strong>Overview: </strong>The Patient Tracker project is designed to revolutionize patient data management in healthcare facilities.</p>]]></description><link>https://ilmincho.me/patient-tracker-system/</link><guid isPermaLink="false">6590748b5724f0047b5e6fdc</guid><category><![CDATA[Projects]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Sat, 30 Dec 2023 19:51:11 GMT</pubDate><media:content url="https://ilmincho.me/content/images/2023/12/screnn.gif" medium="image"/><content:encoded><![CDATA[<hr>
<h3 id="2023-fall-team-project-elitekoders"><strong><em>2023 Fall Team Project_ </em></strong>EliteKoders</h3>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/Patient-Tracker-System?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/Patient-Tracker-System</div><div class="kg-bookmark-description">Contribute to IlMinCho/Patient-Tracker-System development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Patient Tracker System"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/9d9045edbfa9a53d663276b7ba83d55647d1084652f3237d5c7a7ea5c342f141/IlMinCho/Patient-Tracker-System" alt="Patient Tracker System"></div></a></figure>
<img src="https://ilmincho.me/content/images/2023/12/screnn.gif" alt="Patient Tracker System"><p>Team Member: <a href="https://github.com/IlMinCho?ref=ilmincho.me">Ilmin Cho</a>, <a href="https://github.com/kunalkumar168?ref=ilmincho.me">Kunal Kumar</a>, <a href="https://github.com/Msushi?ref=ilmincho.me">Matthew Lyons</a>, <a href="https://github.com/eshag06?ref=ilmincho.me">Esha Sangramsinh Ghorpade</a></p>
<hr>
<p><strong>Presentation Video</strong>:</p>
<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/0jL7RjzliDg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="CS520 Fall23 EliteKoders Final Presentation"></iframe></figure>
<hr>
<p><strong>Overview: </strong>The Patient Tracker project is designed to revolutionize patient data management in healthcare facilities. Its primary goal is to create a digital platform for efficient handling of medical records, treatment histories, prescriptions, and appointments. This centralization aims to improve patient care quality and operational efficiency in healthcare settings. By digitizing records, the project seeks to streamline administrative processes, ensure robust data security, and make comprehensive patient information easily accessible to healthcare professionals.</p>
<p>Healthcare providers and administrative staff benefit from simplified management of patient records and streamlined administrative tasks such as scheduling and billing. Patients, on the other hand, enjoy enhanced healthcare services, better communication, and convenient access to their medical records. Transitioning to this digital system addresses the challenges of manual paperwork, including potential delays and errors, by providing real-time access to updated data. This facilitates faster decision-making, coordinated care among providers, and compliance with privacy regulations like HIPAA. Ultimately, the Patient Tracker project aims to foster a more efficient, secure, and patient-centric healthcare environment.</p>
<p><strong>Features: </strong></p>
<p>1.&#xA0;&#xA0;&#xA0;&#xA0; <strong>User Authentication:</strong> Secure login/logout mechanism ensuring enhanced security.</p>
<p>2.&#xA0;&#xA0;&#xA0;&#xA0; <strong>Profile Management</strong>: Tailored profiles for both doctors and patients.</p>
<p>3.&#xA0;&#xA0;&#xA0;&#xA0; <strong>Prescription Management</strong>: Functionality for doctors to modify and update prescriptions.</p>
<p>4.&#xA0;&#xA0;&#xA0;&#xA0; <strong>Customizable Dashboard</strong>: Separate landing page for patients and doctors showing its profile, appointments, etc.</p>
<p>5.&#xA0;&#xA0;&#xA0;&#xA0; <strong>Data Visualization</strong>: Insightful graphical representations of patient data. Example - Patients can add health reports (in pdf, jpg) which can be shared with doctors.</p>
<hr>
<p><strong>Functional Requirements (Use cases) </strong></p>
<figure class="kg-card kg-image-card"><img src="https://lh7-us.googleusercontent.com/ZzHuhvXGoz_dJGoFktQqskOnCudbj7D_OVo8GoPyEi-yGmZD3iXUi-cygUtD1GpgKKKZfb2JrU3ad-neI-ycASaSJGQyYpeAm_xnvsMA9QEe8LRD2OSL6a_B1Gw2LQhpUkuwc0Y3Gt8UUCFfpN3MTDTfbQ=s2048" class="kg-image" alt="Patient Tracker System" loading="lazy" width="891" height="462"></figure>
<p><strong>1.</strong> &#xA0; &#xA0; <strong>As a doctor, I want to view the list of patients scheduled for the day so that I can prepare for the consultations.</strong></p>
<p><strong>2.</strong> &#xA0; &#xA0; <strong>As a doctor, I want to view a patient&apos;s medical records before the consultation so that I can provide the best care possible.</strong></p>
<p><strong>3.</strong> &#xA0; &#xA0; <strong>As a doctor, I want to upload prescriptions electronically on the server so that the patients can check it.</strong></p>
<p><strong>4.</strong>&#xA0; &#xA0; &#xA0; <strong>As a doctor, I want to create and modify treatment plans for my patients so that they have a structured approach to their recovery.</strong></p>
<p><strong>5.</strong>&#xA0; &#xA0; &#xA0;<strong>As a doctor, I want to set my available hours and days so that patients can book appointments when I&apos;m available.&#xA0;</strong></p>
<p><strong>6.</strong> &#xA0; &#xA0; <strong>As a doctor, I accept appointments requested by patients and meet with them to conduct consultations.</strong></p>
<p><strong>7.</strong> &#xA0; &#xA0; <strong>As a patient, I want to book an appointment with my doctor so that I can discuss my health concerns</strong></p>
<p><strong>8.</strong> &#xA0; &#xA0; <strong>As a patient, I want to cancel my appointment if I am unable to attend so that the slot can be used by someone else.</strong></p>
<p><strong>9.</strong> &#xA0; &#xA0; <strong>As a patient, I want to view and download my prescriptions so that I can acquire the necessary medications.</strong></p>
<p><strong>10.</strong>&#xA0; <strong>As a patient, I want to update my health status and information so that my doctor can check.</strong></p>
<p><strong>11. As a user, I want to sign up to the website as a doctor or patient.</strong></p>
<p><strong>12. As a user, I want to log in to the website as a doctor or as a patient.</strong></p>
<p>Detailed user story document<strong>: <a href="https://docs.google.com/document/d/1vrmnM1z2uqO-OHWNotnq2yvDB7C41wfAYM4kzMxOkrw/edit?usp=sharing&amp;ref=ilmincho.me">https://docs.google.com/document/d/1vrmnM1z2uqO-OHWNotnq2yvDB7C41wfAYM4kzMxOkrw/edit?usp=sharing</a></strong></p>
<hr>
<p><strong>Non-Functional Requirements</strong></p>
<ol><li><strong>Security</strong>: The system should ensure robust data encryption, guaranteeing the secure transmission and storage of patient data. Regular vulnerability assessments and penetration tests should be conducted to safeguard against potential threats. We have used user authentication to ensure security.</li><li><strong>Understandability</strong>: The interface should be intuitive and user-friendly, allowing users, even those with minimal technical proficiency, to easily navigate and understand the system&apos;s features. We have committed the changes with proper comments, we have documented the readme files with proper instructions to ensure understandability.</li><li><strong>Performance</strong>: The system should exhibit quick response times, ensuring users can retrieve and input data efficiently. Optimal server performance and minimal downtime are imperative to guarantee smooth operations. We will work on caching and sharding whichever applicable to boost performance.</li><li><strong>Scalability</strong>: As user numbers grow, the system should be able to handle an increasing amount of data and user requests without compromising performance or security. We will work on more generic design to make the system more scalable.</li><li><strong>Maintainability</strong>: Updates, bug fixes, and system improvements should be feasible without significant downtime, ensuring continuity of service for users. We will work on testing and buggy free code to support maintainability.</li></ol>
<hr>
<p><strong>Application</strong></p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-36.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1002" height="501" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-36.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-36.png 1000w, https://ilmincho.me/content/images/2023/12/image-36.png 1002w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Login Page (Covers Use Case #11)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-37.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1056" height="531" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-37.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-37.png 1000w, https://ilmincho.me/content/images/2023/12/image-37.png 1056w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Register Page (Covers Use Case #11)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-38.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1053" height="529" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-38.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-38.png 1000w, https://ilmincho.me/content/images/2023/12/image-38.png 1053w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Register Page - Patient (Covers Use Case #11)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-39.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1055" height="531" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-39.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-39.png 1000w, https://ilmincho.me/content/images/2023/12/image-39.png 1055w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Register Page - Doctor (Covers Use Case #11)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-40.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1053" height="531" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-40.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-40.png 1000w, https://ilmincho.me/content/images/2023/12/image-40.png 1053w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard (Part of all patient&#x2019;s Use Cases)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-41.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="975" height="488" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-41.png 600w, https://ilmincho.me/content/images/2023/12/image-41.png 975w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - Search Doctor by filter (Covers Use Case #7)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-42.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1053" height="531" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-42.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-42.png 1000w, https://ilmincho.me/content/images/2023/12/image-42.png 1053w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - Book Appointment (share report too) (Covers Use Case #7)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-43.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="994" height="497" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-43.png 600w, https://ilmincho.me/content/images/2023/12/image-43.png 994w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - View Doctor Profile (Covers Use Case #7)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-44.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1007" height="503" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-44.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-44.png 1000w, https://ilmincho.me/content/images/2023/12/image-44.png 1007w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - Edit Appointment (Covers Use Case #8)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-45.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1012" height="506" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-45.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-45.png 1000w, https://ilmincho.me/content/images/2023/12/image-45.png 1012w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - View Prescription (Covers Use Case #9)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-46.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1009" height="504" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-46.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-46.png 1000w, https://ilmincho.me/content/images/2023/12/image-46.png 1009w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - Reports (Upload and History) (Covers Use Case #10)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-47.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1053" height="529" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-47.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-47.png 1000w, https://ilmincho.me/content/images/2023/12/image-47.png 1053w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - View Report File (Covers Use Case #10)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-48.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1028" height="518" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-48.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-48.png 1000w, https://ilmincho.me/content/images/2023/12/image-48.png 1028w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Patient Dashboard - Edit Profile (Covers Use Case #10)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-49.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1005" height="504" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-49.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-49.png 1000w, https://ilmincho.me/content/images/2023/12/image-49.png 1005w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Doctor Dashboard (Covers Use Case #1 and #6)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-50.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1021" height="512" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-50.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-50.png 1000w, https://ilmincho.me/content/images/2023/12/image-50.png 1021w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Doctor Dashboard - View Patient Profile (Covers Use Case #2)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-51.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1018" height="511" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-51.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-51.png 1000w, https://ilmincho.me/content/images/2023/12/image-51.png 1018w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Doctor Dashboard - Edit Patient&#x2019;s Prescription (Covers Use Case #3 and #4)</span></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-52.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1016" height="513" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-52.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-52.png 1000w, https://ilmincho.me/content/images/2023/12/image-52.png 1016w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Doctor Dashboard - Set Available Time (Covers Use Case #5)</span></figcaption></figure>
<hr>
<p><strong>Architecture Diagram</strong></p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2023/12/image-54.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1034" height="695" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-54.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-54.png 1000w, https://ilmincho.me/content/images/2023/12/image-54.png 1034w" sizes="(min-width: 720px) 720px"></figure>
<p><strong>Technology Stack with Justification</strong></p>
<p>A.&#xA0;&#xA0;&#xA0;&#xA0; <strong>Python</strong>: It is renowned for its simplicity and readability, which reduces the cost of program maintenance. It supports modules and packages, which encourages program modularity and code reuse.</p>
<p><em>Advantages</em>: Python has a vast ecosystem of libraries and frameworks that can be leveraged for various functionalities. It&apos;s also versatile and can be used for web development, data analysis, machine learning, automation, and more. This makes it a suitable choice for diverse project requirements.</p>
<p>B.&#xA0;&#xA0;&#xA0;&#xA0; <strong>Flask</strong>: We chose Flask for backend development due to its lightweight nature and flexibility in developing web applications. Flask provides the essentials to get a web application up and running without imposing a specific structure, which means more freedom in design and architecture. We are using RESTful APIs like GET and POST in Flask for client-server communication.</p>
<p><em>Advantages</em>: Flask is unobtrusive and gives developers more control over how they structure their application and which components they want to use. It&apos;s also easy to set up and can be extended with a wide variety of plugins.</p>
<p>C.&#xA0;&#xA0;&#xA0; <strong>Sqlite3</strong>: It is an embedded database, meaning it&apos;s serverless, zero-configuration, and transactional. For projects that don&apos;t require a full-fledged database system, Sqlite3 is a lightweight option.</p>
<p><em>Advantages</em>: Sqlite3 is self-contained, meaning there are no external dependencies. It&apos;s best suited for smaller applications, development, and testing, and can handle low to moderate traffic web applications. The footprint is minimal, and the setup is straightforward.</p>
<p>D.&#xA0;&#xA0;&#xA0; <strong>Anaconda</strong>: It is a distribution of Python and R for scientific computing and data science. We chose it to manage libraries and dependencies within our project and to maintain a consistent environment.</p>
<p><em>Advantages</em>: Anaconda simplifies package management and deployment. Its environment manager, Conda, allows for easy creation, sharing, and replication of environments, ensuring consistency across development, testing, and production stages.</p>
<p>E.&#xA0;&#xA0;&#xA0;&#xA0; <strong>HTML</strong>: It is the standard markup language for creating web pages. It&apos;s essential for any web application to structure and present content.</p>
<p><em>Advantages</em>: Being the backbone of web content, HTML is universally understood by web browsers. It allows for the creation of structured documents and is integral to web application development.</p>
<p>F.&#xA0;&#xA0;&#xA0;&#xA0; <strong>CSS</strong>: It is used to describe how HTML elements should be displayed on screen. It&apos;s vital for styling and designing the look and feel of the web application.</p>
<p><em>Advantages</em>: CSS separates content from presentation, allowing for flexibility in design without altering the underlying HTML. With CSS, developers can create responsive designs, ensuring the web application looks good on all devices.</p>
<p>G.&#xA0;&#xA0;&#xA0; <strong>Jinja</strong>: It is a Python template engine commonly used in web development. It enables dynamic content generation by replacing placeholders with actual values during rendering.</p>
<p><em>Advantages:</em> Template inheritance for code reusability, expression evaluation, filters and macros for enhanced functionality, and seamless integration with Python in frameworks like Flask. Jinja facilitates the creation of flexible and maintainable web applications.</p>
<p>H.&#xA0;&#xA0;&#xA0; <strong>Pytest</strong>: It is a widely-used testing framework for Python.</p>
<p><em>Advantages</em>: Its fixture system allows efficient setup and teardown of resources, and parameterized testing facilitates running the same test with different inputs. Pytest&apos;s powerful assertions, built-in test discovery, and seamless integration with other testing tools make it a versatile choice</p>
<p><strong>Data Model</strong></p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2023/12/image-53.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="1076" height="553" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-53.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-53.png 1000w, https://ilmincho.me/content/images/2023/12/image-53.png 1076w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Implementation</strong></p>
<p>We have followed the <strong>client-server design pattern</strong> methodology for this project. The client-server design pattern is a common architecture for networked applications. It involves clients, which request services, and servers, which provide those services. Clients initiate requests, and servers respond to those requests, allowing for efficient resource sharing, scalability, centralized control, and enhanced security. This model is widely used in various applications, such as web and email servers, to facilitate communication and data exchange over networks.</p>
<p><strong>Version Control and Collaboration</strong></p>
<p>We employed Git for version control in our project, adopting a feature-branch workflow to enable independent development of each feature. This approach facilitated organized coding and pull requests for code reviews before merging into the main branch, ensuring code quality and seamless integration. Our team maintained clear communication, minimizing conflicts during merges. When conflicts did arise, we promptly collaborated to resolve them, leveraging Git&apos;s version control capabilities. This disciplined process contributed to an efficient and streamlined development workflow.</p>
<p><strong>Coding Standards and Practices</strong></p>
<p>Our team prioritized code quality by following the PEP 8 style guide for Python and implementing best practices. We emphasized consistent naming conventions, indentation, and modular code organization. Documentation played a crucial role, with descriptive comments at various levels to enhance code understanding. Effective version control practices, including detailed commit messages and regular code reviews, contributed to a maintainable and collaborative codebase. Overall, our approach aimed at fostering readability, maintainability, and a positive development environment. We created different folders for different functionalities to support modularity. All the frontend html files are stored under Template folder, the main flask&#xA0; application, database and testing module are outside of all folders, all the tables of database like Patients, Doctors, Appointments, etc. are under models, uploaded reports are saved under files folders. Furthermore, we have added docstrings and comments for Understandability of the code. Also, we have also restructured our README file by adding explanations of all the use cases, installation guidelines, collaborators details &amp; presentation video.</p>
<hr>
<p><strong>Data Security</strong></p>
<ol><li><strong>Description of the potential threats and vulnerabilities</strong> - Potential threats may include unauthorized access to patient data, either through external cyberattacks or internal security breaches. Vulnerabilities could arise from weaknesses in the application&apos;s authentication system, insufficient data encryption, or inadequate security measures in the database storage and transmission of data.</li><li><strong>Measures taken to prevent unauthorized data access</strong> - To mitigate the risks of unauthorized data access, we used a user authorization mechanism for a secure login which will enable only one user to login and it can&#x2019;t access other patients details.&#xA0; Moreover, we have used encrypted passwords to map user passwords to a hashed password. Hence, anyone with an encrypted password can&#x2019;t access the system. Therefore, if there is a security threat to the database and patient sensitive information is leaked, then one cannot login into the system until we have encoded the original password which was never stored.</li></ol>
<p><strong>HIPAA Compliance (in case of Patient Tracker)</strong></p>
<ol><li><strong>Explanation of the Health Insurance Portability and Accountability Act (HIPAA) and its relevance to the project</strong> - HIPAA is a federal law in the United States that sets the standards for protecting sensitive patient data. It aims to ensure the confidentiality, integrity, and availability of electronic protected health information (ePHI). Compliance with HIPAA is crucial to safeguard patient privacy and prevent unauthorized disclosure of sensitive medical information. With respect to this project, the patient&apos;s medical history or current medications should not be leaked to any other patients or to another doctor who is not relevant for given symptoms.</li><li><strong>Steps and protocols followed to ensure the system&apos;s compliance with HIPAA</strong> - To ensure compliance with HIPAA, we have implemented data encryption practices, establish stringent access controls, and enforce thorough audit trails to monitor data access and usage. Additionally, we are following policies (as explained before) for securely managing and disposing of patient records, as outlined in the HIPAA guidelines.</li></ol>
<hr>
<p><strong>Testing</strong></p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2023/12/image-57.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="950" height="900" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-57.png 600w, https://ilmincho.me/content/images/2023/12/image-57.png 950w" sizes="(min-width: 720px) 720px"></figure>
<table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" width="682" style="border-collapse:collapse;mso-table-layout-alt:fixed;border:none;
 mso-border-alt:solid black 1.0pt;mso-yfti-tbllook:1536;mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-border-insideh:1.0pt solid black;mso-border-insidev:1.0pt solid black">
 <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" align="center" style="text-align:center;line-height:normal;
  mso-pagination:none;border:none;mso-padding-alt:31.0pt 31.0pt 31.0pt 31.0pt;
  mso-border-shadow:yes"><b style="mso-bidi-font-weight:normal"><span lang="EN">Test<o:p></o:p></span></b></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border:solid black 1.0pt;
  border-left:none;mso-border-left-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" align="center" style="text-align:center;line-height:normal;
  mso-pagination:none;border:none;mso-padding-alt:31.0pt 31.0pt 31.0pt 31.0pt;
  mso-border-shadow:yes"><b style="mso-bidi-font-weight:normal"><span lang="EN">Purpose<o:p></o:p></span></b></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border:solid black 1.0pt;
  border-left:none;mso-border-left-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" align="center" style="text-align:center;line-height:normal;
  mso-pagination:none;border:none;mso-padding-alt:31.0pt 31.0pt 31.0pt 31.0pt;
  mso-border-shadow:yes"><b style="mso-bidi-font-weight:normal"><span lang="EN">Coverage<o:p></o:p></span></b></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:1;height:33.8pt">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt;
  height:33.8pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">test_registration<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt;height:33.8pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">Validates the registration process for both patients and doctors.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt;height:33.8pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">Patient and Doctor registration, handling invalid inputs.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:2">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_login<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Verifies the login process for both patients and doctors.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Authentication module, handling valid and invalid credentials.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:3">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_logout<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Checks the ability to log out a user.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Session management and logout functionality.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:4">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_landing_page<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the content and structure of the landing page.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Landing page rendering and content verification.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:5">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_dashboard<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Ensures the correct rendering of patient and doctor dashboards.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Dashboard rendering and user-specific content.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:6">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_doctor_reviews_patient_info<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Verifies the doctor&apos;s ability to review patient information.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Patient information retrieval and display.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:7">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_set_availability<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Checks the doctor&apos;s ability to set availability for appointments.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Doctor availability management.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:8">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">test_edit_health_records<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">Validates the patient&apos;s ability to edit health records.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">Patient health record editing and database interaction.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:9;height:38.15pt">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt;
  height:38.15pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">test_view_patient_reports<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt;height:38.15pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">Tests the doctor&apos;s ability to view patient reports.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt;height:38.15pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:normal"><span lang="EN">Patient report retrieval and display.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:10">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_get_available_times_for_date<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Check the availability of a doctor for a specific date.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Doctor availability for appointment scheduling.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:11">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_create_appointment<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the creation of a new appointment.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Appointment scheduling and database interaction.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:12">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_cancel_appointment<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Ensures the correct cancellation of a patient&apos;s appointment.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Appointment cancellation and database interaction.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:13">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_get_prescription<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the patient&apos;s ability to retrieve prescriptions.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Prescription retrieval and display.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:14">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_get_patient_reports<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Checks the patient&apos;s ability to retrieve medical reports.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Patient report retrieval and display.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:15">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_share_reports_with_doctors<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Tests the patient&apos;s ability to share reports with doctors.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Report sharing and database interaction.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:16">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_get_id<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Checks the retrieval of the maximum ID for report files.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Report file ID retrieval.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:17">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>test_create_report<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the creation of a new medical report.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>Report creation and database
  interaction.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:18">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_getdoclist <o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Checks the retrieval of a list of doctors based on search criteria.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Doctor list retrieval and search functionality.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:19">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_getallappointments<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the retrieval of all appointments for a doctor.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Doctor appointment list retrieval.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:20">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>test_editpatient<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>Checks the doctor&apos;s ability to
  edit patient details.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Patient details editing and database interaction.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:21">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>test_pendingrequest<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the handling of pending appointment requests.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Appointment request handling by doctors.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:22">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>test_doctor_availability<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>Checks the setting and
  retrieval of doctor availability.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Doctor availability management.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:23">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>test_register_route and
  test_register_post<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the rendering and submission of the registration form.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Registration route functionality.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:24">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_book_appointment_route<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Tests the rendering of the book appointment route.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Book appointment route rendering.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:25">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_book_doctor_route<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the booking of an appointment with a doctor.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Appointment booking functionality.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:26">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_patient_prescription_route<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Tests the rendering of the patient prescription route.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Prescription route rendering.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:27">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_cancel_appointment_route<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the rendering of the cancel appointment route.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Cancel appointment route rendering.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:28">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_edit_appointment_route and test_edit_appointment_post<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Tests the rendering and submission of the edit appointment form.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Edit appointment route functionality.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:29">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_pending_request<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the handling of pending appointment requests.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Pending appointment request handling.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:30">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_edit_patient<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Checks the doctor&apos;s ability to edit patient details.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Patient details editing and database interaction.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:31">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>test_upload_reports_route and
  test_delete_report_route<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>Tests the rendering and
  deletion of medical reports.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Report upload and deletion functionality.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:32">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_serve_report<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Test the function which fetches report from local and send back using
  rendering<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Report fetch and display functionality<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:33">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_doctor_info<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">To check if the data stored for the Doctor is correct.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Fetches doctor profile data functionality<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:34">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">test_get_doctor_availability_route<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Validates the rendering of the doctor availability route.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Doctor availability route rendering.<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="mso-yfti-irow:35;mso-yfti-lastrow:yes">
  <td width="206" valign="top" style="width:154.5pt;border:solid black 1.0pt;
  border-top:none;mso-border-top-alt:solid black 1.0pt;padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>test_deleteData<o:p></o:p></span></p>
  </td>
  <td width="245" valign="top" style="width:183.75pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN">Cleans up the test data created during testing.<o:p></o:p></span></p>
  </td>
  <td width="231" valign="top" style="width:173.25pt;border-top:none;border-left:
  none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt;
  mso-border-top-alt:solid black 1.0pt;mso-border-left-alt:solid black 1.0pt;
  padding:5.0pt 5.0pt 5.0pt 5.0pt">
  <p class="MsoNormal" style="margin-bottom:8.0pt;line-height:107%"><span lang="EN"><span style="mso-spacerun:yes">&#xA0;</span>Data deletion and cleanup.<o:p></o:p></span></p>
  </td>
 </tr>
</tbody></table>
<p>This comprehensive unit test suite ensures that critical aspects of the Patient Tracker System are thoroughly tested, contributing to the overall reliability and functionality of the system. Our test cases cover the integration testing as different units or components interact and work together. From the image shared above we can see how unit tests, integration tests and systems show their respective coverage and passed status. The achieved test coverage of 94% reflects a robust testing approach.</p>
<hr>
<p>&#x25CF;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <strong>Performance</strong>: To evaluate our system&#x2019;s performance, we tested the response speed of some of our crucial API endpoints using Postman. We tested our login, book appointment, and doctor search endpoints, which all had incredibly fast response times of 11ms, 11ms, and 5ms respectively.</p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-58.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="994" height="139" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-58.png 600w, https://ilmincho.me/content/images/2023/12/image-58.png 994w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Performance</strong></b></figcaption></figure>
<p>&#x25CF;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <strong>Scalability</strong>: To evaluate our system&#x2019;s scalability, we filled our database with dummy accounts (approximately 1,000 doctors and 10,000 patients), and re-performed our performance tests while running Locust to simulate approximately 100 concurrent users. Our login, doctor search, and book appointment endpoints executed in 123ms, 17ms, and 6ms, which were acceptable results.</p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-60.png" class="kg-image" alt="Patient Tracker System" loading="lazy" width="980" height="146" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-60.png 600w, https://ilmincho.me/content/images/2023/12/image-60.png 980w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Scalability</strong></b></figcaption></figure>
<p>&#x25CF;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <strong>Maintainability</strong>: We have fulfilled maintainability by creating a well-organized and crafted code base. Despite programming in Python, we created an OOP design by designating classes for our data tables (patients, doctors, appointments, etc.) which allows for modular design. API endpoints are sectioned off relative to their function, with comments on the more nuanced functions. This allows for the system to be debugged and diagnosed easily as well as add new features quickly.</p>
<hr>
<p><strong>Challenges and Limitations</strong></p>
<p><em>Integration Challenges</em>: While we successfully addressed many challenges, integrating the new features into the existing system presented some difficulties. The need for substantial modifications to the codebase, as well as potential conflicts with the current functionalities, posed integration challenges. Ensuring a seamless transition without disrupting existing operations required careful planning and execution.</p>
<p><em>Time Constraints</em>: Time constraints were a significant limitation throughout the project. Although we successfully delivered a functional system, certain features or optimizations might not have been fully realized due to the restricted time frame. This limitation might have implications for the scalability and robustness of the system under more extensive usage.</p>
<p><em>User Surveys for Understandability</em>: Although attempts were made to evaluate the understandability of the software, the absence of user surveys is a limitation. Conducting comprehensive user surveys would have provided more in-depth insights into user experiences and potential barriers to understanding the system.</p>
<p><em>Performance Metrics under Real-world Load</em>: While performance tests under simulated load conditions were conducted, the real-world performance of the system under varying loads remains an open question. Actual usage patterns might differ from simulated scenarios, and further analysis under real-world conditions could reveal additional performance considerations</p>
<p><strong>Future Development Plans</strong></p>
<p><em>Enhanced Performance Monitoring</em>: To address potential performance bottlenecks and ensure optimal response times under varying loads, we plan to implement enhanced performance monitoring. Real-time monitoring tools can help identify and address issues promptly, ensuring a consistently high level of service.</p>
<p><em>User Feedback Mechanism</em>: Incorporating a systematic user feedback mechanism, such as user surveys and feedback forms, will be a priority. This will provide valuable insights into user experiences, allowing for continuous improvements in usability and understandability.</p>
<p><em>AI-driven Personalization</em>: Considering the project&apos;s nature as a patient tracker system, integrating AI-driven features for personalized patient care could be a future development. Machine learning algorithms could assist doctors in predicting patient needs and tailoring treatment plans accordingly. ML algorithms can predict patient health trends, and optimize appointment scheduling dynamically. Data visualization tools could offer insights into health trends, and continuous learning from new data will ensure the system evolves with changing healthcare dynamics.</p>
<p><em>Integration with Health Information Systems</em>: To further enhance the project&apos;s scope and utility, integration with larger health information systems or electronic health record (EHR) systems could be explored. This could facilitate seamless data sharing and collaboration across different healthcare platforms.</p>
<hr>
<p><strong>Ethical and Societal Implications</strong></p>
<p>The Patient Tracker system, while aiming to enhance healthcare efficiency and patient care, presents ethical considerations related to data privacy and security. Safeguarding patient information is paramount, necessitating stringent adherence to ethical standards and regulatory requirements like HIPAA. During development, the team addressed concerns regarding the potential misuse or unauthorized access to sensitive medical records by encrypting passwords of the users, sharing only relevant information to patients or doctors like patients doesn&#x2019;t share all the reports, patients or doctors can select what they want to view in their profile, each user&#x2019;s data are in separate table in database providing isolation etc. Ensuring transparency in data handling practices and obtaining informed consent from patients are essential ethical considerations. Additionally, the system is designed to minimize the risk of errors or inaccuracies in patient records, as such discrepancies could have serious consequences for patient care. Striking a balance between technological advancements and ethical responsibility is crucial to building trust among healthcare professionals and patients. Overall, the ethical implications revolve around protecting patient confidentiality, maintaining data integrity, and fostering a system that prioritizes the well-being and trust of all stakeholders in the healthcare ecosystem.</p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Mock White Paper: How will Metaverse, a new virtual digital platform, develop as an educational medium?]]></title><description><![CDATA[<hr>
<p><strong>What is White Paper: </strong>A white paper is a comprehensive report or guide that informs readers concisely about a complex issue and presents the issuing body&apos;s philosophy on the matter. It is meant to help readers understand an issue, solve a problem, or make a decision. White papers</p>]]></description><link>https://ilmincho.me/mock-white-paper/</link><guid isPermaLink="false">6591a74e007b9604731610cd</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Wed, 20 Dec 2023 17:37:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1657734240363-356201c49b15?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2Nnx8TWV0YSUyMHZlcnNlfGVufDB8fHx8MTcwNDA0NTQ5N3ww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<img src="https://images.unsplash.com/photo-1657734240363-356201c49b15?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2Nnx8TWV0YSUyMHZlcnNlfGVufDB8fHx8MTcwNDA0NTQ5N3ww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Mock White Paper: How will Metaverse, a new virtual digital platform, develop as an educational medium?"><p><strong>What is White Paper: </strong>A white paper is a comprehensive report or guide that informs readers concisely about a complex issue and presents the issuing body&apos;s philosophy on the matter. It is meant to help readers understand an issue, solve a problem, or make a decision. White papers are commonly used in policy, business, and technical fields.</p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/Screenshot-2024-01-01-011711-1.png" class="kg-image" alt="Mock White Paper: How will Metaverse, a new virtual digital platform, develop as an educational medium?" loading="lazy" width="1441" height="812" srcset="https://ilmincho.me/content/images/size/w600/2024/01/Screenshot-2024-01-01-011711-1.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/Screenshot-2024-01-01-011711-1.png 1000w, https://ilmincho.me/content/images/2024/01/Screenshot-2024-01-01-011711-1.png 1441w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Common Resource Types</span></figcaption></figure>
<p>Most original research results in computer sciences are&#xA0;published in conference proceedings.&#xA0;</p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-3.png" class="kg-image" alt="Mock White Paper: How will Metaverse, a new virtual digital platform, develop as an educational medium?" loading="lazy" width="970" height="735" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-3.png 600w, https://ilmincho.me/content/images/2024/01/image-3.png 970w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Anatomy of a Research Paper</span></figcaption></figure>
<p>Most research papers follow a standard structure, abbreviated IMRaD: Introduction, Methods, Results, and Discussion. This structure is helpful for understanding and navigating the article.&#xA0;</p>
<hr>
<h2 id="how-will-metaverse-a-new-virtual-digital-platform-develop-as-an-educational-medium"><strong>How will Metaverse, a new virtual digital platform, develop as an educational medium?</strong></h2>
<p><br><strong>Research Methods</strong><br>	My research methodology prioritized peer-reviewed articles to ensure reliability, utilizing a diverse array of resources including the UMass Library website, academic journals, industry reports, and comprehensive online databases like Google Scholar. Initially, my focus was on the technical aspects of the metaverse. However, during the course of my research, I identified a significant intersection between the metaverse and educational studies. This discovery led me to delve into topics pertaining to the integration of the metaverse in educational settings, examining its evolving role in educational technology and its potential to influence future learning paradigms. Key subtopics included the technological advancements in Virtual Reality (VR) and Augmented Reality (AR), as well as the challenges and opportunities of implementing the metaverse in diverse educational environments. My search strategy employed terms such as &apos;metaverse in education,&apos; &apos;virtual reality in learning,&apos; and &apos;digital platforms in education,&apos; enabling a comprehensive exploration driven by emerging trends and insights. This approach facilitated a nuanced understanding of the transformative role of the metaverse in reshaping educational landscapes.</p>
<p><br><strong>What is Metaverse?</strong><br>	The Metaverse, bridging the virtual and real realms, represents a &apos;third space&apos; that transcends traditional environments, a concept that has evolved significantly in recent years [3, 4]. Markedly, the Metaverse, as a transformative realm, integrates advanced technologies like virtual reality, augmented reality, blockchain, and the Internet of Things, indicating a paradigm shift from theoretical ideas to tangible applications across diverse sectors, notably education [3, 5, 7]. Additionally, the Metaverse is characterized by its virtual nature and immersive technology, fostering a dynamic digital society with its own economy and social interactions [5]. Nonetheless, the complexity and evolving nature of the Metaverse is highlighted by the absence of a universally accepted definition, reflecting a wide spectrum of interpretations about its potential and scope [7]. Furthermore, the development of the Metaverse is heavily influenced by the rapid advancement of supporting technologies, crucial for crafting immersive and interconnected virtual experiences [5, 7]. Consequently, as the Metaverse evolves, it presents both challenges and opportunities, particularly in reshaping educational paradigms where it offers novel avenues for interactive and immersive learning [1, 3, 7]. This ongoing discourse around the Metaverse underscores its potential as a groundbreaking platform, yet simultaneously calls for deeper understanding and broader consensus within the academic and technological communities [5, 7]. Possibilities and Values of the Educational Part of the Metaverse The Metaverse in education represents a significant paradigm shift, offering immersive and interactive experiences that transcend traditional classrooms [3]. Furthermore, the integration of virtual reality (VR) and augmented reality (AR) in the Metaverse signifies a transition from theoretical concepts to practical applications in education [7]. Additionally, the Metaverse fosters global interconnectedness, enhancing collaborative learning opportunities in the educational sector [1]. Moreover, the Metaverse promises personalized and adaptive learning experiences, reflecting its potential to revolutionize educational paradigms [2]. Also, the Metaverse&apos;s evolution is marked by blending virtuality and immersion, offering novel avenues for interactive learning [5]. Consequently, as the Metaverse evolves, it presents both challenges and opportunities in reshaping educational paradigms [1, 3, 7]. Therefore, this ongoing discourse around the Metaverse underscores its potential as a transformative platform, necessitating deeper understanding and broader consensus within academic and technological communities [5, 7].</p>
<p><br><strong>Educational Use Cases for Metaverse</strong><br>	The Metaverse&apos;s role in education is marked by its diverse and innovative applications, significantly transforming traditional learning methods [3, 5]. For instance, the Metaverse offers immersive environments in language learning that enhance linguistic skills through realistic, interactive practice, providing a new dimension to language acquisition [1]. Furthermore, in STEM education, the Metaverse facilitates experiential learning via virtual laboratories and simulations, allowing students to explore scientific concepts in a controlled, risk-free environment, enhancing their comprehension and engagement [6, 7]. Additionally, the Metaverse enables unique learning experiences such as virtual field trips and cultural immersions, broadening the scope of education beyond the confines of physical classrooms and offering a broader, more comprehensive understanding of various subjects [3, 4, 5]. These varied applications underscore the Metaverse&apos;s potential to enrich educational experiences, demonstrating its transformative impact across different disciplines [5]. The versatility of the Metaverse in enhancing traditional learning methods, and providing more engaging and diverse educational experiences, is a testament to its potential to revolutionize the educational sector [5].</p>
<p><br><strong>Limitations of the Current Educational Use of Metaverse</strong><br>	While the Metaverse offers vast potential for education, integrating it into educational systems faces technical and pedagogical challenges [1, 2, 3, 4, 5, 6, 7]. Particularly, technical constraints such as the need for advanced hardware and reliable internet significantly limit accessibility, especially in less technologically advanced areas [2, 5]. Moreover, the digital divide, stemming from these technical constraints, poses a major barrier to the widespread adoption of the Metaverse in education [2, 3]. Additionally, the absence of tailored pedagogical models for Metaverse-based learning complicates its integration into current educational frameworks [6, 7]. Consequently, the lack of such models hinders the effective incorporation and application of the Metaverse in education [6, 7]. Furthermore, ethical concerns, including issues of data privacy and the potential for misuse of immersive technology, necessitate robust governance and safety measures [1, 4]. These ethical issues require careful management to ensure a safe and responsible learning environment within Metaverse-utilizing educational settings [1, 4]. Therefore, addressing these challenges is crucial for leveraging the full capabilities of the Metaverse in education and necessitates collaborative efforts from educators, technologists, and policymakers [1, 2, 3, 4, 5, 6, 7]. Ultimately, overcoming these obstacles is key to harnessing the transformative power of the Metaverse in the educational sector effectively [1, 2, 3, 4, 5, 6, 7].</p>
<p><br><strong>Conclusion</strong><br>	The exploration of the Metaverse as an educational medium reveals its vast potential to redefine the landscape of learning. Bridging virtual and real realms, the Metaverse stands as a pioneering &apos;third space&apos;, offering immersive, interactive experiences that surpass the limitations of traditional classrooms. Its integration of VR and AR signifies a leap from theoretical constructs to practical educational applications, fostering global interconnectedness and personalized learning experiences. However, this digital platform&apos;s evolution also brings challenges, particularly in technical and pedagogical integration, necessitating robust governance and collaborative efforts across educational and technological sectors. In conclusion, while the Metaverse presents technical and ethical complexities, its transformative impact on education is undeniable, offering innovative avenues for interactive and immersive learning that could revolutionize educational paradigms. The need for deeper understanding and consensus among academics and technologists is crucial as we navigate this uncharted digital terrain in education.</p>
<hr>
<p><strong>Works Cited</strong><br>[1] Andrea Antonio Cantone, Rita Francese, Raffaele Sais, Otino Pio Santosuosso, Aurelio Sepe, Simone Spera, Genoveffa Tortora, and Giuliana Vitiello. 2023. Contextualized Experiential Language Learning in the Metaverse. In Proceedings of the 15th Biannual Conference of the Italian SIGCHI Chapter (CHItaly &apos;23). Association for Computing Machinery, New York, NY, USA, Article 20, 1&#x2013;7. <a href="https://doi-org.silk.library.umass.edu/10.1145/3605390.3605395?ref=ilmincho.me">https://doi-org.silk.library.umass.edu/10.1145/3605390.3605395</a></p>
<p><br>[2] Clegg, N. 2023. How the Metaverse Can Transform Education. Medium. Available: <a href="https://nickclegg.medium.com/how-the-metaverse-can-transform-education-20ed9d355b5f?ref=ilmincho.me">https://nickclegg.medium.com/how-the-metaverse-can-transform-education-20ed9d355b5f</a></p>
<p><br>[3] Hirsh-Pasek, K., Zosh, J. M., Golinkoff, R. M., Gray, J. H., Robb, M. B., and Kaufman, J. 2023. A whole new world: Education meets the metaverse. Brookings. Available: <a href="https://www.brookings.edu/articles/a-whole-new-world-education-meets-the-metaverse/?ref=ilmincho.me">https://www.brookings.edu/articles/a-whole-new-world-education-meets-the-metaverse/</a></p>
<p><br>[4] Jiangnan Xu, Konstantinos Papangelis, John Dunham, Jorge Goncalves, Nicolas James LaLone, Alan Chamberlain, Ioanna Lykourentzou, Federica L Vinella, and David I Schwartz. 2022. Metaverse: The Vision for the Future. In Extended Abstracts of the 2022 CHI Conference on Human Factors in Computing Systems (CHI EA &apos;22). Association for Computing Machinery, New York, NY, USA, Article 167, 1&#x2013;3. <a href="https://doi-org.silk.library.umass.edu/10.1145/3491101.3516399?ref=ilmincho.me">https://doi-org.silk.library.umass.edu/10.1145/3491101.3516399</a></p>
<p><br>[5] Linlu Weng, Zhengkai Wei, Fanbo Li, and Fat Iam Lam. 2023. Research on the innovative integration application of metaverse and education. In Proceedings of the 9th International Conference on Education and Training Technologies (ICETT &apos;23). Association for Computing Machinery, New York, NY, USA, Article 18, 1&#x2013;6. <a href="https://doi-org.silk.library.umass.edu/10.1145/3599640.3599660?ref=ilmincho.me">https://doi-org.silk.library.umass.edu/10.1145/3599640.3599660</a></p>
<p><br>[6] Kun Yue. 2022. Breaking down the Barrier between Teachers and Students by Using Metaverse Technology in Education: Based on A Survey and Analysis of Shenzhen City, China. In Proceedings of the 2022 13th International Conference on E-Education, E-Business, E-Management, and E-Learning (IC4E &apos;22). Association for Computing Machinery, New York, NY, USA, 40&#x2013;44. <a href="https://doi-org.silk.library.umass.edu/10.1145/3514262.3514345?ref=ilmincho.me">https://doi-org.silk.library.umass.edu/10.1145/3514262.3514345</a></p>
<p><br>[7] Lijun Zhao. 2023. Study on the Recent Development of Metaverse Application in College Teaching. In Proceedings of the 2023 8th International Conference on Distance Education and Learning (ICDEL &apos;23). Association for Computing Machinery, New York, NY, USA, 30&#x2013;35. <a href="https://doi-org.silk.library.umass.edu/10.1145/3606094.3606141?ref=ilmincho.me">https://doi org.silk.library.umass.edu/10.1145/3606094.3606141</a></p>
<hr>
<p><strong>Reflection</strong></p>
<p>I recently undertook a week-long endeavor to research and write about an innovative topic in the realm of new technologies. The focus of my exploration was a specific and cutting-edge area, which presented both challenges and learning opportunities. I recognize that the resulting article, crafted in this short period, lacked depth in specific examples and detailed explanations. This was primarily due to the limited availability of extensive research and reliable information in this nascent field. The specificity of the topic, along with its emerging nature, made it difficult to find comprehensive studies and data.</p>
<p>Despite these obstacles, the process was immensely enlightening. It underscored the difficulties one might face when delving into emerging technologies where foundational research is still in development. The scarcity of detailed resources contributed to the article&apos;s vagueness, reflecting the current state of knowledge in this cutting-edge area. However, I remain optimistic about future developments. As the technology evolves and more products related to the metaverse are introduced, there will be greater opportunities for in-depth analysis and richer insights. This evolution will undoubtedly enable the creation of articles with more clarity and specificity.</p>
<p>This experience also significantly impacted my skills and interests. It greatly enhanced my ability to navigate and understand research papers, a vital skill in the constantly advancing field of computer science. More importantly, it ignited a deeper interest in new technologies within the CS domain. This project expanded my knowledge base and strengthened my aspiration to contribute to the field of emerging technologies. As I continue to engage in computer science, I am eager to delve deeper into such innovative topics, now equipped with a better understanding of the unique challenges and opportunities they present.</p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Activity Detecting - Mobile Sensing]]></title><description><![CDATA[<hr>
<h3 id="2023-spring-team-project"><strong><em>2023 Spring Team Project</em></strong></h3>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/Activity-Detecting?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/Activity-Detecting</div><div class="kg-bookmark-description">Contribute to IlMinCho/Activity-Detecting development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/1a91a4d229219065a652a1887e885f371e0b7f9b5b0cd56b850f2918262a39a2/IlMinCho/Activity-Detecting" alt></div></a></figure>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/Fall-Detection_Mobile-Sensing?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/Fall-Detection_Mobile-Sensing</div><div class="kg-bookmark-description">Contribute to IlMinCho/Fall-Detection_Mobile-Sensing development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/43e210410b2c2bc533f1d56925cbbcf3b0d587eb59507e2012b3880a6a4222f2/IlMinCho/Fall-Detection_Mobile-Sensing" alt></div></a></figure>
<p>Team Member: Ilmin, Owen, Arman</p>
<hr>
<p><strong><em>Activity Detecting:</em></strong> Through <a href="https://www.tszheichoi.com/sensorlogger?ref=ilmincho.me">the sensor</a></p>]]></description><link>https://ilmincho.me/activity-detecting-mobile-sensing/</link><guid isPermaLink="false">659073675724f0047b5e6fcd</guid><category><![CDATA[Projects]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Wed, 31 May 2023 18:45:00 GMT</pubDate><media:content url="https://ilmincho.me/content/images/2023/12/---------.gif" medium="image"/><content:encoded><![CDATA[<hr>
<h3 id="2023-spring-team-project"><strong><em>2023 Spring Team Project</em></strong></h3>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/Activity-Detecting?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/Activity-Detecting</div><div class="kg-bookmark-description">Contribute to IlMinCho/Activity-Detecting development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Activity Detecting - Mobile Sensing"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/1a91a4d229219065a652a1887e885f371e0b7f9b5b0cd56b850f2918262a39a2/IlMinCho/Activity-Detecting" alt="Activity Detecting - Mobile Sensing"></div></a></figure>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/Fall-Detection_Mobile-Sensing?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/Fall-Detection_Mobile-Sensing</div><div class="kg-bookmark-description">Contribute to IlMinCho/Fall-Detection_Mobile-Sensing development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Activity Detecting - Mobile Sensing"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/43e210410b2c2bc533f1d56925cbbcf3b0d587eb59507e2012b3880a6a4222f2/IlMinCho/Fall-Detection_Mobile-Sensing" alt="Activity Detecting - Mobile Sensing"></div></a></figure>
<img src="https://ilmincho.me/content/images/2023/12/---------.gif" alt="Activity Detecting - Mobile Sensing"><p>Team Member: Ilmin, Owen, Arman</p>
<hr>
<p><strong><em>Activity Detecting:</em></strong> Through <a href="https://www.tszheichoi.com/sensorlogger?ref=ilmincho.me">the sensor logger application</a>, we developed an application that detects running, jumping, walking, and sitting activities in real time based on the acceleration sensor. </p>
<p><strong><em>Fall Detecting:</em></strong> In a significant advancement for personal safety technology, this project has led to the development of an fall detection system. This state-of-the-art system is specifically designed to assist the elderly and those living alone, employing advanced sensor technology to differentiate between normal activities and falls. At its core, the system utilizes accelerometer to analyze movement patterns accurately. A critical feature is the implementation of a low pass filter, effectively isolating significant movements and removing irrelevant high-frequency noise. The system&apos;s precision is further enhanced by dynamic thresholding, with movement peak thresholds being adjusted in real-time based on the data&apos;s running mean and standard deviation.</p>
<p>The meticulous approach to data collection and analysis is a cornerstone of this project. An extensive dataset comprising 200 fall scenarios, including various types of falls, and 200 non-fall scenarios, such as walking and jumping, was compiled to ensure comprehensive coverage of potential movements. The team also conducted detailed research to determine the most effective placement of the smartphone on the user&#x2019;s body for optimal data accuracy. This project not only marks a technological breakthrough in elderly care but also paves the way for future innovations in health and safety monitoring. With a focus on continuous improvement and adaptation, this fall detection system promises to enhance personal safety and independence for vulnerable populations, demonstrating the profound impact of technology in improving everyday lives.</p>
<hr>
<p><strong><em>Activity Detecting:</em></strong></p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-30.png" class="kg-image" alt="Activity Detecting - Mobile Sensing" loading="lazy" width="971" height="624" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-30.png 600w, https://ilmincho.me/content/images/2023/12/image-30.png 971w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Real-time activity detecting outcomes</strong></b></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/Screenshot-2023-12-30-172354.png" class="kg-image" alt="Activity Detecting - Mobile Sensing" loading="lazy" width="725" height="822" srcset="https://ilmincho.me/content/images/size/w600/2023/12/Screenshot-2023-12-30-172354.png 600w, https://ilmincho.me/content/images/2023/12/Screenshot-2023-12-30-172354.png 725w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Sensor application for detecting</strong></b></figcaption></figure>
<p>It detects running, jumping, walking, and sitting in real time by linking the sensor logger application and our development program. Overall, based on the acceleration sensor, detection is done through the data we collected and preprocessed, and you can see acceleration and filtered signals in real time.<br></p>
<p><strong><em>Data Acquisition and Preprocessing</em></strong></p>
<ul><li><strong>Activity Selection</strong>: Chose four activities for classification, including sitting and walking, running and jumping.</li><li><strong>Data Collection</strong>: Used the Sensor Logger app to record accelerometer data for each activity. Ensured a minimum of 5 minutes of data per activity, maintaining equal data length across activities.</li><li><strong>Data Preparation</strong>: Exported recordings as Zipped CSV files, unzipped and renamed (e.g., &#x201C;Walking-Accelerometer.csv&#x201D;), and consolidated them into a single CSV file using a custom Python script.</li></ul>
<p><strong><em>Feature Extraction</em></strong></p>
<ul><li><strong>Feature Extraction (features.py)</strong>: Developed functions to extract statistical, FFT, and other relevant features from the accelerometer data.</li></ul>
<ol><li><strong>Statistical Features</strong><ul><li><strong>Description</strong>: Extracted fundamental statistical measures such as mean, variance, zero- or mean-crossings rate, as well as minimum, maximum, and median values.</li><li><strong>Application</strong>: Applied these measures to each axis and the magnitude of acceleration, focusing on signals most informative for differentiating activities.</li><li><strong>Tools</strong>: Utilized numpy for calculating comprehensive statistical features, including histogram-based analyses.</li></ul></li><li><strong>FFT (Fast Fourier Transform) Features</strong><ul><li><strong>Purpose</strong>: Identified dominant frequencies in the accelerometer signal to distinguish between activities, such as differentiating running from walking.</li><li><strong>Method</strong>: Implemented numpy&#x2019;s <code>rfft()</code> function for real-valued Discrete Fourier Transform, analyzing each axis and magnitude separately.</li><li><strong>Consideration</strong>: Addressed the complex nature of FFT output by focusing on real components.</li></ul></li><li><strong>Entropy and Other Features</strong><ul><li><strong>Entropy Calculation</strong>: Computed entropy using numpy&#x2019;s <code>histogram()</code> function to create a discrete distribution of accelerometer values. <br>	<em>&#x2211;_(p(x)) p(x) log(p(x))</em></li><li><strong>Integration of Acceleration</strong>: Experimented with deriving velocity and distance signals from acceleration data, mindful of the sensitivity to drift in these calculations. <br>	&#x3B4;v = a &#x3B4;t <br>	&#x3B4;s = 1/2 a&#x3B4;t^2+v_o &#x3B4;t</li><li><strong>Challenges and Solutions</strong>: Addressed the challenge of large value accumulation in integrated signals by focusing on short-term changes.</li></ul></li><li><strong>Peak Features</strong><ul><li><strong>Implementation</strong>: Analyzed peaks and troughs in the accelerometer signal to determine the type of activity.</li><li><strong>Specific Techniques</strong>: Employed methods such as peak count per window and average duration between peaks.</li></ul></li></ol>
<hr>
<p><strong><em>Fall Detecting:</em></strong></p>
<p>This project developed an application that detects whether a person has fallen based on the overall acceleration sensor by applying Activity Detecting above.</p>
<p><strong>Data Collection, Model Training, and Testing/ Analysis</strong></p>
<p>We collected 200 samples related to fall based on acceleration using a sensor logger application. Each data is less than 1 minute long, and the first 30 seconds are based on general movements such as walking or standing, then falling down, and then lying down on the floor for 10 to 15 seconds. Then, it went through a process of labeling the fallen section for each data, and removed unnecessary high frequencies in the data by using a low-pass filter. </p>
<p>Overall, based on the acceleration information for each axis, the model was trained and fall was detected using the features of Mean, Variance, Minimum, Maximum, Median, Dominant frequency, Entropy, and Number of peaks. Additionally, 10 fold cross validation and decision trees were generated.</p>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/Screenshot-2023-12-30-175105-1.png" class="kg-image" alt="Activity Detecting - Mobile Sensing" loading="lazy" width="430" height="495"><figcaption><b><strong style="white-space: pre-wrap;">Data collection process with app</strong></b></figcaption></figure>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/image-32.png" class="kg-image" alt="Activity Detecting - Mobile Sensing" loading="lazy" width="1503" height="556" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-32.png 600w, https://ilmincho.me/content/images/size/w1000/2023/12/image-32.png 1000w, https://ilmincho.me/content/images/2023/12/image-32.png 1503w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;"> Unfiltered data / Data using low-pass filter</strong></b></figcaption></figure>
<p>To perform the data smoothing process, Low-pass filter, one of the Freq-domain Filtering methods, was applied.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2023/12/image-34.png" class="kg-image" alt="Activity Detecting - Mobile Sensing" loading="lazy" width="615" height="356" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-34.png 600w, https://ilmincho.me/content/images/2023/12/image-34.png 615w"></figure>
<p></p>
<ul><li><strong>Low-pass filter</strong>: A low-pass filter passes signals with frequency lower than a certain cutoff frequency and attenuates (i.e. reduces the effect of) signals that are higher than the cutoff frequency. An example where a low-pass filter is used is to remove baseline variations in an ECG signal</li></ul>
<p><strong>Classifier Training </strong>: Utilized the Decision Tree Classifier with 10-fold cross-validation. Implemented metrics like accuracy, precision, and recall to evaluate the model.</p>
<ul><li>Data labeling: The initial step involved classifying the activity of the fall, which was used to decode the classifier&apos;s predictions. It is based on labeling each data by time, taking into account the section where the person fell and the section where the person is lying on the floor.</li><li>Data Windowing Strategy: A critical decision was to label data windows based on the midpoint label, streamlining the classification process.</li><li>Classifier Training and Validation: Utilizing the scikit-learn library, I trained a decision tree classifier using a 10-fold cross-validation approach (model_selection.KFold), ensuring a robust evaluation of the model.<br>The classifier was configured with entropy as the criterion and a depth cap of 3, balancing complexity and computational efficiency.</li></ul>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2023/12/image-35.png" class="kg-image" alt="Activity Detecting - Mobile Sensing" loading="lazy" width="975" height="658" srcset="https://ilmincho.me/content/images/size/w600/2023/12/image-35.png 600w, https://ilmincho.me/content/images/2023/12/image-35.png 975w" sizes="(min-width: 720px) 720px"></figure>
<ul><li>Performance Analysis: By employing the fit and predict functions, I trained the model and made predictions on the test data. I then used a confusion matrix to evaluate the accuracy, precision, and recall of the model, providing a comprehensive assessment of its performance.</li><li>Visualization and Finalization: The decision tree was visualized using export_graphviz, creating an insightful representation of the model&apos;s decision-making process. A PNG image of the tree was generated using Graphviz, offering a clear visual understanding of the classifier&apos;s structure.</li><li>Saving the Classifier: The final classifier was saved using pickle, ensuring that the trained model could be efficiently reused or referenced in future work.</li></ul>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2023/12/Screenshot-2023-12-30-210324.png" class="kg-image" alt="Activity Detecting - Mobile Sensing" loading="lazy" width="622" height="411" srcset="https://ilmincho.me/content/images/size/w600/2023/12/Screenshot-2023-12-30-210324.png 600w, https://ilmincho.me/content/images/2023/12/Screenshot-2023-12-30-210324.png 622w"><figcaption><b><strong style="white-space: pre-wrap;">Project: Outcomes</strong></b></figcaption></figure>
<hr>
<p><strong>Key learnings</strong><br>&#x2022; Data filtering and processing using features such as Maximum, Median, 	 Dominant frequency, Entropy.<br>&#x2022; Implement Numpy, scipy, matplotlib and, pandas.<br>&#x2022; Sensor logger application<br>&#x2022; Training a Decision Tree Classifier</p>
<hr>
<p><strong>How to Improve the Project Further:</strong></p>
<p>Other sensors, such as gyroscopes, can be used to provide more accurate detection. We only considered falls in everyday situations such as standing or walking, but this can be expanded to include falls during running, cycling, and other activities. Additionally, a process can be applied to detect falls in real time and send a message confirming personal safety.</p>
<hr>
<p><strong>Reference : <a href="https://dganesan.github.io/mhealth-course/?ref=ilmincho.me">https://dganesan.github.io/mhealth-course/</a></strong></p>]]></content:encoded></item><item><title><![CDATA[Search Engines - Indexing and Ranking/Retrieval]]></title><description><![CDATA[<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-28.png" class="kg-image" alt loading="lazy" width="1033" height="679" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-28.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-28.png 1000w, https://ilmincho.me/content/images/2024/01/image-28.png 1033w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Indexing</strong></p>
<ul>
<li>Indexes are data structures designed to make search faster</li>
<li>Text search has unique requirements, which leads to unique data structures</li>
<li>Most common data structure is inverted index<br>
&#x2013; general name for a class of structures<br>
&#x2013; &#x201C;inverted&#x201D; because documents are associated with words, rather than words with</li></ul>]]></description><link>https://ilmincho.me/se-indexing-ranking-retrieval/</link><guid isPermaLink="false">659619bc40fead047c8b6f23</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Sat, 29 Apr 2023 01:36:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXJjaCUyMGVuZ2luZXxlbnwwfHx8fDE3MDQzMjMyMjZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-28.png" class="kg-image" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy" width="1033" height="679" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-28.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-28.png 1000w, https://ilmincho.me/content/images/2024/01/image-28.png 1033w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<img src="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXJjaCUyMGVuZ2luZXxlbnwwfHx8fDE3MDQzMjMyMjZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Search Engines - Indexing and Ranking/Retrieval"><p><strong>Indexing</strong></p>
<ul>
<li>Indexes are data structures designed to make search faster</li>
<li>Text search has unique requirements, which leads to unique data structures</li>
<li>Most common data structure is inverted index<br>
&#x2013; general name for a class of structures<br>
&#x2013; &#x201C;inverted&#x201D; because documents are associated with words, rather than words with documents</li>
</ul>
<p><strong>Indexes and Ranking</strong></p>
<ul>
<li>Indexes are designed to support search<br>
&#x2013; faster response time, support updates</li>
<li>Text search engines use a particular form of search: ranking<br>
&#x2013; documents are retrieved in sorted order according to a score computing using the document representation, the query, and a ranking algorithm</li>
<li>Let&#x2019;s develop an abstract model for ranking<br>
&#x2013; enables discussion of indexes without details of retrieval model<br>
<img src="https://ilmincho.me/content/images/2024/01/1-3.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-29.png" class="kg-image" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy" width="643" height="506" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-29.png 600w, https://ilmincho.me/content/images/2024/01/image-29.png 643w"></figure>
<p>How do we implement ranking?</p>
<ul>
<li>Brute force approach<br>
For each document D in collection: Calculate score and then, Sort the scores</li>
<li>Drawbacks?<br>
&#x2013; Most documents contain no query terms<br>
&#x2013; Very slow for a large collection</li>
</ul>
<p><strong>Handle with an inverted Index</strong></p>
<ul>
<li>Each term associated with an inverted list<br>
&#x2013; Contains lists of documents, or lists of word occurrences in documents, and other information<br>
&#x2013; Each entry is called a posting<br>
&#x2013; The part of the posting that refers to a specific document or location is called a pointer<br>
&#x2013; Each document in the collection is given a unique number<br>
&#x2013; Lists usually document-ordered (sorted by document number)</li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-30.png" class="kg-image" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy" width="1066" height="642" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-30.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-30.png 1000w, https://ilmincho.me/content/images/2024/01/image-30.png 1066w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Query Processing</strong></p>
<ul>
<li>Document-at-a-time<br>
&#x2013; Calculates complete scores for documents by processing all term lists, one document at a time</li>
<li>Term-at-a-time<br>
&#x2013; Accumulates scores for documents by processing term lists one at a time</li>
<li>Both approaches have optimization techniques that significantly reduce time required to generate scores</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/d.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"><br>
Pseudocode Function Descriptions</p>
<ul>
<li>Need to be able to traverse inverted lists<br>
&#x2013; Recall that they are sorted by document number</li>
<li>Abstraction is a &#x201C;you are here&#x201D; pointer</li>
<li>InvList.getCurrentDocument()<br>
&#x2013; Returns the document number of the current posting of the inverted list (&#x201C;you are here&#x201D;)</li>
<li>InvList.movePastDocument(d)<br>
&#x2013; Moves forward in the inverted list until getCurrentDocument() &gt; d</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/dc-1.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></p>
<p><img src="https://ilmincho.me/content/images/2024/01/t-1.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"><br>
Pseudocode Function Descriptions</p>
<ul>
<li>getCurrentDocument()<br>
&#x2013; Returns the document number of the current posting of the inverted list.</li>
<li>movePastDocument(d)<br>
&#x2013; Moves forward in the inverted list until getCurrentDocument() &lt;= d.</li>
<li>moveToNextDocument()<br>
&#x2013; Moves to the next document in the list. Same as movePastDocument(getCurrentDocument()).</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/td.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></p>

<hr>
<p><strong>Ranking/Retrieval</strong></p>
<p>Retrieval Models</p>
<p><img src="https://ilmincho.me/content/images/2024/01/Capture.PNG" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></p>
<ul>
<li>Provide a mathematical framework for defining the search process<br>
&#x2013; includes explanation of assumptions<br>
&#x2013; basis of the ranking algorithms</li>
<li>Progress in retrieval models has corresponded with improvements in effectiveness</li>
<li>Theories about relevance</li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-32.png" class="kg-image" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy" width="1035" height="728" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-32.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-32.png 1000w, https://ilmincho.me/content/images/2024/01/image-32.png 1035w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Boolean Retrieval</strong></p>
<ul>
<li>Two possible outcomes for query processing<br>
&#x2013; TRUE and FALSE<br>
&#x2013; &#x201C;exact-match&#x201D; retrieval<br>
&#x2013; simplest form of ranking</li>
<li>Query usually specified using Boolean operators<br>
&#x2013; AND, OR, NOT<br>
&#x2013; proximity operators and wildcards also used<br>
&#x2013; Extra features like date or type</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/11.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></p>
<p><strong>Vector Space Model</strong></p>
<ul>
<li>
<p>Key idea is that everything is a vector<br>
&#x2013; In an extremely high-dimensional space<br>
&#x2013; e.g., 100K dimensions<br>
&#x2013; documents, queries, terms</p>
</li>
<li>
<p>Dimensions are not specified</p>
</li>
<li>
<p>Magnitude on them is not specified</p>
</li>
<li>
<p>Typically, a document is the sum of its parts <img src="https://ilmincho.me/content/images/2024/01/22.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></p>
</li>
<li>
<p>Provides a framework<br>
&#x2013; Dimensions most commonly are terms (tokens)<br>
&#x2013; Term weighting for magnitude -&gt; Which terms are more important?<br>
&#x2013; So weighted vectors are doc and query models<br>
&#x2013; How to rank? -&gt; Which documents are more relevant?<br>
&#x2013; Relevance Feedback -&gt; How to employ feedback from searcher?</p>
</li>
<li>
<p>Documents and query represented by a vector of term weights</p>
</li>
<li>
<p>Collection represented by a matrix of term weights<br>
<img src="https://ilmincho.me/content/images/2024/01/33.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></p>
</li>
</ul>
<p>How do we weigh doc terms?</p>
<ul>
<li>Is just the number of times it occurs enough?</li>
<li>Intuition:<br>
&#x2013; Terms that appear often in a document should get high weights<br>
&#x2013; Terms that appear in many documents should get low weights</li>
<li>How do we capture this mathematically?<br>
&#x2013; Term frequency<br>
&#x2013; Inverse document frequency</li>
</ul>
<p><em>Term frequency <strong>tf</strong></em></p>
<ul>
<li>The term frequency tfd,t of term t in document d is defined as the number of times that t occurs in d.</li>
<li>We want to use tf when computing query-document match scores. But how?</li>
<li>Raw term frequency is not what we want:<br>
&#x2013; A document with 10 occurrences of the term is more relevant than a document with 1 occurrence of the term.<br>
&#x2013; But not 10 times more relevant.</li>
<li>Relevance does not increase proportionally with term frequency.</li>
</ul>
<p><em>Log-frequency weighting</em></p>
<ul>
<li>The log frequency weight of term t in d is <img src="https://ilmincho.me/content/images/2024/01/1-4.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></li>
<li>0 &#x2192; 0, 1 &#x2192; 1, 2 &#x2192; 1.3, 10 &#x2192; 2, 1000 &#x2192; 4, etc.</li>
<li>Score for a document-query pair: sum over terms t in both q and d:<img src="https://ilmincho.me/content/images/2024/01/2-1.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></li>
<li>Score is 0 if none of the query terms is in the document &#x2013; i.e., if intersection is empty</li>
</ul>
<p><em><strong>idf</strong> weight</em></p>
<ul>
<li>nk is the document frequency of term k: the number of documents that contain k<br>
&#x2013; nk is an inverse measure of the &#x201C;informativeness&#x201D; ofa term that occurs k times<br>
&#x2013; nk &lt;= N</li>
<li>We define the idf (inverse document frequency) of k by: idfk = log10 (N/nk )<br>
&#x2013; We use log (N/nk) instead of N/nk to &#x201C;dampen&#x201D; the effect of idf.<br>
&#x2013; A term that occurs zero times has an undefined idf</li>
</ul>
<p>Term Weights</p>
<ul>
<li>tf&#xB7;idf weight<br>
&#x2013; Term frequency weight measures importance in document<br>
&#x2013; Inverse document frequency measures importance in collection<br>
&#x2013; Heuristic combination (length normalized)<br>
<img src="https://ilmincho.me/content/images/2024/01/ddddd.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></li>
</ul>

<hr>
<p><strong>BM25</strong></p>
<ul>
<li>BM25 was created as the result of a series of experiments on variations of the probabilistic model</li>
<li>A good term weighting is based on three principles<br>
&#x2013; inverse document frequency<br>
&#x2013; term frequency<br>
&#x2013; document length normalization</li>
<li>The classic probabilistic model (just talked about) covers only the first of these principles</li>
<li>This reasoning led to a series of experiments which led to the BM25 ranking formula</li>
<li>Popular and effective ranking algorithm based on binary independence model<br>
&#x2013; adds document and query term weights<img src="https://ilmincho.me/content/images/2024/01/ff.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"><br>
&#x2013; k1, k2 and K are parameters whose values are set empirically<br>
&#x2013; <img src="https://ilmincho.me/content/images/2024/01/asdf.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy">dl is doc length<br>
&#x2013; Typical TREC values: k1 is 1.2, k2 varies from 0 to 1000, b = 0.75</li>
</ul>
<p>BM25 Example</p>
<ul>
<li>Query with two terms, &#x201C;president lincoln&#x201D;, (qf = 1)</li>
<li>No relevance information (ri and R are zero)</li>
<li>N = 500,000 documents</li>
<li>&#x201C;president&#x201D; occurs in 40,000 documents (n1 = 40, 000)</li>
<li>&#x201C;lincoln&#x201D; occurs in 300 documents (n2 = 300)</li>
<li>&#x201C;president&#x201D; occurs 15 times in doc (f1 = 15)</li>
<li>&#x201C;lincoln&#x201D; occurs 25 times (f2 = 25)</li>
<li>document length is 90% of the average length (dl/avdl = .9)</li>
<li>k1 = 1.2, b = 0.75, and k2 = 100</li>
<li>K = 1.2 &#xB7; (0.25 + 0.75 &#xB7; 0.9) = 1.11<br>
<img src="https://ilmincho.me/content/images/2024/01/ex.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></li>
</ul>

<p><strong>Query-Likelihood Model (QL)</strong></p>
<ul>
<li>Rank documents by the probability that the query could be generated by the document model (i.e., same topic)</li>
<li>Given a query, we are interested in P(D|Q)</li>
<li>One way is to use Bayes&#x2019; Rule <img src="https://ilmincho.me/content/images/2024/01/bb.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></li>
<li>Assuming prior is uniform, and assuming independence, we get the unigram<br>
<img src="https://ilmincho.me/content/images/2024/01/bb1.png" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy"></li>
</ul>
<p><em>Smoothing</em></p>
<ul>
<li>Document texts are a sample from the language model<br>
&#x2013; Missing words should not have zero probability of occurring<br>
&#x2013; A document is a very small sample of words, and the maximum likelihood estimate will be inaccurate.</li>
<li>Smoothing is a technique for estimating probabilities for missing (or unseen) words<br>
&#x2013; reduce (or discount) the probability estimates for words that are seen in the document text<br>
&#x2013; assign that &#x201C;left-over&#x201D; probability to the estimates for the words that are not seen in the text</li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-33.png" class="kg-image" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy" width="1226" height="828" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-33.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-33.png 1000w, https://ilmincho.me/content/images/2024/01/image-33.png 1226w" sizes="(min-width: 720px) 720px"></figure>
<p>Query Likelihood Example</p>
<ul>
<li>For the term &#x201C;president&#x201D;<br>
&#x2013; fqi,D = 15, cqi = 160,000</li>
<li>For the term &#x201C;lincoln&#x201D;<br>
&#x2013; fqi,D = 25, cqi = 2,400</li>
<li>number of word occurrences in the document, |D|, is assumed to be 1,800</li>
<li>number of word occurrences in the collection is 109<br>
&#x2013; 500,000 documents times an average of 2,000 words</li>
<li>Score using JM smoothing with &#x3BB;=0.1 ?</li>
<li>Score using Dirichlet smoothing with &#x3BC; = 2,000?</li>
<li>Using natural log (doesn&#x2019;t really matter)</li>
<li>Query Likelihood Example (Dirichlet)</li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-35.png" class="kg-image" alt="Search Engines - Indexing and Ranking/Retrieval" loading="lazy" width="719" height="340" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-35.png 600w, https://ilmincho.me/content/images/2024/01/image-35.png 719w"></figure>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/SE-Indexing?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/SE-Indexing</div><div class="kg-bookmark-description">Contribute to IlMinCho/SE-Indexing development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Search Engines - Indexing and Ranking/Retrieval"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/50f661e78e96838f575c33dd6131cb2633f53947fd76508e29ad8975e150cabe/IlMinCho/SE-Indexing" alt="Search Engines - Indexing and Ranking/Retrieval"></div></a></figure>
<hr>
<p><strong>Analysis</strong></p>
<ol><li>What is the average length of a story in this collection? What is the shortest story (and how short it is)? What is the longest story (and how longis it)? Note that for this project, &quot;short&quot; and &quot;long&quot; are measured by the number of tokens, not the number of characters.<br>Average length = 1215.1629098360656 / 19406-art53 = 4 / 8951-id_6 = 26139</li><li>What word occurs in the most stories and how many stories does it occur in? What word has the largest number of occurrences and how many does it have?<br>&#x2018;the&#x2019;: 966 docs / &#x2018;the&#x2019;: 96151 times</li><li>How many unique words are there in this collection? How many of them occur only once? What percent is that? Is that what you would expect? Why or why not?<br>27217 unique terms, 10056 only once. It is around 37%. It is difficult for me to predict the exact value, but it can be calculated to some extent using zipf&apos;law and the larger the size of the corpus and the more diverse the types, the higher the rate of unique words that appear only once, so our sample has a moderate amount of sample and diversity, so 37% is a reasonable number.</li><li>Your training queries have two queries that are roughly about the scientific american supplement. Suppose that you wanted to judge stories for relevance using a pooling strategy that takes the top 100 documents from each of those two queries. How many unique documents will you be judging? What if you only considered the top 20? Suppose you had a budget that allowed you to judge at most 25 documents. How deeply could you go into the two queries for judging to get 25 judged, no more, no less?<br>58 unique documents on top 100 docs. / 0 unique documents on top 20.<br>To get 25 unique documents, go in to 64 ranking</li><li>Run the query amherst college &#x2013; where that means the two words separately and not the phrase &#x2013; using either BM25 or QL (your choice). For any 10 of the top 50 top ranked documents, look at the text of the document and mark whether it is relevant. Put your judgments in a file called amherst-YOURUSERNAME.qrels Your should include the 10 storyIDs and a judgement of relevant that is 0 = has nothing to do with Amherst College, 1 = Amherst College is mentioned, or 2 = substantially relates to someone from or<br>something that happened at Amherst College. Use the qrels file format from P2, with the queryname being &quot;amherst&quot;, then the skip value of 0, then the storyID (NOT your internal docid), and then the 0/1/2 judgment, one of those per line.</li></ol>
<hr>
<p>Reference:&#xA0;<a href="https://ciir.cs.umass.edu/~allan/?ref=ilmincho.me">Prof. James Allan</a></p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Search Engines - Evaluation]]></title><description><![CDATA[<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-22.png" class="kg-image" alt loading="lazy" width="1078" height="744" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-22.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-22.png 1000w, https://ilmincho.me/content/images/2024/01/image-22.png 1078w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Evaluation</strong></p>
<ul>
<li>Evaluation is key to building effective and efficient search engines<br>
&#x2013; measurement usually carried out in controlled laboratory experiments<br>
&#x2013; online testing can also be done</li>
<li>Efficiency measures similar to those used in database systems<br>
&#x2013; e.g., indexing time, query throughput, index size</li>
<li>Our focus here is on</li></ul>]]></description><link>https://ilmincho.me/se-evaluation/</link><guid isPermaLink="false">6595f76f8e5607047537e207</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Fri, 31 Mar 2023 23:10:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXJjaCUyMGVuZ2lufGVufDB8fHx8MTcwNDMyNzI0Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-22.png" class="kg-image" alt="Search Engines - Evaluation" loading="lazy" width="1078" height="744" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-22.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-22.png 1000w, https://ilmincho.me/content/images/2024/01/image-22.png 1078w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<img src="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXJjaCUyMGVuZ2lufGVufDB8fHx8MTcwNDMyNzI0Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Search Engines - Evaluation"><p><strong>Evaluation</strong></p>
<ul>
<li>Evaluation is key to building effective and efficient search engines<br>
&#x2013; measurement usually carried out in controlled laboratory experiments<br>
&#x2013; online testing can also be done</li>
<li>Efficiency measures similar to those used in database systems<br>
&#x2013; e.g., indexing time, query throughput, index size</li>
<li>Our focus here is on effectiveness metrics<br>
&#x2013; Comparing systems<br>
&#x2013; Parameter tuning</li>
</ul>
<p>Evaluation Corpus</p>
<ul>
<li>Test collections consisting of documents, queries, and relevance judgments</li>
<li>Some examples:<img src="https://ilmincho.me/content/images/2024/01/1-1.png" alt="Search Engines - Evaluation" loading="lazy"></li>
</ul>

<hr>
<p><strong>Evaluation Measures</strong></p>
<p><img src="https://ilmincho.me/content/images/2024/01/p.png" alt="Search Engines - Evaluation" loading="lazy"></p>
<ul>
<li>Precision<br>
&#x2013; Proportion of a retrieved set that is relevant<br>
&#x2013; Precision = |relevant &#x2229; retrieved| &#xF7; |retrieved|<br>
= P( relevant | retrieved )</li>
<li>Recall<br>
&#x2013; proportion of all relevant documents in the collection included in the retrieved set<br>
&#x2013; Recall = |relevant &#x2229; retrieved| &#xF7; |relevant| = P( retrieved | relevant )</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/t.png" alt="Search Engines - Evaluation" loading="lazy"></p>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-24.png" class="kg-image" alt="Search Engines - Evaluation" loading="lazy" width="1165" height="706" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-24.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-24.png 1000w, https://ilmincho.me/content/images/2024/01/image-24.png 1165w" sizes="(min-width: 720px) 720px"></figure>
<p>EX) Precision and Recall example</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-25.png" class="kg-image" alt="Search Engines - Evaluation" loading="lazy" width="1083" height="665" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-25.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-25.png 1000w, https://ilmincho.me/content/images/2024/01/image-25.png 1083w" sizes="(min-width: 720px) 720px"></figure>
<p><strong>Average precision of a query</strong></p>
<ul>
<li>Provides a single-number effectiveness measure<br>
&#x2013; E.g., for a machine-learning algorithm to detect improvement</li>
<li>Average precision is widely used in IR<br>
&#x2013; assumes user interested in finding many relevant documents for each query, preferably at top of list<br>
&#x2013; requires many relevance judgments in text collection</li>
<li>Calculate by averaging precision when recall increases<img src="https://ilmincho.me/content/images/2024/01/e.png" alt="Search Engines - Evaluation" loading="lazy"></li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/s-1.png" alt="Search Engines - Evaluation" loading="lazy"></p>
<p><strong>Another average: F Measure</strong></p>
<ul>
<li>Harmonic mean of recall and precision<br>
<img src="https://ilmincho.me/content/images/2024/01/111.png" alt="Search Engines - Evaluation" loading="lazy"><br>
&#x2013; harmonic mean emphasizes the importance of small values, whereas the arithmetic mean is affected more by outliers that are unusually large</li>
<li>More general form (for those who are curious)<br>
<img src="https://ilmincho.me/content/images/2024/01/kk.png" alt="Search Engines - Evaluation" loading="lazy"><br>
&#x2013; &#x3B2; is a parameter that determines relative importance of recall and precision<br>
&#x2013; People usually use balanced F1 measure</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/f1.png" alt="Search Engines - Evaluation" loading="lazy"></p>
<p><strong>Averaging across queries</strong></p>
<ul>
<li>Two main types of averaging<br>
&#x2013; Micro-average - each relevant document is a point in the average<br>
&#x2013; Macro-average - each query is a point in the average</li>
<li>Also done with average precision value<br>
&#x2013; Average of many queries&#x2019; average precision values<br>
&#x2013; Called mean average precision (MAP)/ &#x201C;Average average precision&#x201D; sounds weird</li>
</ul>

<hr>
<p><strong>Discounted Cumulative Gain (DCG)</strong></p>
<ul>
<li>Popular measure for evaluating web search and related tasks</li>
<li>Two assumptions:</li>
</ul>
<ol>
<li>Highly relevant documents are more useful than marginally relevant document<br>
-&gt; Implies we need multi-valued relevance judgments</li>
<li>The lower the ranked position of a relevant document, the less useful it is for the user, since it is less likely to be examined<br>
-&gt; AP captures this, too, but normally binary judgments</li>
</ol>
<ul>
<li>Uses graded relevance as a measure of the usefulness, or gain, from examining a document</li>
<li>Gain is accumulated starting at the top of the ranking and may be reduced, or discounted, at lower ranks</li>
<li>Typical discount is 1/log (rank)<br>
&#x2013; With base 2, the discount at rank 4 is 1/2, and at rank 8 it is 1/3</li>
<li>DCG is the total gain accumulated at a particular rank p:<img src="https://ilmincho.me/content/images/2024/01/333.png" alt="Search Engines - Evaluation" loading="lazy"></li>
<li>Alternative formulation:<img src="https://ilmincho.me/content/images/2024/01/44.png" alt="Search Engines - Evaluation" loading="lazy"><br>
&#x2013; used by some web search companies</li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-26.png" class="kg-image" alt="Search Engines - Evaluation" loading="lazy" width="1190" height="859" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-26.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-26.png 1000w, https://ilmincho.me/content/images/2024/01/image-26.png 1190w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Normalized DCG (NDCG)</strong></p>
<ul>
<li>DCG numbers are averaged across a set of queries at specific rank values<br>
&#x2013; e.g., DCG at rank 5 is 6.89 and at rank 10 is 9.61</li>
<li>DCG values are often normalized by comparing the DCG at each rank with the DCG value for the ideal (perfect) ranking<br>
&#x2013; makes averaging easier for queries with different numbers of relevant documents<img src="https://ilmincho.me/content/images/2024/01/55.png" alt="Search Engines - Evaluation" loading="lazy"></li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-27.png" class="kg-image" alt="Search Engines - Evaluation" loading="lazy" width="1191" height="758" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-27.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-27.png 1000w, https://ilmincho.me/content/images/2024/01/image-27.png 1191w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/SE-Evaluation?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/SE-Evaluation</div><div class="kg-bookmark-description">Contribute to IlMinCho/SE-Evaluation development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Search Engines - Evaluation"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/c01b2274fabaab406b4e8b5bb75ccba644e05f17389682e93e5f993b0c8a5bb4/IlMinCho/SE-Evaluation" alt="Search Engines - Evaluation"></div></a></figure>
<hr>
<p><strong>Analysis</strong></p>
<p>1.</p>
<table style="border-width: 0px; border-style: solid; border-color: inherit; border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0px; --tw-border-spacing-y: 0px; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; border-collapse: separate; text-indent: 0px; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0.25rem; margin-top: 0.25rem; table-layout: auto; text-align: left; width: 612.986px; border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y); color: rgb(209, 213, 219); font-family: S&#xF6;hne, ui-sans-serif, system-ui, -apple-system, " segoe ui", roboto, ubuntu, cantarell, "noto sans", sans-serif, "helvetica neue", arial, "apple color emoji", "segoe ui symbol", emoji"; font-style: normal; font-variant-ligatures: font-variant-caps: font-weight: 400; letter-spacing: orphans: 2; text-transform: none; widows: word-spacing: 0px; -webkit-text-stroke-width: white-space: pre-wrap; background-color: rgb(52, 53, 65); text-decoration-thickness: initial; text-decoration-style: text-decoration-color: initial;"><thead style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-th-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><tr style="border: 0px solid rgb(217, 217, 227); box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><th style="border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; color: var(--tw-prose-headings); font-weight: 600; padding: 0.25rem 0.75rem; vertical-align: bottom; background-color: rgba(236, 236, 241, 0.2); border-top-left-radius: 0.375rem;">Query</th><th style="border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; color: var(--tw-prose-headings); font-weight: 600; padding: 0.25rem 0.75rem; vertical-align: bottom; background-color: rgba(236, 236, 241, 0.2);">QL</th><th style="border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; color: var(--tw-prose-headings); font-weight: 600; padding: 0.25rem 0.75rem; vertical-align: bottom; background-color: rgba(236, 236, 241, 0.2);">BM25</th><th style="border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; color: var(--tw-prose-headings); font-weight: 600; padding: 0.25rem 0.75rem; vertical-align: bottom; background-color: rgba(236, 236, 241, 0.2);">QL~BM %</th><th style="border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; color: var(--tw-prose-headings); font-weight: 600; padding: 0.25rem 0.75rem; vertical-align: bottom; background-color: rgba(236, 236, 241, 0.2);">DPR</th><th style="border: 1px solid rgb(217, 217, 227); box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; color: var(--tw-prose-headings); font-weight: 600; padding: 0.25rem 0.75rem; vertical-align: bottom; background-color: rgba(236, 236, 241, 0.2); border-top-right-radius: 0.375rem;">QL~DPR %</th></tr></thead><tbody style="border: 0px solid rgb(217, 217, 227); box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">23849</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0151</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0186</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">23.2%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2391</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1483.4%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">42255</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1987</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2625</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">32.1%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.4411</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">122.0%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">47210</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1997</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2021</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1.2%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.3692</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">84.9%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">...</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1113256</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.4953</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.4969</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.3%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.4651</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-6.1%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1115210</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0915</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0887</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-3.1%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0651</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-28.9%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1116380</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0396</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0111</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-72.0%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0587</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">48.2%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1119543</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0000</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0000</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0000</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1121353</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2557</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2349</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-8.1%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1002</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-60.8%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1122767</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.3460</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.3235</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-6.5%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2052</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-40.7%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1127540</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2693</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2764</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">2.6%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1705</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-36.7%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1131069</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0288</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0856</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">197.2%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2143</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">644.1%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1132532</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1666</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1044</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-37.3%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2442</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">46.6%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1133579</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.6677</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.6666</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-0.2%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.7530</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">12.8%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1136043</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0976</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1569</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">60.8%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.3695</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">278.6%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1136047</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0666</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0464</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-30.3%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0623</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-6.5%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1136769</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0000</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0000</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0000</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.0%</td></tr><tr style="border-width: 0px 0px 1px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">1136962</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.4689</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.4879</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">4.1%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.4199</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-10.4%</td></tr><tr style="border-width: 0px; border-style: solid; border-top-color: rgb(217, 217, 227); border-right-color: rgb(217, 217, 227); border-bottom-color: var(--tw-prose-td-borders); border-left-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ;"><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem; border-bottom-left-radius: 0.375rem;">all</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1952</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.1886</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">-3.4%</td><td style="border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem;">0.2091</td><td style="border-width: 0px 1px 1px; border-style: solid; border-color: rgb(217, 217, 227); border-image: initial; box-sizing: border-box; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-shadow: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-shadow-colored: 0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; vertical-align: baseline; padding: 0.25rem 0.75rem; border-bottom-right-radius: 0.375rem;">7.1%</td></tr></tbody></table>
<p>2.</p>
<p>Looking at the data, we can find several results with a slightly higher value of BM25 than the value of QL and the highest value of DPR. In other words, the percentage tends to improve gradually. However, if you look at the &#x2018;all&#x2019; part row, the values increase in the order of BM25 and Ql, DPR.</p>
<p>It depends on which query you look at, but while QL directly checks the probability of a term appearing in a document, BM25 relies on a more complex combination of features. In other words, QL may be better suited for situations where there is a clear semantic relationship between a query and related documents. However, for other data sets or other types of queries, bm25 may work better.</p>
<p>DPR is a model that uses vectors to encode queries and documents. DPR is more sophisticated than QL and BM25 because it takes advantage of similarities between queries and documents to handle complex queries and documents more effectively.</p>
<p>3.</p>
<p>The MAP is intended to evaluate the efficiency of the search system. Without a retrieved document, it is difficult to find the relevance of the document to the query. As a result, MAP calculation is not easy because precision and recall rate cannot be calculated. This also means that there is nothing to evaluate the efficiency of the system, and MAP calculations for these queries can lead to inaccurate results.</p>
<p>4.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-21.png" class="kg-image" alt="Search Engines - Evaluation" loading="lazy" width="960" height="720" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-21.png 600w, https://ilmincho.me/content/images/2024/01/image-21.png 960w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p>Reference:&#xA0;<a href="https://ciir.cs.umass.edu/~allan/?ref=ilmincho.me">Prof. James Allan</a></p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Search Engines - Text Representation]]></title><description><![CDATA[<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-16.png" class="kg-image" alt loading="lazy" width="1271" height="859" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-16.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-16.png 1000w, https://ilmincho.me/content/images/2024/01/image-16.png 1271w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Tokenizing</strong></p>
<ul>
<li>
<p>Forming words from sequence of characters</p>
</li>
<li>
<p>Surprisingly complex in English, can be harder in other languages</p>
</li>
<li>
<p>Early IR systems:<br>
&#x2013; any sequence of alphanumeric characters of length 3 or more<br>
&#x2013; terminated by a space or other special character<br>
&#x2013; upper-case changed to lower-case</p>
</li>
<li>
<p>Example:<br>
&#x2013;&gt; &#x201C;We&</p></li></ul>]]></description><link>https://ilmincho.me/se-text-representation/</link><guid isPermaLink="false">65925d378e5607047537e191</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Wed, 15 Mar 2023 05:35:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXJjaCUyMGVuZ2luZXN8ZW58MHx8fHwxNzA0MzIzMjI3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-16.png" class="kg-image" alt="Search Engines - Text Representation" loading="lazy" width="1271" height="859" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-16.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-16.png 1000w, https://ilmincho.me/content/images/2024/01/image-16.png 1271w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<img src="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXJjaCUyMGVuZ2luZXN8ZW58MHx8fHwxNzA0MzIzMjI3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Search Engines - Text Representation"><p><strong>Tokenizing</strong></p>
<ul>
<li>
<p>Forming words from sequence of characters</p>
</li>
<li>
<p>Surprisingly complex in English, can be harder in other languages</p>
</li>
<li>
<p>Early IR systems:<br>
&#x2013; any sequence of alphanumeric characters of length 3 or more<br>
&#x2013; terminated by a space or other special character<br>
&#x2013; upper-case changed to lower-case</p>
</li>
<li>
<p>Example:<br>
&#x2013;&gt; &#x201C;We&#x2019;d like to see Illinois become a right-to-work state,&#x201D; he said.<br>
&#x2013;&gt; we d like to see illinoisbecome a right to work state he said</p>
</li>
<li>
<p>Too simple for search applications or even large-scale experiments</p>
</li>
<li>
<p>Why?<br>
&#x2013; Too much information lost<br>
&#x2013; Small decisions in tokenizing can have major impact on effectiveness of some queries</p>
</li>
</ul>

<p><strong>Tokenizing Problems</strong></p>
<ul>
<li>Small words can be important in some queries, usually in combinations</li>
<li>xp, ma, pm, bene king, el paso, master p, gm, j lo, world war II</li>
<li>Both hyphenated and non-hyphenated forms of many words are common<br>
&#x2013; Sometimes hyphen is not needed (e-bay, wal-mart, active-x, cd-rom, t-shirts)<br>
&#x2013; At other times, hyphens should be considered either as part of the word or a word separator (winston-salem, mazdarx-7, e-cards, pre-diabetes, t-mobile, spanish-speaking )<br>
&#x2013; Data base, data-base, database 10</li>
<li>Special characters are an important part of tags, URLs, code in documents</li>
<li>Capitalized words can have different meaning from lower case words<br>
&#x2013; Bush, Apple, Trump</li>
<li>Apostrophes can be a part of a word, a part of a possessive, or just a mistake<br>
&#x2013; rosieo&apos;donnell, can&apos;t, don&apos;t, 80&apos;s, 1890&apos;s, men&apos;s straw hats, master&apos;s degree, england&apos;sten largest cities, shriner&apos;s</li>
<li>Numbers can be important, including decimals<br>
&#x2013; iphone14, top 10 courses, 9/11, united 93, quicktime7.7.9, WMUA 91.1, 867-5309, cs446</li>
<li>Periods can occur in numbers, abbreviations, URLs, ends of sentences, and other situations<br>
&#x2013; I.B.M., Ph.D., cs.umass.edu, 192.168.0.1, F.E.A.R.</li>
<li>Note: tokenizing steps for queries must be identical to steps for documents</li>
</ul>

<p><strong>Tokenizing Process</strong></p>
<ul>
<li>First step is to use parser to identify appropriate parts of document to tokenize</li>
<li>Candefer complex decisions to other components<br>
&#x2013; word is any sequence of alphanumeric characters, terminated by a space or special character, with everything converted to lower-case<br>
&#x2013; everything indexed<br>
&#x2013; example: 92.3 &#x2192; 92 3 but expect search to find documents with 92 and 3 adjacent<br>
&#x2013; incorporate some rules to reduce dependence on query transformation components</li>
<li>Not that different than simple tokenizing process used in past</li>
<li>Examples of rules used with TREC<br>
&#x2013; Apostrophes in words ignored (squeezed out) -&gt; o&#x2019;connor&#x2192; oconnor<br>
&#x2013; Periods in abbreviations ignored with one-character tokens, else treated as space ( I.B.M. &#x2192; ibm / Ph.D. &#x2192; ph d )</li>
</ul>

<hr>
<p><strong>Stopping</strong></p>
<ul>
<li>Function words (determiners, prepositions) have little meaning on their own</li>
<li>High occurrence frequencies</li>
<li>Treated as stopwords(i.e., removed)<br>
&#x2013; reduce index space, improve response time, improve effectiveness</li>
<li>Stopwordscan be important in combinations<br>
&#x2013; e.g., &#x201C;to be or not to be&#x201D; or &#x201C;the The&#x201D;</li>
<li>Stopwordlist can be created from high-frequency words or based on a standard list</li>
<li>Lists are customized for applications, domains, and even parts of documents<br>
&#x2013; &#x201C;click&#x201D; and &#x201C;here&#x201D; good stopwordsfor anchor text</li>
<li>Best policy is often to index all words in documents, make decisions about which words to use at query time</li>
</ul>

<p><strong>Stemming</strong></p>
<ul>
<li>Many morphological variations of words<br>
&#x2013; inflectional(plurals, tenses)<br>
&#x2013; derivational(making verbs into nouns etc.)</li>
<li>In most cases, these have the same or very similar meanings</li>
<li>Stemmers attempt to reduce morphological variations of words to a common stem<br>
&#x2013; usually involves removing suffixes<br>
&#x2013; Can include exceptions like mice &#x2192; mouse</li>
<li>Can be done at indexing time or as part of query processing (like stopwords)</li>
<li>Generallya small but significant effectiveness improvement<br>
&#x2013; can be crucial for some languages<br>
&#x2013; e.g., 5-10% improvement for English, up to 50% in Arabic<br>
<img src="https://ilmincho.me/content/images/2024/01/Screenshot-2024-01-03-184013-1.png" alt="Search Engines - Text Representation" loading="lazy"></li>
<li>Two basic types<br>
&#x2013; Dictionary-based: uses lists of related words<br>
&#x2013; Algorithmic: uses program to determine related words</li>
<li>Algorithmic stemmers<br>
&#x2013; suffix-s: remove &#x2018;s&#x2019; endings, assuming plural
<blockquote>
<p>-e.g., cats &#x2192; cat, lakes &#x2192; lake, wiis&#x2192; wii<br>
-Many false negatives: supplies &#x2192; supplie(cf. supply)<br>
-Some false positives: ups &#x2192; up</p>
</blockquote>
</li>
</ul>

<p><strong>Porter Stemmer</strong></p>
<ul>
<li>Algorithmic stemmer used in IR experiments since the 70s</li>
<li>Series of rules designed to remove the longest possible suffix at each step</li>
<li>Effective in IR system evaluations</li>
<li>Produces stems not words</li>
<li>Makes a number of errors and difficult to modify</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/1.png" alt="Search Engines - Text Representation" loading="lazy"></p>
<p><img src="https://ilmincho.me/content/images/2024/01/2.png" alt="Search Engines - Text Representation" loading="lazy"></p>

<hr>
<p><strong>Text Statistics</strong></p>
<p><strong>Zipf&#x2019;s Law</strong></p>
<ul>
<li>Distribution of word frequencies is very skewed<br>
&#x2013; a few words occur very often, many words hardly ever occur<br>
&#x2013; e.g., two most common words (&#x201C;the&#x201D;, &#x201C;of&#x201D;) make up about 10% of all word occurrences in text documents<br>
&#x2013; e.g., almost half of the terms occur once</li>
<li>Zipf&#x2019;s&#x201C;law&#x201D; (more generally, a &#x201C;power law&#x201D;):<br>
&#x2013; observation that rank (r) of a word times its frequency (f) is approximately a constant (k) / assuming words are ranked in order of decreasing frequency<br>
&#x2013; i.e., r&#xB7;f&#x2248;k or r&#xB7;Pr&#x2248;c, where Pr is probability of word occurrence and c&#x2248; 0.1 for English<br>
<img src="https://ilmincho.me/content/images/2024/01/z.png" alt="Search Engines - Text Representation" loading="lazy"><br>
<img src="https://ilmincho.me/content/images/2024/01/s.png" alt="Search Engines - Text Representation" loading="lazy"></li>
</ul>

<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://ilmincho.me/content/images/2024/01/image-18.png" class="kg-image" alt="Search Engines - Text Representation" loading="lazy" width="864" height="707" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-18.png 600w, https://ilmincho.me/content/images/2024/01/image-18.png 864w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Distributions by counts / Align using probabilities / c= P&#xB7;r</span></figcaption></figure>
<p>What else does Zipf tell us?</p>
<ul>
<li>We know that the most common word<br>
accounts for about 10% of the total<br>
occurrences<br>
&#x2013; r=1, c=0.1, so P(r) = 0.1/1 = 10%</li>
<li>How often does the second most frequent<br>
term occur? r*Pr = c, 2pr= 0.1 -&gt; Pr = 0.12 = 0.05</li>
<li>How many words occur 10 times? 3 times ?</li>
</ul>
<p><img src="https://ilmincho.me/content/images/2024/01/f.png" alt="Search Engines - Text Representation" loading="lazy"></p>

<p><strong>Heaps&#x2019; Law</strong></p>
<ul>
<li>Predictions for TREC collections are accurate for large numbers of words<br>
&#x2013; e.g., first 10,879,522 words of the AP89 collection scanned<br>
&#x2013; prediction is 100,151 unique words<br>
&#x2013; actual number is 100,024</li>
<li>Predictions for small numbers of words (i.e. &lt; 1000) are much worse</li>
</ul>

<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-19.png" class="kg-image" alt="Search Engines - Text Representation" loading="lazy" width="1096" height="812" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-19.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-19.png 1000w, https://ilmincho.me/content/images/2024/01/image-19.png 1096w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/IlMinCho/SE-Tokenization?ref=ilmincho.me"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - IlMinCho/SE-Tokenization</div><div class="kg-bookmark-description">Contribute to IlMinCho/SE-Tokenization development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Search Engines - Text Representation"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">IlMinCho</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/3f1215cbca5b353ad146cbc72b380482a4bc351c5fdc960fdb315c0cd46c5d7c/IlMinCho/SE-Tokenization" alt="Search Engines - Text Representation"></div></a></figure>
<p>&#x2013; Tokenization (spaces or fancy)<br>&#x2013; Stopping (not or with a list)<br>&#x2013; Stemming (not or Porter steps 1a-1c)<br>&#x2013; Input (gzip!): train, S&amp;S<br>&#x2013; Output: Prefix / Tokens, heaps, stats</p>
<hr>
<p><strong>Analysis</strong></p>
<ol><li>Run your program with fancy tokenization, stopping, and Porter stemming on&#xA0;<em>sense-and-sensibility.gz</em>&#xA0;and look at the&#xA0;-tokens.txt&#xA0;-stats.txt&#xA0;file to see the most frequent terms from&#xA0;<em>Sense and Sensibility</em>. Are the top terms relevant to the story or do they seem like everyday words that aren&apos;t particularly to the novel? Support your answer with examples. You may find it useful to skim the&#xA0;<a href="https://en.wikipedia.org/wiki/Sense_and_Sensibility?ref=ilmincho.me">summary on Wikipedia</a>&#xA0;to know what words are part of the story.</li></ol>
<p>Based on my data, the most frequently found word was her at number 2561. In fact, it is difficult to find a big connection because it is a word that appears in most novels, but in this novel, two sisters named Elinor and Marianne appear as the main characters, and considering this information, it can be inferred that a woman is the main character.</p>
<ol start="2"><li>Are there any of those top terms&#xA0;that should have been stopwords? Do the top terms or the list of all tokens suggest any changes to the tokenizing or stemming rules? What are they and why should they be made?</li></ol>
<p>Among the top terms, words such as i, not, you, had, but, have, all, so, my, which, could, no... are unnecessary words to grasp the contents of the novel. These are words that can appear in any novel you read, so we don&apos;t need them to get information about the content. However, stopwords need to be modified for the purpose you are trying to get via stat. If we add the stopwords mentioned above, we get a value that ranks the names of characters like Elinor and Marianne higher. In addition, it would be nice not to add additional tokenizing or stemming rules.</p>
<ol start="3"><li>Figure 4.4. in the textbook (p. 82) displays a graph of vocabulary growth for the TREC GOV2 collection. Create a similar graph for&#xA0;<em>Sense and Sensibility</em>&#xA0;and upload an image of your graph. Note that you should be able to use the -heaps.txt file to generate the graph.</li></ol>
<p>This is a graph using the heap data of Sense and Sensibility, the x-axis is the number of tokens, and the y-axis shows the number of unique tokens.</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-4.png" class="kg-image" alt="Search Engines - Text Representation" loading="lazy" width="974" height="384" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-4.png 600w, https://ilmincho.me/content/images/2024/01/image-4.png 974w" sizes="(min-width: 720px) 720px"></figure>
<ol start="4"><li>Does&#xA0;<em>Sense and Sensibility</em>&#xA0;follow Heaps Law? Why do you think so or think not?</li></ol>
<p>This follows the heap&apos;s law. Looking at the data, as the number of tokens increases, the number of unique tokens continues to increase. And since the increasing rate is gradually decreasing, it can be seen as a case of heap&apos;s law. Additionally, looking at the graph, it increases relatively steeply at the beginning and gradually flattens as the number of tokens increases, which is a model of heap&apos;s law.</p>
<hr>
<p>Reference: <a href="https://ciir.cs.umass.edu/~allan/?ref=ilmincho.me">Prof. James Allan</a></p>
<hr>
<p></p>]]></content:encoded></item><item><title><![CDATA[Search Engines - Information Retrieval]]></title><description><![CDATA[<hr>
<p><strong>Information Retrieval</strong><br>&#x201C;Information retrieval is a field concerned with the structure, analysis, organization, storage, searching, and retrieval of information.&#x201D;(Salton, 1968)<br><br>- General definition that can be applied to many types of information and search applications</p>
<p>- Primary focus of IR since the 50s has been on textand</p>]]></description><link>https://ilmincho.me/search-se-ir/</link><guid isPermaLink="false">6595e0588e5607047537e1b1</guid><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Ilmin Cho]]></dc:creator><pubDate>Mon, 13 Mar 2023 21:31:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXJjaCUyMGVuZ2luZXN8ZW58MHx8fHwxNzA0MzIzMjI3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<hr>
<img src="https://images.unsplash.com/photo-1553895501-af9e282e7fc1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXJjaCUyMGVuZ2luZXN8ZW58MHx8fHwxNzA0MzIzMjI3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Search Engines - Information Retrieval"><p><strong>Information Retrieval</strong><br>&#x201C;Information retrieval is a field concerned with the structure, analysis, organization, storage, searching, and retrieval of information.&#x201D;(Salton, 1968)<br><br>- General definition that can be applied to many types of information and search applications</p>
<p>- Primary focus of IR since the 50s has been on textand documents</p>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-5.png" class="kg-image" alt="Search Engines - Information Retrieval" loading="lazy" width="1268" height="855" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-5.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-5.png 1000w, https://ilmincho.me/content/images/2024/01/image-5.png 1268w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Basic Approach to IR</strong></p>
<ol><li>Most (but not all!) successful approaches are statistical<ul><li>Directly, or an effort to capture and use probabilities</li></ul></li><li>Why not natural language understanding?<ul><li>i.e., computer understands docs and query and matches them</li><li>State of the art is brittle in unrestricted domains</li><li>Can be highly successful in predictable settings, though</li><li>ChatGPTsuggests things are improving, but it still makes plenty of mistakes (and doesn&#x2019;t really &#x201C;understand&#x201D; anything)</li></ul></li><li>Could use manually assigned headings<ul><li>e.g., Library of Congress headings, Dewey Decimal headings</li><li>Hard to predict what headings are &#x201C;interesting&#x201D;</li><li>Expensive and human agreement is not good</li></ul></li></ol>
<p>&#x201C;Bag of Words&#x201D;</p>
<ul>
<li>An effective and popular approach</li>
<li>Compares words without regard to order</li>
<li>Consider reordering words in a headline
<ul>
<li>Random: beating takes points falling another Dow 355</li>
<li>Alphabetical: 355 another beating Dow falling points</li>
<li>&#x201C;Interesting&#x201D;: Dow points beating falling 355 another</li>
<li>Actual: Dow takes another beating, falling 355 points</li>
</ul>
</li>
</ul>

<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-6.png" class="kg-image" alt="Search Engines - Information Retrieval" loading="lazy" width="1103" height="878" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-6.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-6.png 1000w, https://ilmincho.me/content/images/2024/01/image-6.png 1103w" sizes="(min-width: 720px) 720px"></figure>
<p><strong>Statistical language model</strong></p>
<ul>
<li>
<p>Document comes from a topic</p>
</li>
<li>
<p>Topic (unseen) describes how words appear in documents on the topic</p>
</li>
<li>
<p>Use document to guesswhat the topic looks like<br>
-Words common in document are common in topic<br>
-Words not in document much less likely to be in the topic<br>
<img src="https://ilmincho.me/content/images/2024/01/Screenshot-2024-01-03-175216-2.png" alt="Search Engines - Information Retrieval" loading="lazy"></p>
</li>
<li>
<p>Assign probability to words based on document</p>
<ul>
<li>P(w|Topic) &#x2248;P(w|D) = tf(w,D) / len(D)</li>
</ul>
</li>
<li>
<p>Index estimated topics</p>
</li>
</ul>

<hr>
<p><strong>What does LM look like implemented?</strong></p>
<ul>
<li>
<p>Hypothesis of statistical language model<br>
&#x2013; Documents with topic models that are highly likely to generate the query are more likely to be relevant (to query)</p>
</li>
<li>
<p>Index collection in advance (chs. 3&amp;4)<br>
&#x2013; Convert documents into set of P(ti|D)<br>
&#x2013; Store in an appropriate data structure for fast access</p>
</li>
<li>
<p>Query arrives (ch.6&amp;7)<br>
&#x2013; Convert it to set P(qi|D)<br>
&#x2013; Calculate P(Q|TD) for all documents<br>
&#x2013; Sort documents by their topics&#x2019; probability<br>
&#x2013; Present ranked list</p>
</li>
<li>
<p>Generally good results (ch.8) though not with version of the model that is this simple (ch.5)</p>
</li>
</ul>

<hr>
<figure class="kg-card kg-image-card"><img src="https://ilmincho.me/content/images/2024/01/image-15.png" class="kg-image" alt="Search Engines - Information Retrieval" loading="lazy" width="1088" height="827" srcset="https://ilmincho.me/content/images/size/w600/2024/01/image-15.png 600w, https://ilmincho.me/content/images/size/w1000/2024/01/image-15.png 1000w, https://ilmincho.me/content/images/2024/01/image-15.png 1088w" sizes="(min-width: 720px) 720px"></figure>
<hr>
<p><strong>Some issues that arise in IR</strong></p>
<ul>
<li>
<p>Text representation<br>
&#x2013; what makes a &#x201C;good&#x201D; representation?<br>
&#x2013; how is a representation generated from text?<br>
&#x2013; what are retrievable objects and how are they organized?</p>
</li>
<li>
<p>Representing information needs<br>
&#x2013; what is an appropriate query language?<br>
&#x2013; how can interactive query formulation and refinement be supported?</p>
</li>
<li>
<p>Comparing representations<br>
&#x2013; what is a &#x201C;good&#x201D; model of retrieval?<br>
&#x2013; how is uncertainty represented?</p>
</li>
<li>
<p>Evaluating effectiveness of retrieval<br>
&#x2013; what are good metrics?<br>
&#x2013; what constitutes a good experimental test bed?</p>
</li>
</ul>

<hr>
<p>Reference: <a href="https://ciir.cs.umass.edu/~allan/?ref=ilmincho.me">Prof. James Allan</a></p>
<hr>
<p></p>]]></content:encoded></item></channel></rss>