diff --git a/dist/api/blog/blogData.php b/dist/api/blog/blogData.php
index 946828d..cfa375b 100644
--- a/dist/api/blog/blogData.php
+++ b/dist/api/blog/blogData.php
@@ -673,9 +673,17 @@ EOD;
*/
public function changeHTMLSrc(string $body, string $to, string $from): string
{
+// $body = preg_replace_callback('/>([^<]+)', function($matches) {
+// // Convert special characters to HTML entities
+// return '>' . htmlentities(trim($matches[1]), ENT_QUOTES | ENT_HTML5, 'UTF-8') . '<';
+// }, $body);
+
$htmlDoc = new DOMDocument();
- $body = mb_convert_encoding($body, "HTML-ENTITIES", "UTF-8");
- $htmlDoc->loadHTML($body, LIBXML_NOERROR);
+
+ // Load the raw HTML content into DOMDocument
+ @$htmlDoc->loadHTML($body, LIBXML_NOERROR);
+
+ // Get the body and process images
$doc = $htmlDoc->getElementsByTagName('body')->item(0);
$imgs = $doc->getElementsByTagName('img');
@@ -688,9 +696,11 @@ EOD;
$srcList[] = $src;
$fileName = basename($src);
+ // Update the src attribute to the new location
$img->setAttribute("src", substr($to, 2) . $fileName);
}
+ // Rename files and clean up old ones
$files = scandir($from);
foreach ($files as $file)
{
@@ -706,15 +716,36 @@ EOD;
}
}
+ // Process the HTML content for output
$newBody = '';
foreach ($doc->childNodes as $node)
{
- $newHTML = $htmlDoc->saveHTML($node);
- $newBody .= mb_convert_encoding($newHTML, "UTF-8", mb_detect_encoding($newHTML));
+ // Only convert text nodes to HTML entities
+ if ($node->nodeType === XML_TEXT_NODE)
+ {
+ $newBody .= $this->convertToHtmlEntities($node->nodeValue); // Convert text nodes
+ }
+ else
+ {
+ $newBody .= $htmlDoc->saveHTML($node); // Keep HTML tags intact
+ }
}
+
return $newBody;
}
+ /**
+ * Convert all characters in a string to HTML entities while leaving HTML tags intact.
+ * @param string $text - The text to convert
+ * @return string - The converted text with HTML entities
+ */
+ private function convertToHtmlEntities(string $text): string
+ {
+ // Convert characters to HTML entities using mb_encode_numericentity
+ return htmlentities($text, ENT_QUOTES | ENT_HTML5, 'UTF-8');
+ }
+
+
/**
* Get all posts with the given category
* @param string $category - Category of the post
diff --git a/dist/api/user/userRoutes.php b/dist/api/user/userRoutes.php
index 254b3cb..5d30b00 100644
--- a/dist/api/user/userRoutes.php
+++ b/dist/api/user/userRoutes.php
@@ -181,7 +181,7 @@ class userRoutes implements routesInterface
$inactive = 60 * 60 * 48; // 2 days
$_SESSION["timeout"] = time() + $inactive;
- return $response->withHeader("Location", "https://rohitpai.co.uk/editor/")->withStatus(302);
+ return $response->withHeader("Location", "https://rohitpai.co.uk/editor/")->withStatus(302);
}
$response->getBody()->write(json_encode(array("error" => "Unauthorised")));
diff --git a/dist/blog/css/main.css b/dist/blog/css/main.css
index f465dbd..4fa9a9c 100644
--- a/dist/blog/css/main.css
+++ b/dist/blog/css/main.css
@@ -1 +1 @@
-/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--mainHue:80;--mainSat:60%;--mainLight:50%;--primaryDefault:hsla(var(--mainHue), var(--mainSat), var(--mainLight), 1);--primaryHover:hsla(var(--mainHue), var(--mainSat), calc(var(--mainLight) - 10%), 1);--timelineItemBrdr:hsla(var(--mainHue), var(--mainSat), calc(var(--mainLight) - 20%), 1);--errorDefault:hsla(0, calc(var(--mainSat) + 10%), calc(var(--mainLight) + 10%), 1);--errorHover:hsla(0, calc(var(--mainSat) + 10%), calc(var(--mainLight) - 10%), 1);--grey:hsla(0, 0%, 39%, 1);--notAvailableDefault:hsla(0, 0%, 39%, 1);--notAvailableHover:hsla(0, 0%, 32%, 1);--mutedGrey:hsla(0, 0%, 75%, 1);--mutedBlack:hsla(0, 0%, 0%, 0.25);--mutedGreen:hsla(var(--mainHue), var(--mainSat), calc(var(--mainLight) + 20%), 1);--navBack:hsla(0, 0%, 30%, 1);--titleFS:2.25rem;--generalFS:1.125rem;--headingFS:1.5rem}*{box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Noto Sans KR,sans-serif;font-style:normal;font-weight:500;font-size:var(--generalFS);line-height:1.625rem}a:visited{color:inherit}h1,nav{font-family:Share Tech Mono,monospace;font-style:normal;font-weight:400;font-size:var(--titleFS);line-height:2.5625rem;text-transform:lowercase}h2{font-family:Noto Sans KR,sans-serif;font-style:normal;font-weight:500;font-size:var(--headingFS);line-height:2.1875rem}a.btn,button.btn,div.form input[type=submit],form input[type=submit]{text-decoration:none;display:inline-flex;padding:1em 2em;border-radius:.625em;border:.3215em solid var(--primaryDefault);color:#fff;text-align:center;align-items:center;max-height:4em}button.btn{padding:1.2em 2.2em}div.form input[type=submit],form input[type=submit]{padding:1.1em 2em}a.btn:hover,button.btn:hover,div.form input[type=submit]:hover,form input[type=submit]:hover{border:.3215em solid var(--primaryHover)}a.btn:hover::after,a.btn:hover::before{visibility:hidden}a.btnPrimary,button.btnPrimary,div.form input[type=submit],form input[type=submit]{background-color:var(--primaryDefault);cursor:pointer}a.btnOutline,button.btnOutline{background:#fff;color:var(--primaryDefault)}a.btnPrimary[disabled],button.btnPrimary[disabled]{pointer-events:none;background:var(--notAvailableDefault);border:.3215em solid var(--notAvailableDefault)}a.btnPrimary[disabled]:hover,button.btnPrimary[disabled]:hover{background:var(--notAvailableHover);border:.3215em solid var(--notAvailableHover)}a.btnPrimary:hover,button.btnPrimary:hover,div.form input[type=submit]:hover,form input[type=submit]:hover{background:var(--primaryHover);border:.3215em solid var(--primaryHover)}a.btn:active,button.btn:active,div.form input[type=submit]:active,form input[type=submit]:active{padding:.8rem 1.8rem}.boxShadowOut:hover{box-shadow:0 6px 4px 0 var(--mutedBlack)}.boxShadowIn:active{box-shadow:inset 0 6px 4px 0 var(--mutedBlack)}.textShadow:hover{text-shadow:0 6px 4px var(--mutedBlack)}div.form .formControl input:not([type=submit]).invalid:invalid,form .formControl input:not([type=submit]).invalid:invalid,form .formControl textarea.invalid:invalid{border:.3125em solid var(--errorDefault)}div.form .formControl input:not([type=submit]).invalid:invalid:focus,div.form .formControl textarea.invalid:invalid:focus,form .formControl input:not([type=submit]).invalid:invalid:focus,form .formControl textarea.invalid:invalid:focus{border:.3125em solid var(--errorHover);box-shadow:0 4px 2px 0 var(--mutedBlack)}div.form .formControl input:not([type=submit]),form .formControl input:not([type=submit]){height:3em}div.form .formControl,form .formControl{width:100%;display:flex;flex-direction:column;justify-content:flex-start}div.form .formControl.passwordControl,form .formControl.passwordControl{display:block}div.form .formControl .ck.ck-editor__main .ck-content,div.form .formControl .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,div.form .formControl input:not([type=submit]),div.menu input:not([type=submit]),form .formControl .ck.ck-editor__main .ck-content,form .formControl .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,form .formControl input:not([type=submit]),form .formControl textarea{width:100%;border:.3125em solid var(--primaryDefault);background:0 0;outline:0;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:0 .5em}div.form .formControl textarea,form .formControl textarea{padding:.5em}div.form .formControl input:not([type=submit]).invalid:invalid,form .formControl input:not([type=submit]).invalid:invalid,form .formControl textarea.invalid:invalid{border:.3125em solid var(--errorDefault)}div.form .formControl input:not([type=submit]).invalid:invalid:focus,form .formControl input:not([type=submit]).invalid:invalid:focus,form .formControl textarea.invalid:invalid:focus{border:.3125em solid var(--errorHover);box-shadow:0 4px 2px 0 var(--mutedBlack)}div.form .formControl input:not([type=submit]):focus,div.form .formControl input:not([type=submit]):hover,div.menu input:not([type=submit]):focus,div.menu input:not([type=submit]):hover,form .formControl input:not([type=submit]):focus,form .formControl input:not([type=submit]):hover,form .formControl textarea:focus,form .formControl textarea:hover{border:.3125em solid var(--primaryHover)}div.form .formControl input:not([type=submit]),form .formControl input:not([type=submit]){height:3em}div.form .formControl i.fa-eye,form .formControl i.fa-eye,form .formControl i.fa-eye-slash{margin-left:-40px;cursor:pointer;color:var(--primaryDefault)}form .formControl input:not([type=submit]):focus+i.fa-eye,form .formControl input:not([type=submit]):focus+i.fa-eye-slash{color:var(--primaryHover)}div.form .formControl .checkContainer,form .formControl .checkContainer{display:block;position:relative;margin-bottom:1.25em;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.form .formControl .checkContainer input,form .formControl .checkContainer input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}div.form .formControl .checkContainer .checkmark,form .formControl .checkContainer .checkmark{position:absolute;top:1.25em;left:0;height:25px;width:25px;background-color:var(--mutedGrey)}div.form .formControl .checkContainer:hover input~.checkmark,form .formControl .checkContainer:hover input~.checkmark{background-color:var(--grey)}div.form .formControl .checkContainer input:checked~.checkmark,form .formControl .checkContainer input:checked~.checkmark{background-color:var(--primaryDefault)}div.form .formControl .checkContainer input:checked:hover~.checkmark,form .formControl .checkContainer input:checked:hover~.checkmark{background-color:var(--primaryHover)}div.form .formControl .checkContainer .checkmark:after,form .formControl .checkContainer .checkmark:after{content:"";position:absolute;display:none}div.form .formControl .checkContainer input:checked~.checkmark:after,form .formControl .checkContainer input:checked~.checkmark:after{display:block}div.form .formControl .checkContainer .checkmark:after,form .formControl .checkContainer .checkmark:after{left:9px;top:5px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}form .formControl input[type=file]{padding:0;cursor:pointer}form .formControl input[type=file]::file-selector-button{background-color:var(--primaryDefault);color:#fff;border:0;border-right:5px solid var(--mutedBlack);padding:15px;margin-right:20px;-webkit-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s}form .formControl input[type=file]:hover::file-selector-button{background-color:var(--primaryHover)}section#about,section#curriculumVitae h1{padding:0 5rem}a{color:#000;text-decoration:none;text-transform:lowercase}a.link{padding:0 .5em}a.link::after,a.link::before{visibility:visible;position:absolute;margin-top:1px}.nav a.link::after,.nav a.link::before,nav a.link::after,nav a.link::before{visibility:hidden}a.link::before{content:' <';margin-left:-.5em}a.link::after{content:'> '}a.link:hover{font-weight:700}.nav a.link:hover::after,.nav a.link:hover::before,nav a.link:hover::after,nav a.link:hover::before{visibility:visible}.nav a.link:hover,nav a.link:hover{font-weight:400}div.error,div.success{color:#fff;padding:.5em .8em;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;display:flex;justify-content:center;align-items:center;align-self:flex-start;flex-direction:row-reverse;position:relative;height:75px;visibility:visible;overflow:hidden;-webkit-transition:all .5s ease-in-out;-moz-transition:all .5s ease-in-out;-ms-transition:all .5s ease-in-out;-o-transition:all .5s ease-in-out;transition:all .5s ease-in-out;opacity:1;margin-top:1em}div.error{background:var(--errorDefault)}div.success{background-color:var(--primaryHover)}div.error button,div.success button{border:none;background:0 0;outline:0;cursor:pointer;color:#fff;font-size:1.25rem;margin-top:-5px;position:absolute;transform:translate(0,0);transform-origin:0 0;right:10px;top:10px}div.error.hidden,div.success.hidden{opacity:0;visibility:hidden;height:0;margin:0;padding:0}div.error button:hover,div.success button:hover{text-shadow:-1px 2px var(--mutedBlack)}header{background:#6a6a6a url(../../imgs/hero.jpg) no-repeat bottom;background-size:cover;height:40%;color:#fff;backdrop-filter:grayscale(100%);position:relative}nav{display:flex;flex-direction:row;justify-content:space-between;padding:.25em;position:fixed;top:0;width:100%;transition:background-color .4s ease-in;color:#fff;z-index:100000000000000000000000000}nav.scrolled{background-color:var(--navBack)}nav #nav-check{display:none}nav .nav-btn{display:none}nav h1{margin:0}nav a{text-decoration:none;color:#fff}nav>h1{margin-left:.4em}nav ul{display:flex;flex-direction:row;gap:1em;margin:0 .5em 0 0;justify-content:flex-end;align-items:flex-end}nav ul li{list-style:none}nav ul li span{visibility:hidden}nav ul li .active::after,nav ul li .active::before{visibility:visible}header div{display:flex;flex-direction:column;justify-content:center;align-items:center;padding-top:10em}header div .btn{margin:2em 0}header div button{background:0 0;border:none;display:inline-block;text-align:center;text-decoration:none;font-size:2rem;cursor:pointer}i.fa-chevron-down{color:hsla(0,0%,67%,.58);font-size:3.75em;margin:1.5rem 0}div h1 span{visibility:visible;animation:caret 1s steps(1) infinite}@keyframes caret{50%{visibility:hidden}}@media screen and (max-width:75em){nav{display:block;height:50px;width:100%;background-color:var(--navBack);position:fixed;top:0;padding:0}nav a h1{margin-left:1ch}nav .nav-btn{display:inline-block;position:absolute;right:75px;top:0}nav ul{position:fixed;display:block;width:100%;background-color:#333;transition:all .4s ease-in;overflow-y:hidden;padding-left:.5em;margin-top:7px}nav ul li a{display:block;width:100%;transform:translateX(-30px);transition:all .4s ease-in;opacity:0}.nav-btn label{display:inline-block;cursor:pointer;width:60px;height:50px;position:fixed;-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);-webkit-transition:.5s ease-in;-moz-transition:.5s ease-in;-o-transition:.5s ease-in;transition:.5s ease-in}.nav-btn label span{display:block;position:absolute;height:5px;width:100%;background-color:#fff;opacity:1;right:0;top:20px;-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);-webkit-transition:.25s ease-in;-moz-transition:.25s ease-in;-o-transition:.25s ease-in;transition:.25s ease-in}nav #nav-check:not(:checked)~ul{height:auto;max-height:0}nav #nav-check:not(:checked)~.nav-btn label span:nth-child(1){top:8px;-webkit-transform-origin:left center;-moz-transform-origin:left center;-o-transform-origin:left center;transform-origin:left center}nav #nav-check:not(:checked)~.nav-btn label span:nth-child(2){top:23px;-webkit-transform-origin:left center;-moz-transform-origin:left center;-o-transform-origin:left center;transform-origin:left center}nav #nav-check:not(:checked)~.nav-btn label span:nth-child(3){top:38px;-webkit-transform-origin:left center;-moz-transform-origin:left center;-o-transform-origin:left center;transform-origin:left center}nav #nav-check:checked~.nav-btn label,nav .nav-btn label:hover{background-color:rgba(-1,0,0,.3)}nav #nav-check:checked~ul{max-height:50vh;overflow-y:hidden}nav #nav-check:checked~ul li a{opacity:1;transform:translateX(0)}nav #nav-check:checked~ul li:nth-child(1) a{transition-delay:.15s}nav #nav-check:checked~ul li:nth-child(2) a{transition-delay:.25s}nav #nav-check:checked~ul li:nth-child(3) a{transition-delay:.35s}nav #nav-check:checked~ul li:nth-child(4) a{transition-delay:.45s}nav #nav-check:checked~ul li:nth-child(5) a{transition-delay:.55s}nav #nav-check:checked~.nav-btn label span:first-child{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}nav #nav-check:checked~.nav-btn label span:nth-child(2){width:0;opacity:0}nav #nav-check:checked~.nav-btn label span:last-child{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}}footer{background-color:var(--primaryDefault);margin-top:5em;padding:2em;display:flex;color:#fff}footer .spacer{width:100%;margin-right:auto}footer .nav{width:100%;margin-right:auto;display:flex;flex-direction:row;justify-content:center;align-items:center}footer .nav ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;justify-content:space-around}footer .nav ul a{color:#fff}footer p{margin:auto;width:100%;text-align:center}footer .button{margin-left:auto;width:100%;text-align:center}footer .button button{border:5px solid #fff;background:0 0;font-size:3em;padding:.5rem 1rem;width:2em;color:#fff;-webkit-border-radius:.25em;-moz-border-radius:.25em;border-radius:.25em;cursor:pointer}.profile{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;max-width:70%}svg{width:2em;fill:var(--primaryDefault);font-size:2em}footer{margin-top:0}section#individualPost{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch}div.byLine{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1em}div.byLine h3:last-child{border-left:2px solid var(--mutedBlack);padding-left:1em;display:flex;flex-direction:row;justify-content:center;align-items:center;gap:1em}div.byLine h3:last-child a{padding:0 1em}div.cover{width:100%;height:20rem;background-position:center;background-size:cover;border-radius:10px;box-shadow:0 4px 2px 0 var(--mutedBlack)}div.mainContent{border-right:5px solid var(--mutedGrey);min-height:100%;width:85%;display:flex;flex-direction:column;justify-content:space-between;align-items:stretch}article{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 2em}article a{padding:0 1em}article a::after,article a::before{visibility:visible;position:absolute;margin-top:1px}article a.btn::after,article a.btn::before{display:none}article a::before{content:' <';margin-left:-.5em}article a::after{content:'>'}article a:hover{font-weight:700}article h1{margin-bottom:.5em}article h3{margin-top:0}.otherPosts h3,article h3:not(div.byLine>h3){font-weight:700}article .media{align-self:center}article table td,article table th{border:1px solid #ddd;padding:8px}article table tr:nth-child(even){background-color:#f2f2f2}article table tr:hover{background-color:#ddd}article .table{margin:0}aside.sideContent{display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-end;width:15%;align-self:flex-start}div.authorInfo{display:grid;grid-template-columns:2fr 1fr;grid-template-rows:repeat(4,auto);padding-left:1em;padding-top:.5em;border-bottom:5px solid var(--mutedGrey);width:100%}div.authorInfo .picture{display:flex;flex-direction:column;justify-content:center;align-items:center;grid-row:span 3}div.authorInfo h3{grid-column:span 2}div.feeds,div.newsletter,div.otherPosts{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 1em 1em;border-bottom:5px solid var(--mutedGrey);width:100%}div.feeds a,div.otherPosts a{padding:.5em 1em}div.newsletter div.form input[type=submit]{margin-top:1em;padding:.5em 1em}div.feeds .icons{display:flex;flex-direction:row;justify-content:space-around;align-items:flex-start;gap:.5em;flex-wrap:wrap-reverse}div.feeds h2{margin-bottom:0}div.feeds i.fa-solid.fa-rss{font-size:2em}div.feeds img.atom,div.feeds img.json{width:2em}div.categories{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 1em 1em;width:100%}div.form input[type=submit]{align-self:flex-start}.image img,.image_resized img{max-width:100%;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;box-shadow:0 4px 2px 0 var(--mutedBlack)}.image{justify-self:center;align-self:center}.image-style-side{justify-self:flex-end;align-self:flex-end}section.comments{padding:0 2em 2em}.banner{max-width:30%;box-shadow:0 6px 4px 0 var(--mutedBlack);-webkit-border-radius:.625rem;-moz-border-radius:.625rem;border-radius:.625rem;border:2px solid var(--mutedGrey)}h2{font-family:Share Tech Mono,monospace;font-style:normal;font-weight:400;font-size:var(--headingFS);line-height:2.5625rem;text-transform:lowercase}h3{font-family:Noto Sans KR,sans-serif;font-style:normal;font-weight:500;font-size:var(--generalFS);line-height:2.1875rem}div.menu{width:100%;border-bottom:5px solid var(--mutedGrey)}div.menu input:not([type=submit]){width:auto;border-top-right-radius:0;border-bottom-right-radius:0}div.menu>ul{list-style:none;display:flex;flex-direction:row;justify-content:space-around}div.menu ul li{display:flex;flex-direction:row}div.menu ul li button.btn{padding:initial;border-radius:0 .5em .5em 0}div.menu ul li input:not([type=submit]):focus+button.btn,div.menu ul li:focus button.btn,div.menu ul li:hover button.btn{background:var(--primaryHover);border:.3215em solid var(--primaryHover)}div.menu ul li:focus input:not([type=submit]),div.menu ul li:hover input:not([type=submit]){border:.3215em solid var(--primaryHover)}section.largePost{display:flex;flex-direction:column;justify-content:space-evenly;align-items:flex-start;gap:2em;width:100%;padding:0 5em 1em}section.largePost:not(:last-child){border-bottom:5px solid var(--mutedGrey)}section.largePost .outerContent{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-around;align-items:center;gap:1em}section.largePost .outerContent>.content,section.largePost .outerContent>img{width:50%}section.largePost .outerContent .postContent{display:flex;flex-direction:column;justify-content:space-evenly;align-items:flex-start}section.largePost .outerContent .postContent h2{align-self:center}section.largePost .outerContent .postContent a{align-self:flex-end}#main .errorFof,#main .unsubscribe{display:table;width:100%;height:100dvh;text-align:center}#main .unsubscribe{height:50dvh}.centered{display:table-cell;vertical-align:middle}main>h1{padding-left:3em}section.catPosts .largePost{margin-bottom:3em}section.categories{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;margin-bottom:5em;row-gap:1em}section.categories .btnContainer{flex-basis:33.3333333%;display:flex;flex-direction:row;justify-content:center;align-items:center;flex-wrap:wrap}.policy{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding-left:5em;padding-bottom:5em}.policy h3{font-weight:700}.modal-container{display:block;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);box-sizing:border-box;z-index:9999999}.modal-container.hidden{display:none}.modal{position:fixed;right:0;bottom:0;width:40%;height:auto;max-height:90dvh;overflow:auto;margin:1.25em;padding:1.25em;box-sizing:border-box}.modal-content{background-color:#ddd;margin:auto;padding:20px;border:5px solid var(--primaryHover);width:100%;box-shadow:0 6px 4px 0 var(--mutedBlack)}.modal-content .flexRow{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;gap:1em;flex-wrap:wrap}@media screen and (max-width:90em){div.mainContent{width:80%}aside.sideContent{width:20%}}@media screen and (max-width:75em){div.menuBar .menu ul{flex-direction:column;align-items:center;padding-left:1.25em}div.menuBar .menu ul li input[type=search]{width:100%}.modal-content .flexRow{width:50%;flex-direction:column}section.largePost{padding:1em}section.largePost .outerContent{flex-direction:column;justify-content:center;align-items:center}.banner{max-width:50%}section.largePost .outerContent>.content,section.largePost .outerContent>img{width:90%}section#individualPost{flex-direction:column-reverse;justify-content:center;align-items:center}div.mainContent{width:100%;border-right:none}aside.sideContent{width:100%;flex-direction:row;align-items:stretch;justify-content:space-around;border-bottom:5px solid var(--mutedGrey);flex-wrap:wrap}aside.sideContent>div.authorInfo{grid-template-columns:4fr 1fr 1fr 1fr;flex-basis:100%}aside.sideContent>div.authorInfo .picture{grid-row:span 3}div.byLine{flex-direction:column;align-items:flex-start}div.byLine h3:last-child{border-left:none;padding-left:0}aside.sideContent>div.authorInfo h3{grid-column-start:2;grid-column-end:end;grid-row:3}aside.sideContent>div.categories{flex-basis:100%}aside.sideContent>div.otherPosts{border-bottom:5px solid var(--mutedGrey)}div.feeds,div.newsletter,div.otherPosts{justify-content:space-between;width:50%}aside.sideContent>div{border-right:5px solid var(--mutedGrey);flex-basis:50%}aside.sideContent>div:last-child{border-right:none}main>h1{padding-left:1em}}@media screen and (max-width:55em){.modal{width:90%}.modal-content{display:flex;flex-direction:column;justify-content:center;align-items:center}.banner{max-width:75%}aside.sideContent>div.authorInfo{grid-template-columns:2fr 1fr 1fr;grid-template-rows:1fr 1fr}aside.sideContent>div.authorInfo h3{grid-row:2}}@media screen and (max-height:38em) and (orientation:landscape){.modal{width:90%}.modal-content .flexRow{flex-direction:row;flex-wrap:nowrap}}@media screen and (max-width:30em){.profile{max-width:50%}section#individualPost{flex-direction:column}aside.sideContent{flex-direction:column;align-items:center;border-bottom:none}aside.sideContent>div.authorInfo{grid-template-columns:1fr 1fr 1fr;grid-template-rows:repeat(3,auto);border-top:5px solid var(--mutedGrey)}aside.sideContent>div.authorInfo .picture{grid-row:1;grid-column:span 3}aside.sideContent>div.authorInfo h3{grid-column:span 3}div.feeds,div.newsletter,div.otherPosts{width:100%}}
\ No newline at end of file
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--mainHue:80;--mainSat:60%;--mainLight:50%;--primaryDefault:hsla(var(--mainHue), var(--mainSat), var(--mainLight), 1);--primaryHover:hsla(var(--mainHue), var(--mainSat), calc(var(--mainLight) - 10%), 1);--timelineItemBrdr:hsla(var(--mainHue), var(--mainSat), calc(var(--mainLight) - 20%), 1);--errorDefault:hsla(0, calc(var(--mainSat) + 10%), calc(var(--mainLight) + 10%), 1);--errorHover:hsla(0, calc(var(--mainSat) + 10%), calc(var(--mainLight) - 10%), 1);--grey:hsla(0, 0%, 39%, 1);--notAvailableDefault:hsla(0, 0%, 39%, 1);--notAvailableHover:hsla(0, 0%, 32%, 1);--mutedGrey:hsla(0, 0%, 75%, 1);--mutedBlack:hsla(0, 0%, 0%, 0.25);--mutedGreen:hsla(var(--mainHue), var(--mainSat), calc(var(--mainLight) + 20%), 1);--navBack:hsla(0, 0%, 30%, 1);--titleFS:2.25rem;--generalFS:1.125rem;--headingFS:1.5rem}*{box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Noto Sans KR,sans-serif;font-style:normal;font-weight:500;font-size:var(--generalFS);line-height:1.625rem}a:visited{color:inherit}h1,nav{font-family:Share Tech Mono,monospace;font-style:normal;font-weight:400;font-size:var(--titleFS);line-height:2.5625rem;text-transform:lowercase}h2{font-family:Noto Sans KR,sans-serif;font-style:normal;font-weight:500;font-size:var(--headingFS);line-height:2.1875rem}a.btn,button.btn,div.form input[type=submit],form input[type=submit]{text-decoration:none;display:inline-flex;padding:1em 2em;border-radius:.625em;border:.3215em solid var(--primaryDefault);color:#fff;text-align:center;align-items:center;max-height:4em}button.btn{padding:1.2em 2.2em}div.form input[type=submit],form input[type=submit]{padding:1.1em 2em}a.btn:hover,button.btn:hover,div.form input[type=submit]:hover,form input[type=submit]:hover{border:.3215em solid var(--primaryHover)}a.btn:hover::after,a.btn:hover::before{visibility:hidden}a.btnPrimary,button.btnPrimary,div.form input[type=submit],form input[type=submit]{background-color:var(--primaryDefault);cursor:pointer}a.btnOutline,button.btnOutline{background:#fff;color:var(--primaryDefault)}a.btnPrimary[disabled],button.btnPrimary[disabled]{pointer-events:none;background:var(--notAvailableDefault);border:.3215em solid var(--notAvailableDefault)}a.btnPrimary[disabled]:hover,button.btnPrimary[disabled]:hover{background:var(--notAvailableHover);border:.3215em solid var(--notAvailableHover)}a.btnPrimary:hover,button.btnPrimary:hover,div.form input[type=submit]:hover,form input[type=submit]:hover{background:var(--primaryHover);border:.3215em solid var(--primaryHover)}a.btn:active,button.btn:active,div.form input[type=submit]:active,form input[type=submit]:active{padding:.8rem 1.8rem}.boxShadowOut:hover{box-shadow:0 6px 4px 0 var(--mutedBlack)}.boxShadowIn:active{box-shadow:inset 0 6px 4px 0 var(--mutedBlack)}.textShadow:hover{text-shadow:0 6px 4px var(--mutedBlack)}div.form .formControl input:not([type=submit]).invalid:invalid,form .formControl input:not([type=submit]).invalid:invalid,form .formControl textarea.invalid:invalid{border:.3125em solid var(--errorDefault)}div.form .formControl input:not([type=submit]).invalid:invalid:focus,div.form .formControl textarea.invalid:invalid:focus,form .formControl input:not([type=submit]).invalid:invalid:focus,form .formControl textarea.invalid:invalid:focus{border:.3125em solid var(--errorHover);box-shadow:0 4px 2px 0 var(--mutedBlack)}div.form .formControl input:not([type=submit]),form .formControl input:not([type=submit]){height:3em}div.form .formControl,form .formControl{width:100%;display:flex;flex-direction:column;justify-content:flex-start}div.form .formControl.passwordControl,form .formControl.passwordControl{display:block}div.form .formControl .ck.ck-editor__main .ck-content,div.form .formControl .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,div.form .formControl input:not([type=submit]),div.menu input:not([type=submit]),form .formControl .ck.ck-editor__main .ck-content,form .formControl .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,form .formControl input:not([type=submit]),form .formControl textarea{width:100%;border:.3125em solid var(--primaryDefault);background:0 0;outline:0;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:0 .5em}div.form .formControl textarea,form .formControl textarea{padding:.5em}div.form .formControl input:not([type=submit]).invalid:invalid,form .formControl input:not([type=submit]).invalid:invalid,form .formControl textarea.invalid:invalid{border:.3125em solid var(--errorDefault)}div.form .formControl input:not([type=submit]).invalid:invalid:focus,form .formControl input:not([type=submit]).invalid:invalid:focus,form .formControl textarea.invalid:invalid:focus{border:.3125em solid var(--errorHover);box-shadow:0 4px 2px 0 var(--mutedBlack)}div.form .formControl input:not([type=submit]):focus,div.form .formControl input:not([type=submit]):hover,div.menu input:not([type=submit]):focus,div.menu input:not([type=submit]):hover,form .formControl input:not([type=submit]):focus,form .formControl input:not([type=submit]):hover,form .formControl textarea:focus,form .formControl textarea:hover{border:.3125em solid var(--primaryHover)}div.form .formControl input:not([type=submit]),form .formControl input:not([type=submit]){height:3em}div.form .formControl i.fa-eye,form .formControl i.fa-eye,form .formControl i.fa-eye-slash{margin-left:-40px;cursor:pointer;color:var(--primaryDefault)}form .formControl input:not([type=submit]):focus+i.fa-eye,form .formControl input:not([type=submit]):focus+i.fa-eye-slash{color:var(--primaryHover)}div.form .formControl .checkContainer,form .formControl .checkContainer{display:block;position:relative;margin-bottom:1.25em;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.form .formControl .checkContainer input,form .formControl .checkContainer input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}div.form .formControl .checkContainer .checkmark,form .formControl .checkContainer .checkmark{position:absolute;top:1.25em;left:0;height:25px;width:25px;background-color:var(--mutedGrey)}div.form .formControl .checkContainer:hover input~.checkmark,form .formControl .checkContainer:hover input~.checkmark{background-color:var(--grey)}div.form .formControl .checkContainer input:checked~.checkmark,form .formControl .checkContainer input:checked~.checkmark{background-color:var(--primaryDefault)}div.form .formControl .checkContainer input:checked:hover~.checkmark,form .formControl .checkContainer input:checked:hover~.checkmark{background-color:var(--primaryHover)}div.form .formControl .checkContainer .checkmark:after,form .formControl .checkContainer .checkmark:after{content:"";position:absolute;display:none}div.form .formControl .checkContainer input:checked~.checkmark:after,form .formControl .checkContainer input:checked~.checkmark:after{display:block}div.form .formControl .checkContainer .checkmark:after,form .formControl .checkContainer .checkmark:after{left:9px;top:5px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}form .formControl input[type=file]{padding:0;cursor:pointer}form .formControl input[type=file]::file-selector-button{background-color:var(--primaryDefault);color:#fff;border:0;border-right:5px solid var(--mutedBlack);padding:15px;margin-right:20px;-webkit-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s}form .formControl input[type=file]:hover::file-selector-button{background-color:var(--primaryHover)}section#about,section#curriculumVitae h1{padding:0 5rem}a{color:#000;text-decoration:none;text-transform:lowercase}a.link{padding:0 .5em}a.link::after,a.link::before{visibility:visible;position:absolute;margin-top:1px}.nav a.link::after,.nav a.link::before,nav a.link::after,nav a.link::before{visibility:hidden}a.link::before{content:' <';margin-left:-.5em}a.link::after{content:'> '}a.link:hover{font-weight:700}.nav a.link:hover::after,.nav a.link:hover::before,nav a.link:hover::after,nav a.link:hover::before{visibility:visible}.nav a.link:hover,nav a.link:hover{font-weight:400}div.error,div.success{color:#fff;padding:.5em .8em;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;display:flex;justify-content:center;align-items:center;align-self:flex-start;flex-direction:row-reverse;position:relative;height:75px;visibility:visible;overflow:hidden;-webkit-transition:all .5s ease-in-out;-moz-transition:all .5s ease-in-out;-ms-transition:all .5s ease-in-out;-o-transition:all .5s ease-in-out;transition:all .5s ease-in-out;opacity:1;margin-top:1em}div.error{background:var(--errorDefault)}div.success{background-color:var(--primaryHover)}div.error button,div.success button{border:none;background:0 0;outline:0;cursor:pointer;color:#fff;font-size:1.25rem;margin-top:-5px;position:absolute;transform:translate(0,0);transform-origin:0 0;right:10px;top:10px}div.error.hidden,div.success.hidden{opacity:0;visibility:hidden;height:0;margin:0;padding:0}div.error button:hover,div.success button:hover{text-shadow:-1px 2px var(--mutedBlack)}header{background:#6a6a6a url(../../imgs/hero.jpg) no-repeat bottom;background-size:cover;height:40%;color:#fff;backdrop-filter:grayscale(100%);position:relative}nav{display:flex;flex-direction:row;justify-content:space-between;padding:.25em;position:fixed;top:0;width:100%;transition:background-color .4s ease-in;color:#fff;z-index:100000000000000000000000000}nav.scrolled{background-color:var(--navBack)}nav #nav-check{display:none}nav .nav-btn{display:none}nav h1{margin:0}nav a{text-decoration:none;color:#fff}nav>h1{margin-left:.4em}nav ul{display:flex;flex-direction:row;gap:1em;margin:0 .5em 0 0;justify-content:flex-end;align-items:flex-end}nav ul li{list-style:none}nav ul li span{visibility:hidden}nav ul li .active::after,nav ul li .active::before{visibility:visible}header div{display:flex;flex-direction:column;justify-content:center;align-items:center;padding-top:10em}header div .btn{margin:2em 0}header div button{background:0 0;border:none;display:inline-block;text-align:center;text-decoration:none;font-size:2rem;cursor:pointer}i.fa-chevron-down{color:hsla(0,0%,67%,.58);font-size:3.75em;margin:1.5rem 0}div h1 span{visibility:visible;animation:caret 1s steps(1) infinite}@keyframes caret{50%{visibility:hidden}}@media screen and (max-width:75em){nav{display:block;height:50px;width:100%;background-color:var(--navBack);position:fixed;top:0;padding:0}nav a h1{margin-left:1ch}nav .nav-btn{display:inline-block;position:absolute;right:75px;top:0}nav ul{position:fixed;display:block;width:100%;background-color:#333;transition:all .4s ease-in;overflow-y:hidden;padding-left:.5em;margin-top:7px}nav ul li a{display:block;width:100%;transform:translateX(-30px);transition:all .4s ease-in;opacity:0}.nav-btn label{display:inline-block;cursor:pointer;width:60px;height:50px;position:fixed;-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);-webkit-transition:.5s ease-in;-moz-transition:.5s ease-in;-o-transition:.5s ease-in;transition:.5s ease-in}.nav-btn label span{display:block;position:absolute;height:5px;width:100%;background-color:#fff;opacity:1;right:0;top:20px;-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);-webkit-transition:.25s ease-in;-moz-transition:.25s ease-in;-o-transition:.25s ease-in;transition:.25s ease-in}nav #nav-check:not(:checked)~ul{height:auto;max-height:0}nav #nav-check:not(:checked)~.nav-btn label span:nth-child(1){top:8px;-webkit-transform-origin:left center;-moz-transform-origin:left center;-o-transform-origin:left center;transform-origin:left center}nav #nav-check:not(:checked)~.nav-btn label span:nth-child(2){top:23px;-webkit-transform-origin:left center;-moz-transform-origin:left center;-o-transform-origin:left center;transform-origin:left center}nav #nav-check:not(:checked)~.nav-btn label span:nth-child(3){top:38px;-webkit-transform-origin:left center;-moz-transform-origin:left center;-o-transform-origin:left center;transform-origin:left center}nav #nav-check:checked~.nav-btn label,nav .nav-btn label:hover{background-color:rgba(-1,0,0,.3)}nav #nav-check:checked~ul{max-height:50vh;overflow-y:hidden}nav #nav-check:checked~ul li a{opacity:1;transform:translateX(0)}nav #nav-check:checked~ul li:nth-child(1) a{transition-delay:.15s}nav #nav-check:checked~ul li:nth-child(2) a{transition-delay:.25s}nav #nav-check:checked~ul li:nth-child(3) a{transition-delay:.35s}nav #nav-check:checked~ul li:nth-child(4) a{transition-delay:.45s}nav #nav-check:checked~ul li:nth-child(5) a{transition-delay:.55s}nav #nav-check:checked~.nav-btn label span:first-child{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}nav #nav-check:checked~.nav-btn label span:nth-child(2){width:0;opacity:0}nav #nav-check:checked~.nav-btn label span:last-child{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}}footer{background-color:var(--primaryDefault);margin-top:5em;padding:2em;display:flex;color:#fff}footer .spacer{width:100%;margin-right:auto}footer .nav{width:100%;margin-right:auto;display:flex;flex-direction:row;justify-content:center;align-items:center}footer .nav ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;justify-content:space-around}footer .nav ul a{color:#fff}footer p{margin:auto;width:100%;text-align:center}footer .button{margin-left:auto;width:100%;text-align:center}footer .button button{border:5px solid #fff;background:0 0;font-size:3em;padding:.5rem 1rem;width:2em;color:#fff;-webkit-border-radius:.25em;-moz-border-radius:.25em;border-radius:.25em;cursor:pointer}.profile{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;max-width:70%}svg{width:2em;fill:var(--primaryDefault);font-size:2em}footer{margin-top:0}section#individualPost{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch}div.byLine{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1em}div.byLine h3:last-child{border-left:2px solid var(--mutedBlack);padding-left:1em;display:flex;flex-direction:row;justify-content:center;align-items:center;gap:1em}div.byLine h3:last-child a{padding:0 1em}div.cover{width:100%;height:20rem;background-position:center;background-size:cover;border-radius:10px;box-shadow:0 4px 2px 0 var(--mutedBlack)}div.mainContent{border-right:5px solid var(--mutedGrey);min-height:100%;width:85%;display:flex;flex-direction:column;justify-content:space-between;align-items:stretch}article{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 2em}article a{padding:0 1em}article a::after,article a::before{visibility:visible;position:absolute;margin-top:1px}article a.btn::after,article a.btn::before{display:none}article a::before{content:' <';margin-left:-.5em}article a::after{content:'>'}article a:hover{font-weight:700}article h1{margin-bottom:.5em}article h3{margin-top:0}.otherPosts h3,article h3:not(div.byLine>h3){font-weight:700}article .media{align-self:center}article table td,article table th{border:1px solid #ddd;padding:8px}article table tr:nth-child(even){background-color:#f2f2f2}article table tr:hover{background-color:#ddd}article .table{margin:0}aside.sideContent{display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-end;width:15%;align-self:flex-start}div.authorInfo{display:grid;grid-template-columns:2fr 1fr;grid-template-rows:repeat(4,auto);padding-left:1em;padding-top:.5em;border-bottom:5px solid var(--mutedGrey);width:100%}div.authorInfo .picture{display:flex;flex-direction:column;justify-content:center;align-items:center;grid-row:span 3}div.authorInfo h3{grid-column:span 2}div.feeds,div.newsletter,div.otherPosts{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 1em 1em;border-bottom:5px solid var(--mutedGrey);width:100%}div.feeds a,div.otherPosts a{padding:.5em 1em}div.newsletter div.form input[type=submit]{margin-top:1em;padding:.5em 1em}div.feeds .icons{display:flex;flex-direction:row;justify-content:space-around;align-items:flex-start;gap:.5em;flex-wrap:wrap-reverse}div.feeds h2{margin-bottom:0}div.feeds i.fa-solid.fa-rss{font-size:2em}div.feeds img.atom,div.feeds img.json{width:2em}div.categories{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 1em 1em;width:100%}div.form input[type=submit]{align-self:flex-start}.image img,.image_resized img{max-width:100%;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;box-shadow:0 4px 2px 0 var(--mutedBlack)}.image{justify-self:center;align-self:center}.image-style-side{justify-self:flex-end;align-self:flex-end}section.comments{padding:0 2em 2em}.banner{max-width:30%;box-shadow:0 6px 4px 0 var(--mutedBlack);-webkit-border-radius:.625rem;-moz-border-radius:.625rem;border-radius:.625rem;border:2px solid var(--mutedGrey)}h2{font-family:Share Tech Mono,monospace;font-style:normal;font-weight:400;font-size:var(--headingFS);line-height:2.5625rem;text-transform:lowercase}h3{font-family:Noto Sans KR,sans-serif;font-style:normal;font-weight:500;font-size:var(--generalFS);line-height:2.1875rem}div.menu{width:100%;border-bottom:5px solid var(--mutedGrey)}div.menu input:not([type=submit]){width:auto;border-top-right-radius:0;border-bottom-right-radius:0}div.menu>ul{list-style:none;display:flex;flex-direction:row;justify-content:space-around}div.menu ul li{display:flex;flex-direction:row}div.menu ul li button.btn{padding:initial;border-radius:0 .5em .5em 0}div.menu ul li input:not([type=submit]):focus+button.btn,div.menu ul li:focus button.btn,div.menu ul li:hover button.btn{background:var(--primaryHover);border:.3215em solid var(--primaryHover)}div.menu ul li:focus input:not([type=submit]),div.menu ul li:hover input:not([type=submit]){border:.3215em solid var(--primaryHover)}section.largePost{display:flex;flex-direction:column;justify-content:space-evenly;align-items:flex-start;gap:2em;width:100%;padding:0 5em 1em}section.largePost:not(:last-child){border-bottom:5px solid var(--mutedGrey)}section.largePost .outerContent{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-around;align-items:center;gap:1em}section.largePost .outerContent>.content,section.largePost .outerContent>img{width:50%}section.largePost .outerContent .postContent{display:flex;flex-direction:column;justify-content:space-evenly;align-items:flex-start}section.largePost .outerContent .postContent h2{align-self:center}section.largePost .outerContent .postContent a{align-self:flex-end}#main .errorFof,#main .unsubscribe{display:table;width:100%;height:100dvh;text-align:center}#main .unsubscribe{height:50dvh}.centered{display:table-cell;vertical-align:middle}section#olderPosts{margin:auto}section#olderPosts .carousel{position:relative;margin:auto}section#olderPosts .arrow{position:absolute;top:50%;display:flex;width:2.5em;height:2.5em;justify-content:center;align-items:center;border-radius:50%;z-index:1;font-size:1.625em;color:#fff;background:var(--mutedBlack);cursor:pointer}section#olderPosts .arrow:hover{background:var(--grey)}section#olderPosts #prev{left:-4em}section#olderPosts #next{right:-4em}section#olderPosts .carouselOuter{display:flex;flex-direction:row;align-items:center;gap:1em;overflow:hidden;position:relative;margin:auto}section#olderPosts #allCarouselItems{display:none}section#olderPosts #carouselInner{display:flex;flex-direction:row;align-items:stretch;justify-content:center;gap:1em;transition:transform .5s ease-in-out;left:0;height:50%}section#olderPosts #carouselInner .cardItem{display:flex;flex-direction:column;justify-content:space-between;align-items:center;border:2px solid var(--primaryDefault);-webkit-border-radius:.625rem;-moz-border-radius:.625rem;border-radius:.625rem;width:30em;height:40rem}section#olderPosts #carouselInner .cardItem img{width:100%;height:300px;object-fit:cover;object-position:left;-webkit-border-radius:.625rem;-moz-border-radius:.625rem;border-radius:.625rem;color:#fff}section#olderPosts #carouselInner .cardItem .content{height:auto;display:flex;flex-direction:column;justify-content:space-evenly;align-items:center;background:#fff;margin:0 2em 1.5em;padding:0}main>h1{padding-left:3em}section.catPosts .largePost{margin-bottom:3em}section.categories{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;margin-bottom:5em;row-gap:1em}section.categories .btnContainer{flex-basis:33.3333333%;display:flex;flex-direction:row;justify-content:center;align-items:center;flex-wrap:wrap}div.menuBar a.link::after,div.menuBar a.link::before,main a.link::after,main a.link::before{margin-top:-1px}.policy{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding-left:5em;padding-bottom:5em}.policy h3{font-weight:700}.modal-container{display:block;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);box-sizing:border-box;z-index:9999999}.modal-container.hidden{display:none}.modal{position:fixed;right:0;bottom:0;width:40%;height:auto;max-height:90dvh;overflow:auto;margin:1.25em;padding:1.25em;box-sizing:border-box}.modal-content{background-color:#ddd;margin:auto;padding:20px;border:5px solid var(--primaryHover);width:100%;box-shadow:0 6px 4px 0 var(--mutedBlack)}.modal-content .flexRow{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;gap:1em;flex-wrap:wrap}@media screen and (max-width:90em){section#olderPosts #carouselInner .cardItem{width:25em}div.mainContent{width:80%}aside.sideContent{width:20%}}@media screen and (max-width:75em){div.menuBar .menu ul{flex-direction:column;align-items:center;padding-left:1.25em}div.menuBar .menu ul li input[type=search]{width:100%}.modal-content .flexRow{width:50%;flex-direction:column}section.largePost{padding:1em}section.largePost .outerContent{flex-direction:column;justify-content:center;align-items:center}.banner{max-width:50%}section.largePost .outerContent>.content,section.largePost .outerContent>img{width:90%}section#olderPosts .arrow{width:2em;height:2em;font-size:1.25em}section#olderPosts #prev{left:-3em}section#olderPosts #next{right:-3em}section#olderPosts #carouselInner .cardItem{width:20em}section#individualPost{flex-direction:column-reverse;justify-content:center;align-items:center}div.mainContent{width:100%;border-right:none}aside.sideContent{width:100%;flex-direction:row;align-items:stretch;justify-content:space-around;border-bottom:5px solid var(--mutedGrey);flex-wrap:wrap}aside.sideContent>div.authorInfo{grid-template-columns:4fr 1fr 1fr 1fr;flex-basis:100%}aside.sideContent>div.authorInfo .picture{grid-row:span 3}div.byLine{flex-direction:column;align-items:flex-start}div.byLine h3:last-child{border-left:none;padding-left:0}aside.sideContent>div.authorInfo h3{grid-column-start:2;grid-column-end:end;grid-row:3}aside.sideContent>div.categories{flex-basis:100%}aside.sideContent>div.otherPosts{border-bottom:5px solid var(--mutedGrey)}div.feeds,div.newsletter,div.otherPosts{justify-content:space-between;width:50%}aside.sideContent>div{border-right:5px solid var(--mutedGrey);flex-basis:50%}aside.sideContent>div:last-child{border-right:none}main>h1{padding-left:1em}}@media screen and (max-width:55em){.modal{width:90%}.modal-content{display:flex;flex-direction:column;justify-content:center;align-items:center}.banner{max-width:75%}section#olderPosts .arrow{width:1.5em;height:1.5em;font-size:1em}section#olderPosts #prev{left:-1.75em}section#olderPosts #next{right:-1.75em}section#olderPosts #carouselInner .cardItem{width:15em}aside.sideContent>div.authorInfo{grid-template-columns:2fr 1fr 1fr;grid-template-rows:1fr 1fr}aside.sideContent>div.authorInfo h3{grid-row:2}}@media screen and (max-height:38em) and (orientation:landscape){.modal{width:90%}.modal-content .flexRow{flex-direction:row;flex-wrap:nowrap}}@media screen and (max-width:30em){.profile{max-width:50%}section#individualPost{flex-direction:column}aside.sideContent{flex-direction:column;align-items:center;border-bottom:none}aside.sideContent>div.authorInfo{grid-template-columns:1fr 1fr 1fr;grid-template-rows:repeat(3,auto);border-top:5px solid var(--mutedGrey)}aside.sideContent>div.authorInfo .picture{grid-row:1;grid-column:span 3}aside.sideContent>div.authorInfo h3{grid-column:span 3}div.feeds,div.newsletter,div.otherPosts{width:100%}}
\ No newline at end of file
diff --git a/dist/blog/js/index.js b/dist/blog/js/index.js
index ec4e0c5..cf5a174 100644
--- a/dist/blog/js/index.js
+++ b/dist/blog/js/index.js
@@ -1 +1 @@
-const scrollLimit=150;function goToURL(t){let e=t.split("/");if("accepted"===localStorage.getItem("cookiePopup")&&document.querySelector("#cookiePopup").classList.add("hidden"),"/blog"!==t&&"blog"!==t&&"/blog/"!==t)if("post"!==e[2]){if("category"===e[2])return e[3]?void loadPostsByCategory(e[e.length-1]):void loadAllCategories().catch((t=>console.log(t)));if("search"===e[2]&&e[3])loadSearchResults(e[e.length-1]);else{if("policy"===e[2]){if("privacy"===e[3])return void loadPrivacyPolicy();if("cookie"===e[3])return void loadCookiePolicy()}"unsubscribe"===e[2]&&e[3]?unsubscribe(e[e.length-1]):show404()}}else loadIndividualPost(e[e.length-1]).catch((t=>console.log(t)));else loadHomeContent()}function submitNewsletter(){fetch(`/api/blog/newsletter/${document.querySelector("#email").value}`,{method:"POST",headers:{"Content-Type":"application/json"}}).then((t=>t.json().then((e=>(document.querySelector("#newsletterMessage").classList.remove("hidden"),e.message.includes("exists")?(document.querySelector("#newsletterMessage").classList.add("error"),document.querySelector("#newsletterMessage").classList.remove("success"),void(document.querySelector("#newsletterMessage div").innerHTML='You"ve already signed up you silly goose!')):t.ok?(document.querySelector("#newsletterMessage div").innerHTML=e.message,void document.querySelector("#newsletterMessage").classList.add("success")):(document.querySelector("#newsletterMessage").classList.add("error"),document.querySelector("#newsletterMessage").classList.remove("success"),void(document.querySelector("#newsletterMessage div").innerHTML=e.error)))))))}function unsubscribe(t){fetch(`/api/blog/newsletter/${t}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).then((t=>t.json().then((t=>{document.querySelector("#main").innerHTML="";let e=document.createElement("section");e.classList.add("unsubscribe"),e.id="unsubscribe";let n=document.createElement("div");n.classList.add("centered"),n.innerHTML=`\n\t\t\t
Unsubscribe
\n\t\t\t${t.message}
\n \tSee all blog posts\n\t\t`,e.appendChild(n),document.querySelector("#main").appendChild(e)}))))}function createFormattedDate(t){return new Date(t).toLocaleDateString("en-GB",{day:"2-digit",month:"short",year:"numeric"})}function createLargePost(t){let e=document.createElement("div");e.classList.add("outerContent");let n=document.createElement("img");n.className="banner",n.src=t.headerImg.replaceAll("%2F","/"),n.alt=t.title,e.appendChild(n);let o=document.createElement("div");o.classList.add("content");let a=document.createElement("div");a.classList.add("postContent");let i="";t.categories.split(", ").forEach((e=>{i+=`${e}`,t.categories.split(", ").length>1&&(i+=", ")})),i.endsWith(", ")&&(i=i.substring(0,i.length-2));let s=createFormattedDate(t.dateModified);return a.innerHTML=`\n ${t.title}
\n Last updated: ${s} | ${i}
\n ${t.abstract}
\n See Post\n `,o.appendChild(a),e.appendChild(o),e}function loadHomeContent(){fetch("/api/blog/post").then((t=>t.json().then((t=>{for(let e=0;et.json())),await fetch("/api/blog/post/featured").then((t=>t.json()))]}function csvToArray(t){let e="",n=[""],o=0,a=!0,i=null;for(i of t)'"'===i?(a&&i===e&&(n[o]+=i),a=!a):","===i&&a?i=n[++o]="":"\n"===i&&a?("\r"===e&&(row[o]=row[o].slice(0,-1)),n=n[++r]=[i=""],o=0):n[o]+=i,e=i;return n}async function getCategories(){let t=await fetch("/api/blog/categories").then((t=>t.json())),e=[];return t.forEach((t=>e=e.concat(csvToArray(t.categories.replace(/\s*,\s*/g,","))))),[...new Set(e)]}function createCategories(t){let e="";return t.forEach((t=>e+=`${t}`)),e}function createButtonCategories(t){let e="";return t.forEach((t=>t.forEach((t=>e+=`${t}`)))),e}async function createSideContent(){let t=await getLatestAndFeaturedPosts(),e=t[0],n=t[1],o=createCategories(await getCategories()),a=document.createElement("aside");return a.classList.add("sideContent"),a.innerHTML=`\n \n \n
latest post
\n
${e.title}
\n
${e.abstract}
\n
See Post\n
\n \n
featured post
\n
${n.title}
\n
${n.abstract}
\n
See Post\n
\n \n \t
Sign up to the newsletter to never miss a new post!
\n \t
\n
\n \n\t\t\t\t\t\t\t\t
feeds
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n \n
categories
\n ${o}\n \n \n `,a}function createMetaTag(t,e,n){let o=document.querySelector(`meta[name="${t}"], meta[property="${t}"]`);if(!o){let o=document.createElement("meta");return o.setAttribute(t.includes("name")?"name":"property",t),o.setAttribute(e,n),void document.head.appendChild(o)}o.setAttribute(e,n)}function insertMetaTags(t){document.querySelector("meta[name='description']").setAttribute("content",t.abstract),createMetaTag("twitter:title","content",t.title),createMetaTag("twitter:description","content",t.abstract),createMetaTag("twitter:image","content",t.headerImg),createMetaTag("og:title","content",t.title),createMetaTag("og:description","content",t.abstract),createMetaTag("og:image","content",t.headerImg),createMetaTag("og:url","content",window.location.href),createMetaTag("og:type","content","blog"),createMetaTag("og:site_name","content",'Rohit Pai"s Blog'),createMetaTag("og:locale","content","en_GB");let e=document.querySelector("meta[name='keywords']"),n=e.getAttribute("content");n+=`, ${t.keywords}`,e.setAttribute("content",n)}async function loadIndividualPost(t){document.title="Rohit Pai - "+decodeURI(t),await fetch(`/api/blog/post/${t}`).then((async e=>{e.ok?await e.json().then((async e=>{insertMetaTags(e);let n=document.createElement("section");n.classList.add("post"),n.id="individualPost";let o=document.createElement("div");o.classList.add("mainContent");let a=document.createElement("article"),i=e.headerImg.replaceAll("%2F","/");a.innerHTML=`\n ${e.title}
\n \n
Published: ${createFormattedDate(e.dateCreated)} | Last updated: ${createFormattedDate(e.dateModified)}
\n
${createButtonCategories([csvToArray(e.categories.replace(/\s*,\s*/g,","))])}
\n
\n
\n \n ${e.body}\n `;let s=document.createElement("section");s.classList.add("comments"),s.innerHTML='Comments
\n \n ',o.appendChild(a),o.appendChild(s);let r=await createSideContent();n.appendChild(o),n.appendChild(r),document.querySelector("#main").appendChild(n);var c,l;c=document,(l=c.createElement("script")).src="https://rohitpaiportfolio.disqus.com/embed.js",l.setAttribute("data-timestamp",+new Date),c.body.appendChild(l),Prism.highlightAll()})):show404()}))}async function loadAllCategories(){document.title="Rohit Pai - Categories";let t=await getCategories(),e=document.querySelector("#main"),n=document.createElement("section");n.classList.add("categories"),n.id="allCategories";let o=document.createElement("h1");o.innerHTML="Categories",e.appendChild(o);for(let e of t){let t=document.createElement("div");t.classList.add("btnContainer");let o=document.createElement("a");o.classList.add("btn"),o.classList.add("btnPrimary"),o.innerHTML=e,o.href=`/blog/category/${e}`,t.appendChild(o),n.appendChild(t)}e.appendChild(n)}function loadPostsByCategory(t){document.title="Rohit Pai - "+decodeURI(t),fetch(`/api/blog/categories/${t}`).then((e=>e.json().then((e=>{let n=document.querySelector("#main"),o=document.createElement("section");o.classList.add("catPosts"),o.id="postsByCategory";let a=document.createElement("h1");a.innerHTML=decodeURI(t),n.appendChild(a);for(let t=0;tt.json().then((t=>{let e=document.querySelector("#main"),n=document.createElement("section");n.classList.add("catPosts"),n.id="searchResults";let o=document.createElement("h1");o.innerHTML="Search Results",e.appendChild(o);for(let e=0;e\n\t\t\tPrivacy Policy
\n\t\t\tLast Updated: Nov 12, 2023
\n\t\t\t\n\t\t\t\tThank you for visiting the Privacy Policy of Rohit Pai"s Blog. This Privacy Policy explains how I, Rohit Pai, collect, use, and share information about you (“you”, “yours” or “user”) when you access or use my website (“Services”). You are responsible for any third-party data you provid\'e or share through the Services and confirm that you have the third partys consent to provide such data to me.\n\t\t\t
\n\t\t\t
\n\n\t\t\tSources of Information and Tracking Technologies
\n\t\t\t\n\t\t\t\tI collect information that you directly provide to me, such as when you submit a form or send me a message with your information. I may also receive information about you from my partners, including but not limited to distribution partners, data services, and marketing firms. I may combine this information with other information I collect from or about you. In these cases, my Privacy Policy governs the handling of the combined information. I and my partners may collect the information noted in this privacy policy using cookies, web beacons, pixels, and other similar technologies. These technologies are used for authentication, to store your preferences or progress, for analytics, and for advertising and analytics. Cookies are small text files stored on your computer. You can set your browser to reject cookies altogether, to reject my cookies in particular, or to delete cookies. However, this may cause some or all of my Services not to function on your computer or device.\n\t\t\t
\n\t\t\t
\n\t\t\tHow I Use Your Information
\n\t\t\t\n\t\t\t\tI use information I collect about you to provide, maintain, and improve my Services and other interactions I have with you. For example, I use the information collected to:\n\t\t\t
\n\t\t\t\n\t\t\t\t- Facilitate and improve your online experience;
\n\t\t\t\t- Provide and deliver products and services, perform authentication, process transactions and returns, and send you related information, including confirmations, receipts, invoices, customer experience surveys, and product or Services-related notices;
\n\t\t\t\t- Process and deliver promotions;
\n\t\t\t\t- Respond to your comments and questions and provide customer service;
\n\t\t\t\t- If you have indicated to me that you wish to receive notifications or promotional messages;
\n\t\t\t\t- Detect, investigate and prevent fraudulent transactions and other illegal activities and protect my rights and property and others;
\n\t\t\t\t- Comply with my legal and financial obligations;
\n\t\t\t\t- Monitor and analyze trends, usage, and activities;
\n\t\t\t\t- Provide and allow my partners to provide advertising and marketing targeted toward your interests.
\n\t\t\t
\n\t\t\t
\n\t\t\tHow I May Share Information
\n\t\t\t\n\t\t\t\tI may share your Personal Information in the following situations:\n\t\t\t
\n\t\t\t\n\t\t\t\t- \n\t\t\t\t\tThird Party Services Providers.\n\t\t\t\t\tI may share data with service providers, vendors, contractors, or agents who complete transactions or perform services on my behalf, such as those that assist me with my business and internal operations like shipping and delivery, payment processing, fraud prevention, customer service, gift cards, experiences, personalization, marketing, and advertising;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tChange in Business.\n\t\t\t\t\tI may share data in connection with a corporate business transaction, such as a merger or acquisition of all or a portion of my business to another company, joint venture, corporate reorganization, insolvency or bankruptcy, financing or sale of company assets;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tTo Comply with Law.\n\t\t\t\t\tI may share data to facilitate legal process from lawful requests by public authorities, including to meet national security or law enforcement demands as permitted by law.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tWith Your Consent.\n\t\t\t\t\tI may share data with third parties when I have your consent.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tWith Advertising and Analytics Partners.\n\t\t\t\t\tSee the section entitled “Advertising and Analytics” below.\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\tAdvertising and Analytics
\n\t\t\t\n\t\t\t\tI use advertising and analytics technologies to better understand your online activity on my Services to provide personalized products and services that may interest you. I may allow third-party companies, including ad networks, to serve advertisements, provide other advertising services, and/or collect certain information when you visit my website. Third-party companies may use pseudonymized personal data (e.g., click stream information, browser type, time and date, subject of advertisements clicked or scrolled over) during your visit to this website in order to provide advertisements about goods and services likely to be of interest to you, on this website and others. To learn more about Interest-Based Advertising or to opt-out of this type of advertising, you can visit AboutAds.info/choices or www.networkadvertising.org/choices. Some third-party companies may also use non-cookie technologies, such as statistical IDs. Please keep in mind that your web browser may not permit you to block the use of these non-cookie technologies, and those browser settings that block cookies may have no effect on such techniques. If the third-party company uses the non-cookie technologies for interest-based advertising, you can opt out at www.networkadvertising.org/choices. Please note the industry opt out only applies to use for interest-based advertising and may not apply to use for analytics or attribution. Some websites have “do not track” features that allow you to tell a website not to track you. These features are not all uniform. I do not currently respond to those signals.\n\t\t\t
\n\t\t\t
\n\t\t\tData Security
\n\t\t\t\n\t\t\t\tI implement commercially reasonable security measures designed to protect your information. Despite my best efforts, however, no security measures are completely impenetrable.\n\t\t\t
\n\t\t\t
\n\t\t\tData Retention
\n\t\t\t\n\t\t\t\tI store the information I collect about you for as long as necessary for the purpose(s) for which I collected it or for other legitimate business purposes, including to meet my legal, regulatory, or other compliance obligations.\n\t\t\t
\n\t\t\t
\n\n\t\t\tEU Privacy Rights
\n\n\t\t\tIndividuals located in certain countries, including the European Economic Area (EEA) and the United Kingdom, have certain statutory rights under the General Data Protection Regulation (GDPR) in relation to their personal data.
\n\t\t\tTo the extent information I collect is associated with an identified or identifiable natural person and is protected as personal data under GDPR, it is referred to in this Privacy Policy as “Personal Data”.
\n\t\t\t\n\t\t\t\tData Subject Access Requests\n\t\t\t
\n\t\t\t\n\t\t\t\tSubject to any exemptions provided by law, you may have the right to request:\n\t\t\t
\n\t\t\t\n\t\t\t\t- \n\t\t\t\t\ta copy of the Personal Data I hold about you;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tto correct the Personal Data I hold about you;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tto delete your Account or Personal Data;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tto object to processing of your Personal Data for certain purposes;\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\tTo access your privacy rights, send me an email at rohit@rohitpai.co.uk.\n\t\t\t
\n\t\t\t\n\t\t\t\tI will generally process requests within one month. I may need to request specific information from you to help me confirm your identity and/or the jurisdiction in which you reside. If your request is complicated or if you have made a large number of requests, it may take me longer. I will let you know if I need longer than one month to respond.\n\t\t\t
\n\t\t\t\n\t\t\t\tLegal Bases For Processing Personal Data\n\t\t\t
\n\t\t\t\n\t\t\t\tI may process your Personal Data under applicable data protection law on the following legal grounds:\n\t\t\t
\n\t\t\t\n\t\t\t\t- \n\t\t\t\t\tContractual Necessity:\n\t\t\t\t\tI may process your Personal Data to enter into or perform a contract with you.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tConsent:\n\t\t\t\t\twhere you have provided consent to process your Personal Data. You may withdraw your consent at any time.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tLegitimate interest:\n\t\t\t\t\tI process your Personal Data to provide my Services to you such as to provide my online user experience, communicate with you, provide customer service, market, analyze and improve my business, and to protect my Services.\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\tAge Limitations
\n\t\t\t\n\t\t\t\tMy Service is intended for adults ages 18 years and above. I do not knowingly collect personally identifiable information from children. If you are a parent or legal guardian and think your child under 13 has given me information, please email or write to me at the address listed at the end of this Privacy Policy. Please mark your inquiries “COPPA Information Request.”\n\t\t\t
\n\t\t\t
\n\t\t\tChanges to this Privacy Policy
\n\t\t\t\n\t\t\t\tRohit Pai may change this Privacy Policy from time to time. I encourage you to visit this page to stay informed. If the changes are material, I may provide you additional notice to your email address or through my Services. Your continued use of the Services indicates your acceptance of the modified Privacy Policy.\n\t\t\t
\n\t\t\t
\n\t\t\tNewsletters
\n\t\t\t\n\t\t\t\tYou can opt in to receive my marketing emails and/or newsletters by below. I may still send you transactional messages, which include Services-related communications and responses to your questions.\n\t\t\t
\n\t\t\t
\n\t\t\tStorage of Information in the United States
\n\t\t\t\n\t\t\t\tInformation I maintain may be stored both within and outside of the United States. If you live outside of the United States, you understand and agree that I may transfer your information to the United States, and that U.S. laws may not afford the same level of protection as those in your country.\n\t\t\t
\n\t\t\t
\n\t\t\tContact Me
\n\t\t\t\n\t\t\t\tIf you have questions, comments, or concerns about this Privacy Policy, you may contact me at:\n\t\t\t
\n\t\t\tContact\n\t\t\trohit@rohitpai.co.uk\n\t\t\n\t\t'}function loadCookiePolicy(){document.querySelector("#main").innerHTML='\n\t\t\n\t\t\t
Cookies Policy
\n\t\t\t
I only use functional cookies for the blog which includes PHP Session ID, disqus. a cookie to disable the cookie popup, and maybe share this. I think that these are functional cookies, if you don\'t, you\'re welcome to exit the site or tell me by emailing me through the email address below, or the contact form on the contact section of my main website.
\n\t\t\t
\n\t\t\t
rohit@rohitpai.co.uk\n\t\t\t
\n\t\t\t
contact\n\t\t
\n\t'}function show404(){document.querySelector("#main").innerHTML='\n \n '}document.addEventListener("DOMContentLoaded",(()=>{goToURL(window.location.pathname)})),window.addEventListener("popstate",(t=>{goToURL(window.history.state)})),window.onscroll=()=>{document.body.scrollTop>=150||document.documentElement.scrollTop>=150?document.querySelector("nav").classList.add("scrolled"):document.querySelector("nav").classList.remove("scrolled")},document.querySelector("#searchBtn").addEventListener("click",(t=>{let e=document.querySelector("#searchField").value;e.length>0&&(window.history.pushState(null,null,`/blog/search/${e}`),document.querySelector("#searchField").value="",document.querySelector("#main").innerHTML="",goToURL(`/blog/search/${e}`))})),document.querySelector("#searchField").addEventListener("keyup",(t=>{"Enter"===t.key&&document.querySelector("#searchBtn").click()})),document.querySelector("#cookieAccept").addEventListener("click",(t=>{document.querySelector("#cookiePopup").classList.add("hidden"),localStorage.setItem("cookiePopup","accepted")}));
\ No newline at end of file
+const scrollLimit=150;function goToURL(t){let e=t.split("/");if("accepted"===localStorage.getItem("cookiePopup")&&document.querySelector("#cookiePopup").classList.add("hidden"),"/blog"!==t&&"blog"!==t&&"/blog/"!==t)if("post"!==e[2]){if("category"===e[2])return e[3]?void loadPostsByCategory(e[e.length-1]):void loadAllCategories().catch((t=>console.log(t)));if("search"===e[2]&&e[3])loadSearchResults(e[e.length-1]);else{if("policy"===e[2]){if("privacy"===e[3])return void loadPrivacyPolicy();if("cookie"===e[3])return void loadCookiePolicy()}"unsubscribe"===e[2]&&e[3]?unsubscribe(e[e.length-1]):show404()}}else loadIndividualPost(e[e.length-1]).catch((t=>console.log(t)));else loadHomeContent()}function submitNewsletter(){fetch(`/api/blog/newsletter/${document.querySelector("#email").value}`,{method:"POST",headers:{"Content-Type":"application/json"}}).then((t=>t.json().then((e=>(document.querySelector("#newsletterMessage").classList.remove("hidden"),e.message.includes("exists")?(document.querySelector("#newsletterMessage").classList.add("error"),document.querySelector("#newsletterMessage").classList.remove("success"),void(document.querySelector("#newsletterMessage div").innerHTML='You"ve already signed up you silly goose!')):t.ok?(document.querySelector("#newsletterMessage div").innerHTML=e.message,void document.querySelector("#newsletterMessage").classList.add("success")):(document.querySelector("#newsletterMessage").classList.add("error"),document.querySelector("#newsletterMessage").classList.remove("success"),void(document.querySelector("#newsletterMessage div").innerHTML=e.error)))))))}function unsubscribe(t){fetch(`/api/blog/newsletter/${t}`,{method:"DELETE",headers:{"Content-Type":"application/json"}}).then((t=>t.json().then((t=>{document.querySelector("#main").innerHTML="";let e=document.createElement("section");e.classList.add("unsubscribe"),e.id="unsubscribe";let n=document.createElement("div");n.classList.add("centered"),n.innerHTML=`\n\t\t\tUnsubscribe
\n\t\t\t${t.message}
\n \tSee all blog posts\n\t\t`,e.appendChild(n),document.querySelector("#main").appendChild(e)}))))}function createFormattedDate(t){return new Date(t).toLocaleDateString("en-GB",{day:"2-digit",month:"short",year:"numeric"})}function createLargePost(t){let e=document.createElement("div");e.classList.add("outerContent");let n=document.createElement("img");n.className="banner",n.src=t.headerImg.replaceAll("%2F","/"),n.alt=t.title,e.appendChild(n);let o=document.createElement("div");o.classList.add("content");let a=document.createElement("div");a.classList.add("postContent");let i="";t.categories.split(", ").forEach((e=>{i+=`${e}`,t.categories.split(", ").length>1&&(i+=", ")})),i.endsWith(", ")&&(i=i.substring(0,i.length-2));let s=createFormattedDate(t.dateModified);return a.innerHTML=`\n ${t.title}
\n Last updated: ${s} | ${i}
\n ${t.abstract}
\n See Post\n `,o.appendChild(a),e.appendChild(o),e}function createCardPost(t){let e=document.createElement("div");e.classList.add("cardItem"),e.id="post"+t.ID;let n=document.createElement("img");n.className="cardImg",n.src=t.headerImg.replaceAll("%2F","/"),n.alt=t.title,e.appendChild(n);let o=document.createElement("div");return o.classList.add("content"),o.innerHTML=`\n\t\t\t\t\t${t.title}
\n\t\t\t\t\tLast updated: ${createFormattedDate(t.dateModified)}
\n\t\t\t\t\tSee Post\n\t\t\t\t\t`,e.appendChild(o),e}function loadHomeContent(){fetch("/api/blog/post").then((t=>t.json().then((t=>{let e=document.createElement("section");e.classList.add("largePost"),e.id="olderPosts";let n=document.createElement("h1");n.innerHTML="older posts",e.appendChild(n);let o=document.createElement("div");o.classList.add("carousel"),o.innerHTML+='
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t \t ';let a=document.createElement("div"),i=document.createElement("div"),s=document.createElement("div");a.classList.add("carouselOuter"),i.id="carouselInner",s.id="allCarouselItems",a.appendChild(s),a.appendChild(i),o.appendChild(a),e.appendChild(o);for(let e=0;e1&&s.appendChild(createCardPost(t[e]))}document.querySelector("#main").appendChild(e),carouselLoop(i,s)}))))}function carouselLoop(t,e){const n=document.querySelector("#prev"),o=document.querySelector("#next"),a=window.matchMedia("(max-width: 75em)"),i=window.matchMedia("(max-width: 30em)");let s=document.querySelectorAll("#allCarouselItems .cardItem"),r=3;a.matches&&(r=2),i.matches&&(r=1);let c=[];for(let e=0;e{const n=c.shift();n.style.visibility="hidden";const o=e.querySelector(".cardItem");o.style.transform="translateX(100%)",o.style.transition="none",t.appendChild(o),c.push(o),setTimeout((()=>{for(let e=0;e{n.style.transition="none",n.style.transform="translateX(0)",e.appendChild(n),n.style.visibility="visible";for(let e=0;e{const n=c.pop();n.style.visibility="hidden";const o=e.querySelector(".cardItem:last-child");o.style.transform="translateX(-100%)",o.style.transition="none",t.insertBefore(o,t.firstChild),c.unshift(o),setTimeout((()=>{for(let e=0;e{n.style.transition="none",n.style.transform="translateX(0)",e.insertBefore(n,e.firstChild),n.style.visibility="visible";for(let e=0;et.json())),await fetch("/api/blog/post/featured").then((t=>t.json()))]}function csvToArray(t){let e="",n=[""],o=0,a=!0,i=null;for(i of t)'"'===i?(a&&i===e&&(n[o]+=i),a=!a):","===i&&a?i=n[++o]="":"\n"===i&&a?("\r"===e&&(row[o]=row[o].slice(0,-1)),n=n[++r]=[i=""],o=0):n[o]+=i,e=i;return n}async function getCategories(){let t=await fetch("/api/blog/categories").then((t=>t.json())),e=[];return t.forEach((t=>e=e.concat(csvToArray(t.categories.replace(/\s*,\s*/g,","))))),[...new Set(e)]}function createCategories(t){let e="";return t.forEach((t=>e+=`${t}`)),e}function createButtonCategories(t){let e="";return t.forEach((t=>t.forEach((t=>e+=`${t}`)))),e}async function createSideContent(){let t=await getLatestAndFeaturedPosts(),e=t[0],n=t[1],o=createCategories(await getCategories()),a=document.createElement("aside");return a.classList.add("sideContent"),a.innerHTML=`\n \n \n
latest post
\n
${e.title}
\n
${e.abstract}
\n
See Post\n
\n \n
featured post
\n
${n.title}
\n
${n.abstract}
\n
See Post\n
\n \n \t
Sign up to the newsletter to never miss a new post!
\n \t
\n
\n \n\t\t\t\t\t\t\t\t
feeds
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n \n
categories
\n ${o}\n \n \n `,a}function createMetaTag(t,e,n){let o=document.querySelector(`meta[name="${t}"], meta[property="${t}"]`);if(!o){let o=document.createElement("meta");return o.setAttribute(t.includes("name")?"name":"property",t),o.setAttribute(e,n),void document.head.appendChild(o)}o.setAttribute(e,n)}function insertMetaTags(t){document.querySelector("meta[name='description']").setAttribute("content",t.abstract),createMetaTag("twitter:title","content",t.title),createMetaTag("twitter:description","content",t.abstract),createMetaTag("twitter:image","content",t.headerImg),createMetaTag("og:title","content",t.title),createMetaTag("og:description","content",t.abstract),createMetaTag("og:image","content",t.headerImg),createMetaTag("og:url","content",window.location.href),createMetaTag("og:type","content","blog"),createMetaTag("og:site_name","content",'Rohit Pai"s Blog'),createMetaTag("og:locale","content","en_GB");let e=document.querySelector("meta[name='keywords']"),n=e.getAttribute("content");n+=`, ${t.keywords}`,e.setAttribute("content",n)}async function loadIndividualPost(t){document.title="Rohit Pai - "+decodeURI(t),await fetch(`/api/blog/post/${t}`).then((async e=>{e.ok?await e.json().then((async e=>{insertMetaTags(e);let n=document.createElement("section");n.classList.add("post"),n.id="individualPost";let o=document.createElement("div");o.classList.add("mainContent");let a=document.createElement("article"),i=e.headerImg.replaceAll("%2F","/");a.innerHTML=`\n ${e.title}
\n \n
Published: ${createFormattedDate(e.dateCreated)} | Last updated: ${createFormattedDate(e.dateModified)}
\n
${createButtonCategories([csvToArray(e.categories.replace(/\s*,\s*/g,","))])}
\n
\n
\n \n ${e.body}\n `;let s=document.createElement("section");s.classList.add("comments"),s.innerHTML='Comments
\n \n ',o.appendChild(a),o.appendChild(s);let r=await createSideContent();n.appendChild(o),n.appendChild(r),document.querySelector("#main").appendChild(n);var c,l;c=document,(l=c.createElement("script")).src="https://rohitpaiportfolio.disqus.com/embed.js",l.setAttribute("data-timestamp",+new Date),c.body.appendChild(l),Prism.highlightAll()})):show404()}))}async function loadAllCategories(){document.title="Rohit Pai - Categories";let t=await getCategories(),e=document.querySelector("#main"),n=document.createElement("section");n.classList.add("categories"),n.id="allCategories";let o=document.createElement("h1");o.innerHTML="Categories",e.appendChild(o);for(let e of t){let t=document.createElement("div");t.classList.add("btnContainer");let o=document.createElement("a");o.classList.add("btn"),o.classList.add("btnPrimary"),o.innerHTML=e,o.href=`/blog/category/${e}`,t.appendChild(o),n.appendChild(t)}e.appendChild(n)}function loadPostsByCategory(t){document.title="Rohit Pai - "+decodeURI(t),fetch(`/api/blog/categories/${t}`).then((e=>e.json().then((e=>{let n=document.querySelector("#main"),o=document.createElement("section");o.classList.add("catPosts"),o.id="postsByCategory";let a=document.createElement("h1");a.innerHTML=decodeURI(t),n.appendChild(a);for(let t=0;tt.json().then((t=>{let e=document.querySelector("#main"),n=document.createElement("section");n.classList.add("catPosts"),n.id="searchResults";let o=document.createElement("h1");o.innerHTML="Search Results",e.appendChild(o);for(let e=0;e\n\t\t\tPrivacy Policy
\n\t\t\tLast Updated: Nov 12, 2023
\n\t\t\t\n\t\t\t\tThank you for visiting the Privacy Policy of Rohit Pai"s Blog. This Privacy Policy explains how I, Rohit Pai, collect, use, and share information about you (“you”, “yours” or “user”) when you access or use my website (“Services”). You are responsible for any third-party data you provid\'e or share through the Services and confirm that you have the third partys consent to provide such data to me.\n\t\t\t
\n\t\t\t
\n\n\t\t\tSources of Information and Tracking Technologies
\n\t\t\t\n\t\t\t\tI collect information that you directly provide to me, such as when you submit a form or send me a message with your information. I may also receive information about you from my partners, including but not limited to distribution partners, data services, and marketing firms. I may combine this information with other information I collect from or about you. In these cases, my Privacy Policy governs the handling of the combined information. I and my partners may collect the information noted in this privacy policy using cookies, web beacons, pixels, and other similar technologies. These technologies are used for authentication, to store your preferences or progress, for analytics, and for advertising and analytics. Cookies are small text files stored on your computer. You can set your browser to reject cookies altogether, to reject my cookies in particular, or to delete cookies. However, this may cause some or all of my Services not to function on your computer or device.\n\t\t\t
\n\t\t\t
\n\t\t\tHow I Use Your Information
\n\t\t\t\n\t\t\t\tI use information I collect about you to provide, maintain, and improve my Services and other interactions I have with you. For example, I use the information collected to:\n\t\t\t
\n\t\t\t\n\t\t\t\t- Facilitate and improve your online experience;
\n\t\t\t\t- Provide and deliver products and services, perform authentication, process transactions and returns, and send you related information, including confirmations, receipts, invoices, customer experience surveys, and product or Services-related notices;
\n\t\t\t\t- Process and deliver promotions;
\n\t\t\t\t- Respond to your comments and questions and provide customer service;
\n\t\t\t\t- If you have indicated to me that you wish to receive notifications or promotional messages;
\n\t\t\t\t- Detect, investigate and prevent fraudulent transactions and other illegal activities and protect my rights and property and others;
\n\t\t\t\t- Comply with my legal and financial obligations;
\n\t\t\t\t- Monitor and analyze trends, usage, and activities;
\n\t\t\t\t- Provide and allow my partners to provide advertising and marketing targeted toward your interests.
\n\t\t\t
\n\t\t\t
\n\t\t\tHow I May Share Information
\n\t\t\t\n\t\t\t\tI may share your Personal Information in the following situations:\n\t\t\t
\n\t\t\t\n\t\t\t\t- \n\t\t\t\t\tThird Party Services Providers.\n\t\t\t\t\tI may share data with service providers, vendors, contractors, or agents who complete transactions or perform services on my behalf, such as those that assist me with my business and internal operations like shipping and delivery, payment processing, fraud prevention, customer service, gift cards, experiences, personalization, marketing, and advertising;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tChange in Business.\n\t\t\t\t\tI may share data in connection with a corporate business transaction, such as a merger or acquisition of all or a portion of my business to another company, joint venture, corporate reorganization, insolvency or bankruptcy, financing or sale of company assets;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tTo Comply with Law.\n\t\t\t\t\tI may share data to facilitate legal process from lawful requests by public authorities, including to meet national security or law enforcement demands as permitted by law.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tWith Your Consent.\n\t\t\t\t\tI may share data with third parties when I have your consent.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tWith Advertising and Analytics Partners.\n\t\t\t\t\tSee the section entitled “Advertising and Analytics” below.\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\tAdvertising and Analytics
\n\t\t\t\n\t\t\t\tI use advertising and analytics technologies to better understand your online activity on my Services to provide personalized products and services that may interest you. I may allow third-party companies, including ad networks, to serve advertisements, provide other advertising services, and/or collect certain information when you visit my website. Third-party companies may use pseudonymized personal data (e.g., click stream information, browser type, time and date, subject of advertisements clicked or scrolled over) during your visit to this website in order to provide advertisements about goods and services likely to be of interest to you, on this website and others. To learn more about Interest-Based Advertising or to opt-out of this type of advertising, you can visit AboutAds.info/choices or www.networkadvertising.org/choices. Some third-party companies may also use non-cookie technologies, such as statistical IDs. Please keep in mind that your web browser may not permit you to block the use of these non-cookie technologies, and those browser settings that block cookies may have no effect on such techniques. If the third-party company uses the non-cookie technologies for interest-based advertising, you can opt out at www.networkadvertising.org/choices. Please note the industry opt out only applies to use for interest-based advertising and may not apply to use for analytics or attribution. Some websites have “do not track” features that allow you to tell a website not to track you. These features are not all uniform. I do not currently respond to those signals.\n\t\t\t
\n\t\t\t
\n\t\t\tData Security
\n\t\t\t\n\t\t\t\tI implement commercially reasonable security measures designed to protect your information. Despite my best efforts, however, no security measures are completely impenetrable.\n\t\t\t
\n\t\t\t
\n\t\t\tData Retention
\n\t\t\t\n\t\t\t\tI store the information I collect about you for as long as necessary for the purpose(s) for which I collected it or for other legitimate business purposes, including to meet my legal, regulatory, or other compliance obligations.\n\t\t\t
\n\t\t\t
\n\n\t\t\tEU Privacy Rights
\n\n\t\t\tIndividuals located in certain countries, including the European Economic Area (EEA) and the United Kingdom, have certain statutory rights under the General Data Protection Regulation (GDPR) in relation to their personal data.
\n\t\t\tTo the extent information I collect is associated with an identified or identifiable natural person and is protected as personal data under GDPR, it is referred to in this Privacy Policy as “Personal Data”.
\n\t\t\t\n\t\t\t\tData Subject Access Requests\n\t\t\t
\n\t\t\t\n\t\t\t\tSubject to any exemptions provided by law, you may have the right to request:\n\t\t\t
\n\t\t\t\n\t\t\t\t- \n\t\t\t\t\ta copy of the Personal Data I hold about you;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tto correct the Personal Data I hold about you;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tto delete your Account or Personal Data;\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tto object to processing of your Personal Data for certain purposes;\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\tTo access your privacy rights, send me an email at rohit@rohitpai.co.uk.\n\t\t\t
\n\t\t\t\n\t\t\t\tI will generally process requests within one month. I may need to request specific information from you to help me confirm your identity and/or the jurisdiction in which you reside. If your request is complicated or if you have made a large number of requests, it may take me longer. I will let you know if I need longer than one month to respond.\n\t\t\t
\n\t\t\t\n\t\t\t\tLegal Bases For Processing Personal Data\n\t\t\t
\n\t\t\t\n\t\t\t\tI may process your Personal Data under applicable data protection law on the following legal grounds:\n\t\t\t
\n\t\t\t\n\t\t\t\t- \n\t\t\t\t\tContractual Necessity:\n\t\t\t\t\tI may process your Personal Data to enter into or perform a contract with you.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tConsent:\n\t\t\t\t\twhere you have provided consent to process your Personal Data. You may withdraw your consent at any time.\n\t\t\t\t
\n\t\t\t\t- \n\t\t\t\t\tLegitimate interest:\n\t\t\t\t\tI process your Personal Data to provide my Services to you such as to provide my online user experience, communicate with you, provide customer service, market, analyze and improve my business, and to protect my Services.\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\tAge Limitations
\n\t\t\t\n\t\t\t\tMy Service is intended for adults ages 18 years and above. I do not knowingly collect personally identifiable information from children. If you are a parent or legal guardian and think your child under 13 has given me information, please email or write to me at the address listed at the end of this Privacy Policy. Please mark your inquiries “COPPA Information Request.”\n\t\t\t
\n\t\t\t
\n\t\t\tChanges to this Privacy Policy
\n\t\t\t\n\t\t\t\tRohit Pai may change this Privacy Policy from time to time. I encourage you to visit this page to stay informed. If the changes are material, I may provide you additional notice to your email address or through my Services. Your continued use of the Services indicates your acceptance of the modified Privacy Policy.\n\t\t\t
\n\t\t\t
\n\t\t\tNewsletters
\n\t\t\t\n\t\t\t\tYou can opt in to receive my marketing emails and/or newsletters by below. I may still send you transactional messages, which include Services-related communications and responses to your questions.\n\t\t\t
\n\t\t\t
\n\t\t\tStorage of Information in the United States
\n\t\t\t\n\t\t\t\tInformation I maintain may be stored both within and outside of the United States. If you live outside of the United States, you understand and agree that I may transfer your information to the United States, and that U.S. laws may not afford the same level of protection as those in your country.\n\t\t\t
\n\t\t\t
\n\t\t\tContact Me
\n\t\t\t\n\t\t\t\tIf you have questions, comments, or concerns about this Privacy Policy, you may contact me at:\n\t\t\t
\n\t\t\tContact\n\t\t\trohit@rohitpai.co.uk\n\t\t\n\t\t'}function loadCookiePolicy(){document.querySelector("#main").innerHTML='\n\t\t\n\t\t\t
Cookies Policy
\n\t\t\t
I only use functional cookies for the blog which includes PHP Session ID, disqus. a cookie to disable the cookie popup, and maybe share this. I think that these are functional cookies, if you don\'t, you\'re welcome to exit the site or tell me by emailing me through the email address below, or the contact form on the contact section of my main website.
\n\t\t\t
\n\t\t\t
rohit@rohitpai.co.uk\n\t\t\t
\n\t\t\t
contact\n\t\t
\n\t'}function show404(){document.querySelector("#main").innerHTML='\n \n '}document.addEventListener("DOMContentLoaded",(()=>{goToURL(window.location.pathname)})),window.addEventListener("popstate",(t=>{goToURL(window.history.state)})),window.onscroll=()=>{document.body.scrollTop>=150||document.documentElement.scrollTop>=150?document.querySelector("nav").classList.add("scrolled"):document.querySelector("nav").classList.remove("scrolled")},document.querySelector("#searchBtn").addEventListener("click",(t=>{let e=document.querySelector("#searchField").value;e.length>0&&(window.history.pushState(null,null,`/blog/search/${e}`),document.querySelector("#searchField").value="",document.querySelector("#main").innerHTML="",goToURL(`/blog/search/${e}`))})),document.querySelector("#searchField").addEventListener("keyup",(t=>{"Enter"===t.key&&document.querySelector("#searchBtn").click()})),document.querySelector("#cookieAccept").addEventListener("click",(t=>{document.querySelector("#cookiePopup").classList.add("hidden"),localStorage.setItem("cookiePopup","accepted")}));
\ No newline at end of file
diff --git a/dist/blog/js/prism.js b/dist/blog/js/prism.js
index 6371440..8c81df6 100644
--- a/dist/blog/js/prism.js
+++ b/dist/blog/js/prism.js
@@ -1 +1 @@
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},r={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof i?new i(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=u.reach);_+=T.value.length,T=T.next){var R=T.value;if(t.length>e.length)return;if(!(R instanceof i)){var I,w=1;if(h){if(!(I=o(A,_,e,E))||I.index>=e.length)break;var k=I.index,N=I.index+I[0].length,v=_;for(v+=T.value.length;k>=v;)v+=(T=T.next).value.length;if(_=v-=T.value.length,T.value instanceof i)continue;for(var O=T;O!==t.tail&&(vu.reach&&(u.reach=D);var x=T.prev;if(P&&(x=d(t,x,P),_+=P.length),c(t,x,w),T=d(t,x,new i(p,f?r.tokenize(C,f):C,S,C)),L&&d(t,T,L),w>1){var M={cause:p+","+g,reach:D};s(e,t,n,T.prev,_,M),u&&M.reach>u.reach&&(u.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function d(e,t,n){var a=t.next,r={value:n,prev:t,next:a};return t.next=r,a.prev=r,e.length++,r}function c(e,t,n){for(var a=t.next,r=0;r"+i.content+""+i.tag+">"},!e.document)return e.addEventListener?(r.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var n=JSON.parse(t.data),a=n.language,i=n.code,o=n.immediateClose;e.postMessage(r.highlight(i,r.languages[a],a)),o&&e.close()}),!1),r):r;var u=r.util.currentScript();function p(){r.manual||r.highlightAll()}if(u&&(r.filename=u.src,u.hasAttribute("data-manual")&&(r.manual=!0)),!r.manual){var m=document.readyState;"loading"===m||"interactive"===m&&u&&u.defer?document.addEventListener("DOMContentLoaded",p):window.requestAnimationFrame?window.requestAnimationFrame(p):window.setTimeout(p,16)}return r}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism),Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var r={};r[e]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},Prism.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(e,t){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+e+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+t.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(Prism),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript,Prism.languages.abap={comment:/^\*.*/m,string:/(`|')(?:\\.|(?!\1)[^\\\r\n])*\1/,"string-template":{pattern:/([|}])(?:\\.|[^\\|{\r\n])*(?=[|{])/,lookbehind:!0,alias:"string"},"eol-comment":{pattern:/(^|\s)".*/m,lookbehind:!0,alias:"comment"},keyword:{pattern:/(\s|\.|^)(?:\*-INPUT|\?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHAR-TO-HEX|CHARACTER|CHARLEN|CHECK|CHECKBOX|CIRCULAR|CI_|CLASS|CLASS-CODING|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE|CN|CNT|CO|COALESCE|CODE|CODING|COLLECT|COLOR|COLUMN|COLUMNS|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE|DAYLIGHT|DBMAXLEN|DD\/MM\/YY|DD\/MM\/YYYY|DDMMYY|DEALLOCATE|DECIMALS|DECIMAL_SHIFT|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|END-ENHANCEMENT-SECTION|END-LINES|END-OF-DEFINITION|END-OF-FILE|END-OF-PAGE|END-OF-SELECTION|ENDAT|ENDCASE|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|ENHANCEMENTS|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTION-TABLE|EXCEPTIONS|EXCLUDE|EXCLUDING|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD|FIELD-GROUPS|FIELD-SYMBOL|FIELD-SYMBOLS|FIELDS|FILE|FILTER|FILTER-TABLE|FILTERS|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTION-POOL|FUNCTIONALITY|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEAD-LINES|HEADER|HEADERS|HEADING|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINE-SELECTION|LINE-SIZE|LINEFEED|LINES|LIST|LIST-PROCESSING|LISTBOX|LITTLE|LLANG|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG-POINT|LOG10|LOGFILE|LOGICAL|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM\/DD\/YY|MM\/DD\/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NO-DISPLAY|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NO-SCROLLING|NO-SIGN|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NODE|NODES|NON-UNICODE|NON-UNIQUE|NOT|NP|NS|NULL|NUMBER|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE|PAGES|PARAMETER|PARAMETER-TABLE|PARAMETERS|PART|PARTIALLY|PATTERN|PERCENTAGE|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POSITION|POS_HIGH|POS_LOW|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES|RAW|READ|READ-ONLY|READER|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH|SECONDARY|SECONDS|SECTION|SELECT|SELECT-OPTIONS|SELECTION|SELECTION-SCREEN|SELECTION-SET|SELECTION-SETS|SELECTION-TABLE|SELECTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|START-OF-SELECTION|STARTING|STATE|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP|TIMEZONE|TITLE|TITLE-LINES|TITLEBAR|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITH-TITLE|WITHOUT|WORD|WORK|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE)(?![\w-])/i,lookbehind:!0},number:/\b\d+\b/,operator:{pattern:/(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,lookbehind:!0},"string-operator":{pattern:/(\s)&&?(?=\s)/,lookbehind:!0,alias:"keyword"},"token-operator":[{pattern:/(\w)(?:->?|=>|[~|{}])(?=\w)/,lookbehind:!0,alias:"punctuation"},{pattern:/[|{}]/,alias:"punctuation"}],punctuation:/[,.:()]/},function(e){var t="(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)";Prism.languages.abnf={comment:/;.*/,string:{pattern:/(?:%[is])?"[^"\n\r]*"/,greedy:!0,inside:{punctuation:/^%[is]/}},range:{pattern:/%(?:b[01]+-[01]+|d\d+-\d+|x[A-F\d]+-[A-F\d]+)/i,alias:"number"},terminal:{pattern:/%(?:b[01]+(?:\.[01]+)*|d\d+(?:\.\d+)*|x[A-F\d]+(?:\.[A-F\d]+)*)/i,alias:"number"},repetition:{pattern:/(^|[^\w-])(?:\d*\*\d*|\d+)/,lookbehind:!0,alias:"operator"},definition:{pattern:/(^[ \t]*)(?:[a-z][\w-]*|<[^<>\r\n]*>)(?=\s*=)/m,lookbehind:!0,alias:"keyword",inside:{punctuation:/<|>/}},"core-rule":{pattern:RegExp("(?:(^|[^<\\w-])"+t+"|<"+t+">)(?![\\w-])","i"),lookbehind:!0,alias:["rule","constant"],inside:{punctuation:/<|>/}},rule:{pattern:/(^|[^<\w-])[a-z][\w-]*|<[^<>\r\n]*>/i,lookbehind:!0,inside:{punctuation:/<|>/}},operator:/=\/?|\//,punctuation:/[()\[\]]/}}(),Prism.languages.actionscript=Prism.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<|>>?>?|[!=]=?)=?|[~?@]/}),Prism.languages.actionscript["class-name"].alias="function",delete Prism.languages.actionscript.parameter,delete Prism.languages.actionscript["literal-property"],Prism.languages.markup&&Prism.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:Prism.languages.markup}}),Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],attribute:{pattern:/\b'\w+/,alias:"attr-name"},keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:false|true)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:\w)*\b/i},Prism.languages.agda={comment:/\{-[\s\S]*?(?:-\}|$)|--.*/,string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},punctuation:/[(){}⦃⦄.;@]/,"class-name":{pattern:/((?:data|record) +)\S+/,lookbehind:!0},function:{pattern:/(^[ \t]*)(?!\s)[^:\r\n]+(?=:)/m,lookbehind:!0},operator:{pattern:/(^\s*|\s)(?:[=|:∀→λ\\?_]|->)(?=\s)/,lookbehind:!0},keyword:/\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\b/},Prism.languages.al={comment:/\/\/.*|\/\*[\s\S]*?\*\//,string:{pattern:/'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,greedy:!0},function:{pattern:/(\b(?:event|procedure|trigger)\s+|(?:^|[^.])\.\s*)[a-z_]\w*(?=\s*\()/i,lookbehind:!0},keyword:[/\b(?:array|asserterror|begin|break|case|do|downto|else|end|event|exit|for|foreach|function|if|implements|in|indataset|interface|internal|local|of|procedure|program|protected|repeat|runonclient|securityfiltering|suppressdispose|temporary|then|to|trigger|until|var|while|with|withevents)\b/i,/\b(?:action|actions|addafter|addbefore|addfirst|addlast|area|assembly|chartpart|codeunit|column|controladdin|cuegroup|customizes|dataitem|dataset|dotnet|elements|enum|enumextension|extends|field|fieldattribute|fieldelement|fieldgroup|fieldgroups|fields|filter|fixed|grid|group|key|keys|label|labels|layout|modify|moveafter|movebefore|movefirst|movelast|page|pagecustomization|pageextension|part|profile|query|repeater|report|requestpage|schema|separator|systempart|table|tableelement|tableextension|textattribute|textelement|type|usercontrol|value|xmlport)\b/i],number:/\b(?:0x[\da-f]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)(?:F|LL?|U(?:LL?)?)?\b/i,boolean:/\b(?:false|true)\b/i,variable:/\b(?:Curr(?:FieldNo|Page|Report)|x?Rec|RequestOptionsPage)\b/,"class-name":/\b(?:automation|biginteger|bigtext|blob|boolean|byte|char|clienttype|code|completiontriggererrorlevel|connectiontype|database|dataclassification|datascope|date|dateformula|datetime|decimal|defaultlayout|dialog|dictionary|dotnetassembly|dotnettypedeclaration|duration|errorinfo|errortype|executioncontext|executionmode|fieldclass|fieldref|fieldtype|file|filterpagebuilder|guid|httpclient|httpcontent|httpheaders|httprequestmessage|httpresponsemessage|instream|integer|joker|jsonarray|jsonobject|jsontoken|jsonvalue|keyref|list|moduledependencyinfo|moduleinfo|none|notification|notificationscope|objecttype|option|outstream|pageresult|record|recordid|recordref|reportformat|securityfilter|sessionsettings|tableconnectiontype|tablefilter|testaction|testfield|testfilterfield|testpage|testpermissions|testrequestpage|text|textbuilder|textconst|textencoding|time|transactionmodel|transactiontype|variant|verbosity|version|view|views|webserviceactioncontext|webserviceactionresultcode|xmlattribute|xmlattributecollection|xmlcdata|xmlcomment|xmldeclaration|xmldocument|xmldocumenttype|xmlelement|xmlnamespacemanager|xmlnametable|xmlnode|xmlnodelist|xmlprocessinginstruction|xmlreadoptions|xmltext|xmlwriteoptions)\b/i,operator:/\.\.|:[=:]|[-+*/]=?|<>|[<>]=?|=|\b(?:and|div|mod|not|or|xor)\b/i,punctuation:/[()\[\]{}:.;,]/},Prism.languages.antlr4={comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,string:{pattern:/'(?:\\.|[^\\'\r\n])*'/,greedy:!0},"character-class":{pattern:/\[(?:\\.|[^\\\]\r\n])*\]/,greedy:!0,alias:"regex",inside:{range:{pattern:/([^[]|(?:^|[^\\])(?:\\\\)*\\\[)-(?!\])/,lookbehind:!0,alias:"punctuation"},escape:/\\(?:u(?:[a-fA-F\d]{4}|\{[a-fA-F\d]+\})|[pP]\{[=\w-]+\}|[^\r\nupP])/,punctuation:/[\[\]]/}},action:{pattern:/\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\}/,greedy:!0,inside:{content:{pattern:/(\{)[\s\S]+(?=\})/,lookbehind:!0},punctuation:/[{}]/}},command:{pattern:/(->\s*(?!\s))(?:\s*(?:,\s*)?\b[a-z]\w*(?:\s*\([^()\r\n]*\))?)+(?=\s*;)/i,lookbehind:!0,inside:{function:/\b\w+(?=\s*(?:[,(]|$))/,punctuation:/[,()]/}},annotation:{pattern:/@\w+(?:::\w+)*/,alias:"keyword"},label:{pattern:/#[ \t]*\w+/,alias:"punctuation"},keyword:/\b(?:catch|channels|finally|fragment|grammar|import|lexer|locals|mode|options|parser|returns|throws|tokens)\b/,definition:[{pattern:/\b[a-z]\w*(?=\s*:)/,alias:["rule","class-name"]},{pattern:/\b[A-Z]\w*(?=\s*:)/,alias:["token","constant"]}],constant:/\b[A-Z][A-Z_]*\b/,operator:/\.\.|->|[|~]|[*+?]\??/,punctuation:/[;:()=]/},Prism.languages.g4=Prism.languages.antlr4,Prism.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/(^[\t ]*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|Type|UserFile|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|Limit(?:InternalRecursion|Request(?:Body|Fields|FieldSize|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|SRPUnknownUserSeed|SRPVerifierFile|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UserName|UseStapling|VerifyClient|VerifyDepth)|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\b.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(?:[\w=],?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}},variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/,regex:/\^?.*\$|\^.*\$?/},Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=/\b(?:(?:after|before)(?=\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\s+sharing)\b/i,n="\\b(?:(?=[a-z_]\\w*\\s*[<\\[])|(?!))[A-Z_]\\w*(?:\\s*\\.\\s*[A-Z_]\\w*)*\\b(?:\\s*(?:\\[\\s*\\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*".replace(//g,(function(){return t.source}));function a(e){return RegExp(e.replace(//g,(function(){return n})),"i")}var r={keyword:t,punctuation:/[()\[\]{};,:.<>]/};e.languages.apex={comment:e.languages.clike.comment,string:e.languages.clike.string,sql:{pattern:/((?:[=,({:]|\breturn)\s*)\[[^\[\]]*\]/i,lookbehind:!0,greedy:!0,alias:"language-sql",inside:e.languages.sql},annotation:{pattern:/@\w+\b/,alias:"punctuation"},"class-name":[{pattern:a("(\\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\\s+\\w+\\s+on)\\s+)"),lookbehind:!0,inside:r},{pattern:a("(\\(\\s*)(?=\\s*\\)\\s*[\\w(])"),lookbehind:!0,inside:r},{pattern:a("(?=\\s*\\w+\\s*[;=,(){:])"),inside:r}],trigger:{pattern:/(\btrigger\s+)\w+\b/i,lookbehind:!0,alias:"class-name"},keyword:t,function:/\b[a-z_]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/i,number:/(?:\B\.\d+|\b\d+(?:\.\d+|L)?)\b/i,operator:/[!=](?:==?)?|\?\.?|&&|\|\||--|\+\+|[-+*/^&|]=?|:|<=?|>{1,3}=?/,punctuation:/[()\[\]{};,.]/}}(Prism),Prism.languages.apl={comment:/(?:⍝|#[! ]).*$/m,string:{pattern:/'(?:[^'\r\n]|'')*'/,greedy:!0},number:/¯?(?:\d*\.?\b\d+(?:e[+¯]?\d+)?|¯|∞)(?:j¯?(?:(?:\d+(?:\.\d+)?|\.\d+)(?:e[+¯]?\d+)?|¯|∞))?/i,statement:/:[A-Z][a-z][A-Za-z]*\b/,"system-function":{pattern:/⎕[A-Z]+/i,alias:"function"},constant:/[⍬⌾#⎕⍞]/,function:/[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⊆⊇⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,"monadic-operator":{pattern:/[\\\/⌿⍀¨⍨⌶&∥]/,alias:"operator"},"dyadic-operator":{pattern:/[.⍣⍠⍤∘⌸@⌺⍥]/,alias:"operator"},assignment:{pattern:/←/,alias:"keyword"},punctuation:/[\[;\]()◇⋄]/,dfn:{pattern:/[{}⍺⍵⍶⍹∇⍫:]/,alias:"builtin"}},Prism.languages.applescript={comment:[/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,/--.+/,/#.+/],string:/"(?:\\.|[^"\\\r\n])*"/,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?\b/i,operator:[/[&=≠≤≥*+\-\/÷^]|[<>]=?/,/\b(?:(?:begin|end|start)s? with|(?:contains?|(?:does not|doesn't) contain)|(?:is|isn't|is not) (?:contained by|in)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:comes|(?:does not|doesn't) come) (?:after|before)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equal to|equals|is not|isn't)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|as|div|mod|not|or))\b/],keyword:/\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,"class-name":/\b(?:POSIX file|RGB color|alias|application|boolean|centimeters|centimetres|class|constant|cubic centimeters|cubic centimetres|cubic feet|cubic inches|cubic meters|cubic metres|cubic yards|date|degrees Celsius|degrees Fahrenheit|degrees Kelvin|feet|file|gallons|grams|inches|integer|kilograms|kilometers|kilometres|list|liters|litres|meters|metres|miles|number|ounces|pounds|quarts|real|record|reference|script|square feet|square kilometers|square kilometres|square meters|square metres|square miles|square yards|text|yards)\b/,punctuation:/[{}():,¬«»《》]/},Prism.languages.aql={comment:/\/\/.*|\/\*[\s\S]*?\*\//,property:{pattern:/([{,]\s*)(?:(?!\d)\w+|(["'´`])(?:(?!\2)[^\\\r\n]|\\.)*\2)(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\.)*\1/,greedy:!0},identifier:{pattern:/([´`])(?:(?!\1)[^\\\r\n]|\\.)*\1/,greedy:!0},variable:/@@?\w+/,keyword:[{pattern:/(\bWITH\s+)COUNT(?=\s+INTO\b)/i,lookbehind:!0},/\b(?:AGGREGATE|ALL|AND|ANY|ASC|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_PATHS|K_SHORTEST_PATHS|LET|LIKE|LIMIT|NONE|NOT|NULL|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WINDOW|WITH)\b/i,{pattern:/(^|[^\w.[])(?:KEEP|PRUNE|SEARCH|TO)\b/i,lookbehind:!0},{pattern:/(^|[^\w.[])(?:CURRENT|NEW|OLD)\b/,lookbehind:!0},{pattern:/\bOPTIONS(?=\s*\{)/i}],function:/\b(?!\d)\w+(?=\s*\()/,boolean:/\b(?:false|true)\b/i,range:{pattern:/\.\./,alias:"operator"},number:[/\b0b[01]+/i,/\b0x[0-9a-f]+/i,/(?:\B\.\d+|\b(?:0|[1-9]\d*)(?:\.\d+)?)(?:e[+-]?\d+)?/i],operator:/\*{2,}|[=!]~|[!=<>]=?|&&|\|\||[-+*/%]/,punctuation:/::|[?.:,;()[\]{}]/},Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete Prism.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp('(\\b(?:import|module)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|'+"(?:\\s*:\\s*)?|:\\s*".replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism),Prism.languages.arduino=Prism.languages.extend("cpp",{keyword:/\b(?:String|array|bool|boolean|break|byte|case|catch|continue|default|do|double|else|finally|for|function|goto|if|in|instanceof|int|integer|long|loop|new|null|return|setup|string|switch|throw|try|void|while|word)\b/,constant:/\b(?:ANALOG_MESSAGE|DEFAULT|DIGITAL_MESSAGE|EXTERNAL|FIRMATA_STRING|HIGH|INPUT|INPUT_PULLUP|INTERNAL|INTERNAL1V1|INTERNAL2V56|LED_BUILTIN|LOW|OUTPUT|REPORT_ANALOG|REPORT_DIGITAL|SET_PIN_MODE|SYSEX_START|SYSTEM_RESET)\b/,builtin:/\b(?:Audio|BSSID|Bridge|Client|Console|EEPROM|Esplora|EsploraTFT|Ethernet|EthernetClient|EthernetServer|EthernetUDP|File|FileIO|FileSystem|Firmata|GPRS|GSM|GSMBand|GSMClient|GSMModem|GSMPIN|GSMScanner|GSMServer|GSMVoiceCall|GSM_SMS|HttpClient|IPAddress|IRread|Keyboard|KeyboardController|LiquidCrystal|LiquidCrystal_I2C|Mailbox|Mouse|MouseController|PImage|Process|RSSI|RobotControl|RobotMotor|SD|SPI|SSID|Scheduler|Serial|Server|Servo|SoftwareSerial|Stepper|Stream|TFT|Task|USBHost|WiFi|WiFiClient|WiFiServer|WiFiUDP|Wire|YunClient|YunServer|abs|addParameter|analogRead|analogReadResolution|analogReference|analogWrite|analogWriteResolution|answerCall|attach|attachGPRS|attachInterrupt|attached|autoscroll|available|background|beep|begin|beginPacket|beginSD|beginSMS|beginSpeaker|beginTFT|beginTransmission|beginWrite|bit|bitClear|bitRead|bitSet|bitWrite|blink|blinkVersion|buffer|changePIN|checkPIN|checkPUK|checkReg|circle|cityNameRead|cityNameWrite|clear|clearScreen|click|close|compassRead|config|connect|connected|constrain|cos|countryNameRead|countryNameWrite|createChar|cursor|debugPrint|delay|delayMicroseconds|detach|detachInterrupt|digitalRead|digitalWrite|disconnect|display|displayLogos|drawBMP|drawCompass|encryptionType|end|endPacket|endSMS|endTransmission|endWrite|exists|exitValue|fill|find|findUntil|flush|gatewayIP|get|getAsynchronously|getBand|getButton|getCurrentCarrier|getIMEI|getKey|getModifiers|getOemKey|getPINUsed|getResult|getSignalStrength|getSocket|getVoiceCallStatus|getXChange|getYChange|hangCall|height|highByte|home|image|interrupts|isActionDone|isDirectory|isListening|isPIN|isPressed|isValid|keyPressed|keyReleased|keyboardRead|knobRead|leftToRight|line|lineFollowConfig|listen|listenOnLocalhost|loadImage|localIP|lowByte|macAddress|maintain|map|max|messageAvailable|micros|millis|min|mkdir|motorsStop|motorsWrite|mouseDragged|mouseMoved|mousePressed|mouseReleased|move|noAutoscroll|noBlink|noBuffer|noCursor|noDisplay|noFill|noInterrupts|noListenOnLocalhost|noStroke|noTone|onReceive|onRequest|open|openNextFile|overflow|parseCommand|parseFloat|parseInt|parsePacket|pauseMode|peek|pinMode|playFile|playMelody|point|pointTo|position|pow|prepare|press|print|printFirmwareVersion|printVersion|println|process|processInput|pulseIn|put|random|randomSeed|read|readAccelerometer|readBlue|readButton|readBytes|readBytesUntil|readGreen|readJoystickButton|readJoystickSwitch|readJoystickX|readJoystickY|readLightSensor|readMessage|readMicrophone|readNetworks|readRed|readSlider|readString|readStringUntil|readTemperature|ready|rect|release|releaseAll|remoteIP|remoteNumber|remotePort|remove|requestFrom|retrieveCallingNumber|rewindDirectory|rightToLeft|rmdir|robotNameRead|robotNameWrite|run|runAsynchronously|runShellCommand|runShellCommandAsynchronously|running|scanNetworks|scrollDisplayLeft|scrollDisplayRight|seek|sendAnalog|sendDigitalPortPair|sendDigitalPorts|sendString|sendSysex|serialEvent|setBand|setBitOrder|setClockDivider|setCursor|setDNS|setDataMode|setFirmwareVersion|setMode|setPINUsed|setSpeed|setTextSize|setTimeout|shiftIn|shiftOut|shutdown|sin|size|sqrt|startLoop|step|stop|stroke|subnetMask|switchPIN|tan|tempoWrite|text|tone|transfer|tuneWrite|turn|updateIR|userNameRead|userNameWrite|voiceCall|waitContinue|width|write|writeBlue|writeGreen|writeJSON|writeMessage|writeMicroseconds|writeRGB|writeRed|yield)\b/}),Prism.languages.ino=Prism.languages.arduino,Prism.languages.arff={comment:/%.*/,string:{pattern:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/@(?:attribute|data|end|relation)\b/i,number:/\b\d+(?:\.\d+)?\b/,punctuation:/[{},]/},Prism.languages.armasm={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/"(?:[^"\r\n]|"")*"/,greedy:!0,inside:{variable:{pattern:/((?:^|[^$])(?:\${2})*)\$\w+/,lookbehind:!0}}},char:{pattern:/'(?:[^'\r\n]{0,4}|'')'/,greedy:!0},"version-symbol":{pattern:/\|[\w@]+\|/,greedy:!0,alias:"property"},boolean:/\b(?:FALSE|TRUE)\b/,directive:{pattern:/\b(?:ALIAS|ALIGN|AREA|ARM|ASSERT|ATTR|CN|CODE|CODE16|CODE32|COMMON|CP|DATA|DCB|DCD|DCDO|DCDU|DCFD|DCFDU|DCI|DCQ|DCQU|DCW|DCWU|DN|ELIF|ELSE|END|ENDFUNC|ENDIF|ENDP|ENTRY|EQU|EXPORT|EXPORTAS|EXTERN|FIELD|FILL|FN|FUNCTION|GBLA|GBLL|GBLS|GET|GLOBAL|IF|IMPORT|INCBIN|INCLUDE|INFO|KEEP|LCLA|LCLL|LCLS|LTORG|MACRO|MAP|MEND|MEXIT|NOFP|OPT|PRESERVE8|PROC|QN|READONLY|RELOC|REQUIRE|REQUIRE8|RLIST|ROUT|SETA|SETL|SETS|SN|SPACE|SUBT|THUMB|THUMBX|TTL|WEND|WHILE)\b/,alias:"property"},instruction:{pattern:/((?:^|(?:^|[^\\])(?:\r\n?|\n))[ \t]*(?:(?:[A-Z][A-Z0-9_]*[a-z]\w*|[a-z]\w*|\d+)[ \t]+)?)\b[A-Z.]+\b/,lookbehind:!0,alias:"keyword"},variable:/\$\w+/,number:/(?:\b[2-9]_\d+|(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e-?\d+)?|\b0(?:[fd]_|x)[0-9a-f]+|&[0-9a-f]+)\b/i,register:{pattern:/\b(?:r\d|lr)\b/,alias:"symbol"},operator:/<>|<<|>>|&&|\|\||[=!<>/]=?|[+\-*%#?&|^]|:[A-Z]+:/,punctuation:/[()[\],]/},Prism.languages["arm-asm"]=Prism.languages.armasm,function(e){var t=function(t,n){return{pattern:RegExp("\\{!(?:"+(n||t)+")$[^]*\\}","m"),greedy:!0,inside:{embedded:{pattern:/(^\{!\w+\b)[\s\S]+(?=\}$)/,lookbehind:!0,alias:"language-"+t,inside:e.languages[t]},string:/[\s\S]+/}}};e.languages.arturo={comment:{pattern:/;.*/,greedy:!0},character:{pattern:/`.`/,alias:"char",greedy:!0},number:{pattern:/\b\d+(?:\.\d+(?:\.\d+(?:-[\w+-]+)?)?)?\b/},string:{pattern:/"(?:[^"\\\r\n]|\\.)*"/,greedy:!0},regex:{pattern:/\{\/.*?\/\}/,greedy:!0},"html-string":t("html"),"css-string":t("css"),"js-string":t("js"),"md-string":t("md"),"sql-string":t("sql"),"sh-string":t("shell","sh"),multistring:{pattern:/».*|\{:[\s\S]*?:\}|\{[\s\S]*?\}|^-{6}$[\s\S]*/m,alias:"string",greedy:!0},label:{pattern:/\w+\b\??:/,alias:"property"},literal:{pattern:/'(?:\w+\b\??:?)/,alias:"constant"},type:{pattern:/:(?:\w+\b\??:?)/,alias:"class-name"},color:/#\w+/,predicate:{pattern:/\b(?:all|and|any|ascii|attr|attribute|attributeLabel|binary|block|char|contains|database|date|dictionary|empty|equal|even|every|exists|false|floating|function|greater|greaterOrEqual|if|in|inline|integer|is|key|label|leap|less|lessOrEqual|literal|logical|lower|nand|negative|nor|not|notEqual|null|numeric|odd|or|path|pathLabel|positive|prefix|prime|regex|same|set|some|sorted|standalone|string|subset|suffix|superset|symbol|symbolLiteral|true|try|type|unless|upper|when|whitespace|word|xnor|xor|zero)\?/,alias:"keyword"},"builtin-function":{pattern:/\b(?:abs|acos|acosh|acsec|acsech|actan|actanh|add|after|alert|alias|and|angle|append|arg|args|arity|array|as|asec|asech|asin|asinh|atan|atan2|atanh|attr|attrs|average|before|benchmark|blend|break|call|capitalize|case|ceil|chop|clear|clip|close|color|combine|conj|continue|copy|cos|cosh|crc|csec|csech|ctan|ctanh|cursor|darken|dec|decode|define|delete|desaturate|deviation|dialog|dictionary|difference|digest|digits|div|do|download|drop|dup|e|else|empty|encode|ensure|env|escape|execute|exit|exp|extend|extract|factors|fdiv|filter|first|flatten|floor|fold|from|function|gamma|gcd|get|goto|hash|hypot|if|inc|indent|index|infinity|info|input|insert|inspect|intersection|invert|jaro|join|keys|kurtosis|last|let|levenshtein|lighten|list|ln|log|loop|lower|mail|map|match|max|median|min|mod|module|mul|nand|neg|new|nor|normalize|not|now|null|open|or|outdent|pad|palette|panic|path|pause|permissions|permutate|pi|pop|popup|pow|powerset|powmod|prefix|print|prints|process|product|query|random|range|read|relative|remove|rename|render|repeat|replace|request|return|reverse|round|sample|saturate|script|sec|sech|select|serve|set|shl|shr|shuffle|sin|sinh|size|skewness|slice|sort|spin|split|sqrt|squeeze|stack|strip|sub|suffix|sum|switch|symbols|symlink|sys|take|tan|tanh|terminal|terminate|to|truncate|try|type|unclip|union|unique|unless|until|unzip|upper|values|var|variance|volume|webview|while|with|wordwrap|write|xnor|xor|zip)\b/,alias:"keyword"},sugar:{pattern:/->|=>|\||::/,alias:"operator"},punctuation:/[()[\],]/,symbol:{pattern:/<:|-:|ø|@|#|\+|\||\*|\$|---|-|%|\/|\.\.|\^|~|=|<|>|\\/},boolean:{pattern:/\b(?:false|maybe|true)\b/}},e.languages.art=e.languages.arturo}(Prism),function(e){var t={pattern:/(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\[\]\\]|\\.)*\]|[^\[\]\\"'$`]|\\.)*\]/m,lookbehind:!0,inside:{quoted:{pattern:/([$`])(?:(?!\1)[^\\]|\\.)*\1/,inside:{punctuation:/^[$`]|[$`]$/}},interpreted:{pattern:/'(?:[^'\\]|\\.)*'/,inside:{punctuation:/^'|'$/}},string:/"(?:[^"\\]|\\.)*"/,variable:/\w+(?==)/,punctuation:/^\[|\]$|,/,operator:/=/,"attr-value":/(?!^\s+$).+/}},n=e.languages.asciidoc={"comment-block":{pattern:/^(\/{4,})$[\s\S]*?^\1/m,alias:"comment"},table:{pattern:/^\|={3,}(?:(?:\r?\n|\r(?!\n)).*)*?(?:\r?\n|\r)\|={3,}$/m,inside:{specifiers:{pattern:/(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*](?:[<^>](?:\.[<^>])?|\.[<^>])?|[<^>](?:\.[<^>])?|\.[<^>])[a-z]*|[a-z]+)(?=\|)/,alias:"attr-value"},punctuation:{pattern:/(^|[^\\])[|!]=*/,lookbehind:!0}}},"passthrough-block":{pattern:/^(\+{4,})$[\s\S]*?^\1$/m,inside:{punctuation:/^\++|\++$/}},"literal-block":{pattern:/^(-{4,}|\.{4,})$[\s\S]*?^\1$/m,inside:{punctuation:/^(?:-+|\.+)|(?:-+|\.+)$/}},"other-block":{pattern:/^(--|\*{4,}|_{4,}|={4,})$[\s\S]*?^\1$/m,inside:{punctuation:/^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/}},"list-punctuation":{pattern:/(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,lookbehind:!0,alias:"punctuation"},"list-label":{pattern:/(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,lookbehind:!0,alias:"symbol"},"indented-block":{pattern:/((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,lookbehind:!0},comment:/^\/\/.*/m,title:{pattern:/^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} .+|^\.(?![\s.]).*/m,alias:"important",inside:{punctuation:/^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/}},"attribute-entry":{pattern:/^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,alias:"tag"},attributes:t,hr:{pattern:/^'{3,}$/m,alias:"punctuation"},"page-break":{pattern:/^<{3,}$/m,alias:"punctuation"},admonition:{pattern:/^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,alias:"keyword"},callout:[{pattern:/(^[ \t]*)\d*>/m,lookbehind:!0,alias:"symbol"},{pattern:/<\d+>/,alias:"symbol"}],macro:{pattern:/\b[a-z\d][a-z\d-]*::?(?:[^\s\[\]]*\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:{function:/^[a-z\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:t.inside}}},inline:{pattern:/(^|[^\\])(?:(?:\B\[(?:[^\]\\"']|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"']|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,lookbehind:!0,inside:{attributes:t,url:{pattern:/^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,inside:{punctuation:/^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/}},"attribute-ref":{pattern:/^\{.+\}$/,inside:{variable:{pattern:/(^\{)[a-z\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\{|\}$|::?/}},italic:{pattern:/^(['_])[\s\S]+\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\*[\s\S]+\*$/,inside:{punctuation:/^\*\*?|\*\*?$/}},punctuation:/^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/}},replacement:{pattern:/\((?:C|R|TM)\)/,alias:"builtin"},entity:/?[\da-z]{1,8};/i,"line-continuation":{pattern:/(^| )\+$/m,lookbehind:!0,alias:"punctuation"}};function a(e){for(var t={},a=0,r=(e=e.split(" ")).length;a>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,a){return RegExp(t(e,n),a||"")}function a(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var r="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",i="class enum interface record struct",o="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",s="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(i),c=RegExp(l(r+" "+i+" "+o+" "+s)),u=l(i+" "+o+" "+s),p=l(r+" "+i+" "+s),m=a("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),g=a("\\((?:[^()]|<>)*\\)",2),b="@?\\b[A-Za-z_]\\w*\\b",f=t("<<0>>(?:\\s*<<1>>)?",[b,m]),E=t("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[u,f]),h="\\[\\s*(?:,\\s*)*\\]",S=t("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[E,h]),y=t("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[m,g,h]),A=t("\\(<<0>>+(?:,<<0>>+)+\\)",[y]),T=t("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[A,E,h]),_={keyword:c,punctuation:/[<>()?,.:[\]]/},R="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",I='"(?:\\\\.|[^\\\\"\r\n])*"';e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:n("(^|[^@$\\\\])<<0>>",[I]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[E]),lookbehind:!0,inside:_},{pattern:n("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[b,T]),lookbehind:!0,inside:_},{pattern:n("(\\busing\\s+)<<0>>(?=\\s*=)",[b]),lookbehind:!0},{pattern:n("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:_},{pattern:n("(\\bcatch\\s*\\(\\s*)<<0>>",[E]),lookbehind:!0,inside:_},{pattern:n("(\\bwhere\\s+)<<0>>",[b]),lookbehind:!0},{pattern:n("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[S]),lookbehind:!0,inside:_},{pattern:n("\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[T,p,b]),inside:_}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n("([(,]\\s*)<<0>>(?=\\s*:)",[b]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[b]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n("(\\b(?:default|sizeof|typeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",[g]),lookbehind:!0,alias:"class-name",inside:_},"return-type":{pattern:n("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[T,E]),inside:_,alias:"class-name"},"constructor-invocation":{pattern:n("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[T]),lookbehind:!0,inside:_,alias:"class-name"},"generic-method":{pattern:n("<<0>>\\s*<<1>>(?=\\s*\\()",[b,m]),inside:{function:n("^<<0>>",[b]),generic:{pattern:RegExp(m),alias:"class-name",inside:_}}},"type-list":{pattern:n("\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,b,T,c.source,g,"\\bnew\\s*\\(\\s*\\)"]),lookbehind:!0,inside:{"record-arguments":{pattern:n("(^(?!new\\s*\\()<<0>>\\s*)<<1>>",[f,g]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(T),greedy:!0,inside:_},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var w=I+"|"+R,k=t("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[w]),N=a(t("[^\"'/()]|<<0>>|\\(<>*\\)",[k]),2),v="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",O=t("<<0>>(?:\\s*\\(<<1>>*\\))?",[E,N]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[v,O]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n("^<<0>>(?=\\s*:)",[v]),alias:"keyword"},"attribute-arguments":{pattern:n("\\(<<0>>*\\)",[N]),inside:e.languages.csharp},"class-name":{pattern:RegExp(E),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var C=":[^}\r\n]+",P=a(t("[^\"'/()]|<<0>>|\\(<>*\\)",[k]),2),L=t("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[P,C]),D=a(t("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)",[w]),2),x=t("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[D,C]);function M(t,a){return{interpolation:{pattern:n("((?:^|[^{])(?:\\{\\{)*)<<0>>",[t]),lookbehind:!0,inside:{"format-string":{pattern:n("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[a,C]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[L]),lookbehind:!0,greedy:!0,inside:M(L,P)},{pattern:n('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[x]),lookbehind:!0,greedy:!0,inside:M(x,D)}],char:{pattern:RegExp(R),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism),Prism.languages.aspnet=Prism.languages.extend("markup",{"page-directive":{pattern:/<%\s*@.*%>/,alias:"tag",inside:{"page-directive":{pattern:/<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,alias:"tag"},rest:Prism.languages.markup.tag.inside}},directive:{pattern:/<%.*%>/,alias:"tag",inside:{directive:{pattern:/<%\s*?[$=%#:]{0,2}|%>/,alias:"tag"},rest:Prism.languages.csharp}}}),Prism.languages.aspnet.tag.pattern=/<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/,Prism.languages.insertBefore("inside","punctuation",{directive:Prism.languages.aspnet.directive},Prism.languages.aspnet.tag.inside["attr-value"]),Prism.languages.insertBefore("aspnet","comment",{"asp-comment":{pattern:/<%--[\s\S]*?--%>/,alias:["asp","comment"]}}),Prism.languages.insertBefore("aspnet",Prism.languages.javascript?"script":"tag",{"asp-script":{pattern:/(