How to Create a Link Preview: The Definite Guide [Implementation and Demo Included]

When you add a link in a chat message or share it on social networks like Facebook, Twitter, LinkedIn, you can see a small preview and a short description of the link. The main benefit of link previews is that users have some expectation of what they will get before opening the link.

In this blog post, we will create a solution, which converts a link:

In this:

I released this solution as npm packaged. You can check the source code on Github and the demo implemented on Heroku.

Nowadays, we can see the link preview feature in almost all social networks or chats. app, where users can send or share url links. In this blog post, I want to share with you how to create a link preview function without a third-party API. I’m going to describe the entire strategy of creating link previews, including implementation using open source libraries in node.js.

Why did I decide to write this blog post?

When I needed to create a preview link function, I came across a lot of misleading or outdated information on this topic. If I found a solution that worked, it was based on some paid 3rd party APIs. I hope this article saves you a lot of time figuring out how to build this function with open source libraries in any back-end language.

What should be included in a link preview?

A URL link preview usually contains the title, a description, the domain name, and an image. You can create even richer link previews by providing other information. For more details, see Additional Tips.

How to get data to preview a link?

Facebook launched the Open Graph protocol in 2010, which is now managed by Open Web Foundation. The main goal is an easier integration between Facebook and other websites. That being said, Open Graph Protocol allows you to control what information is used when sharing a website. If websites want to use the Open Graph Protocol, they must have Open Graph meta tags in the part of the website’s code.

og meta tags

Other social networks also take Open Graph Protocol into account. However, Twitter created its own tags for Twitter Cards, which are called Twitter Card Tags. They are based on the same conventions as the Open Graph protocol. When the Twitter card processor looks for tags on a page, it first looks for the Twitter-specific property, and if it’s not present, it falls back to the supported Open Graph property. More information can be found in the Twitter documentation.

 twitter meta tags

The following Open Graph tags are used to create link previews:

Open Graph Title

This tag works the same as the . Allows you to define the title of the content. If Facebook can’t find the og:title tag, use the meta instead. This tag is very important, because <title> is usually displayed in bold.</p> <p>There is no limit on the number of characters, but the title must be between 60 and 90 characters as a meta title. Otherwise, it may be shortened or truncated. For example, Facebook will truncate it to 88 characters.</p> <p> <b>Open Chart Description</b> </p> <p>This tag is again similar to the meta tag description. This is where the content of the website is described. Similar rules apply to this tag as for the title tag. If a social media bot can’t find the og:description tag, it uses a meta description, and there’s no limit to the number of characters. In this case, you should use around 200 letters.</p> <p> <b>Open Graph Image</b> </p> <p>An image is probably the most eye-catching element in the link preview. You can define the image with og:image title. The recommended resolution is 1200 pixels x 627 pixels (1.91/1 aspect ratio) and the image size should not exceed 5 MB.</p> <div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="https://httl.com.vn/en/how-to-create-a-scam-website/" target="_self" rel="nofollow" class="u4795692e31634b5f494744ffc5d5914b"><!-- INLINE RELATED POSTS 1/3 //--><style> .u4795692e31634b5f494744ffc5d5914b { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#e6e6e6; border:0!important; border-left:4px solid #F1C40F!important; text-decoration:none; } .u4795692e31634b5f494744ffc5d5914b:active, .u4795692e31634b5f494744ffc5d5914b:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u4795692e31634b5f494744ffc5d5914b { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u4795692e31634b5f494744ffc5d5914b .ctaText { font-weight:bold; color:#E74C3C; text-decoration:none; font-size: 16px; } .u4795692e31634b5f494744ffc5d5914b .postTitle { color:#3498DB; text-decoration: underline!important; font-size: 16px; } .u4795692e31634b5f494744ffc5d5914b:hover .postTitle { text-decoration: underline!important; } </style><div style="padding-left:1em; padding-right:1em;"><span class="ctaText">See Also:</span>  <span class="postTitle">What Are Scam Websites and How To Avoid Scam Websites</span></div></a></div><p> <b>Open Graphic URL</b> </p> <p> This tag defines the canonical URL of your page. The URL provided is not displayed in the Facebook newsfeed, only the domain is displayed.</p> <p>You can find a full list of available og tags on the Open Graph website.</p> <h2>How to get data without metadata and og tags?</h2> <p>There are many websites without meta tags and basic og tags. What data should we preview in this case?</p> <p>We can use data in the body of the document.</p> <p> <b>The title</b> </p> <p>If the website does not contain a meta title tag or og: title tag, we can consider a heading in the document body as the main title. The most important heading in the body of the document is </p> <h1>. If the website does not contain the </p> <h1> tag, we can search for </p> <h2> tags.</p> <p> <b>The description</b> </p> <p>The strategy for getting the description of the website is similar to getting the title. . If the document does not contain a meta description or og:description, we can consider the main text of the document as the description of the website.</p> <p> <b>The domain name</b> </p> <p>We will search for or og:url. If the document doesn’t contain one of these, we’ll use the url parameter.</p> <p> <b>The image</b> </p> <p>Of all the attributes mentioned, the image is the most complicated element.</p> <p> <b>Which image should represent the URL of the website, if the document html doesn’t contain the og:image? tag</b> </p> <p>There is another way to specify the image of the website. There is a link tag with the rel=”image_src” attribute in the following format:</p> <p>However, we can find many websites without og : image or tag. In this case, we need to parse the images in the document body.</p> <p>Raymond Camden described in his 2011 blog post how Facebook and Google+ used to determine which image to use for link preview. Facebook used the og:image and tags and Google+ used the first <img> tag in the html body. Neither of these strategies seems correct, because Facebook did not consider images in the document body and Google+ chose the first image, which could be an image for the layout.</p> <p>Slack published a blog post, how do they create link previews, but do not take into account images in the html body.</p> <blockquote> <p><i>How does Facebook determine which images to display as thumbnails when posting a link?</i></p> </blockquote> <blockquote> <p><i>Candidate images are filtered using javascript which removes all images less than 50 pixels tall or wide and all images with a longest dimension to longest dimension ratio cut greater than 3:1. Leaked images are sorted by area, and users can choose whether multiple images exist.</i></p> </blockquote> <p><cite>quora.com</cite></p> <blockquote> <p><i>By removing the ability to customize link metadata (ie title, description, image) from all link sharing entry points on Facebook, we are removing a channel that has been abused for posting fake news .</i> </p> </blockquote> <p><cite>developers.facebook.com</cite></p> <p>I think the described strategy works well. Images less than 50px tall or wide are perhaps icons, images with an aspect ratio greater than 3:1 don’t fit well in previews. Images with a larger area are perhaps more important to website content than smaller images.</p> <h2>Implementation</h2> <p>You can find several attempts to create a library that implements the function of preview links.</p> <p>There is a node.js “fix” on AWS Lambda. Unfortunately, the main library and its source code repository are no longer available.</p> <blockquote> <p><i>Is there open source code for creating ‘link preview’ text and icons, such as on Facebook? </i></p> </blockquote> <p>stackoverflow.com</p> <p>I couldn’t find any open source implementations, so let’s build one.</p> <h3>Libraries used </h3> <p>If you want to implement the whole strategy for creating link previews, you should use a library that allows you to access the DOM structure of the html document. In the node.js environment, I found three libraries that allow you to access the DOM:</p> <ul> <li> JSDom simulates a web browser environment in node.js and allows you to access the DOM structure</li> <li> Puppeteer lets you control Chrome without a GUI from Node.js</li> <li>PhantomJS, a non-gui web browser scriptable with JavaScript</li> </ul> <p>JSDom doesn’t work ok, because we need to be visible url elements and JSDom doesn’t parse css styles well [1, 2].</p> <p>If you need to choose between Puppeteer and PhantomJS, I would recommend using Puppeteer, because PhantomJS development has stopped and Puppeteer is faster and requires less memory.</p> <h3>Configuring Puppeteer for Web Scraping</h3> <p>Puppeteer has many options and allows you to configure Chrome with various settings. Therefore, using Puppeteer for the first time is not that simple. Before you can open websites in Puppeteer, you must configure it to extract data from websites.</p> <p>Some websites do not want you to extract data. In this case, you can use puppeteer-extra-plugin-stealth, which uses various techniques to make it more difficult to detect a headless puppeteer.</p> <p>If you want to interact with the website in Puppeteer, you must use the Function page .evaluate(), where Puppeteer runs the script in the browser, not in node.js. If you have other modules or functions that you want to use in the evaluate function, you should use page.exposeFunction(). Modules imported into node.js are not accessible in the Puppeteer browser, and the expose function allows you to expose functions in the browser.</p> <p>When the browser makes a request to a website, it sends an HTTP header called “User Agent”. The user agent contains information about the web browser. Some websites do not provide meta tags for common user agents. In Puppeteer, you can configure the Facebook crawler user agent because, in most cases, websites want to provide metadata for Facebook.</p> <h3>Strategy for getting individual elements for link preview</h3> <p>We are going to implement the following strategy in node.js, which should be applicable in all back-end languages.</p> <p> <b>The title</b> </p> <p>Find og:title in the document header.If og:title does not exist, look for the meta title tag in the document head. If the meta title doesn’t exist, look for the </p> <h1> tag in the body of the document. If </p> <h1> does not exist, look for the first occurrence of the </p> <h2> tag in the document body.</p> <p> const getTitle = asynchronous page => { const title = await page.evaluate(() => { const ogTitle = document.querySelector(‘meta[property=”og:title”]’); if (ogTitle != null && ogTitle.content.length > 0) { return ogTitle.content; } const twitterTitle = document.querySelector(‘meta [ name=”twitter:title”]’); if (twitterTitle != null && twitterTitle.content.length > 0) { return twitterTitle.content; } const docTitle = document.title; if (docTitle != null && docTitle. length > 0) { return docTitle; } const h1 = document.querySelector(“h1”).innerHTML; if (h1 != null && h1.length > 0) { return h1; } const h2 = document.querySelector(“h1 ” ).innerHTML; if (h2 != null && h2.length > 0) { return h2; } return null; }); return title; }; </p> <p>Source: github.com</p> <p> <b>The description</b> </p> <p>Find og:description in the document header. If og:description doesn’t exist, look for the meta description tag in the document head. If the meta description tag doesn’t exist, parse the document body text. Finds the first visible paragraph, whose text is the site description.</p> <p> const getDescription = asynchronous page => { const description = expect page.evaluate(() => { const ogDescription = document.querySelector( ‘meta[property =”og :description”]’ ); if (ogDescription != null && ogDescription.content.length > 0) { return ogDescription.content; } const twitterDescription = document.querySelector( ‘meta[name=”twitter:description”] ‘ ); if (twitterDescription != null && twitterDescription.content.length > 0) { return twitterDescription.content; } const metaDescription = document.querySelector(‘meta[name=”description”]’); if (metaDescription != null && metaDescription.content.length > 0) { return metaDescription.content; } paragraphs = document.querySelectorAll(“p”); let fstVisibleParagraph = null; for (let i = 0; i < paragraphs.length; i++) { if ( // if object is visible in dom paragraphs[i].offsetParent !== null && !paragraphs[i].childElementCount != 0 ) { fstVisibleParag raph = paragraphs[i].textContent ; break; } } returns fstVisibleParagraph; }); return description; }; </p> <p>Source: github.com</p> <p> <b>The domain name</b> </p> <p>Find or og:url. If the document does not contain one of these, use the url parameter.</p> <p> const getDomainName = async (page, uri) => { const domainName = await page.evaluate(() => { const canonicalLink = document.querySelector ( “link[rel=canonical]”); if (canonicalLink != null && canonicalLink.href.length > 0) { return canonicalLink.href; } const ogUrlMeta = document.querySelector(‘meta[property=”og:url” ] ‘); if (ogUrlMeta != null && ogUrlMeta.content.length > 0) { return ogUrlMeta.content; } return null; }); return domain name! = null? new URL (domain name). hostname. replace(“www.”, “”): new url(uri). hostname. replace(“www.”, “”); }; </p> <p>Source: github.com</p> <p> <b>The Image</b> </p> <p>Find og:image in the document header. If og:image doesn’t exist, look for the tag in the header. If the tag does not exist, search for all images in the body of the document. Delete all images that are less than 50 pixels in height or width, and all images with a longest dimension to shortest dimension ratio greater than 3:1. Returns the image with the largest area.</p> <p> const util = require(“util”); const request = util.promisify(require(“request”)); const getUrls = require(“get-urls”); const urlImageIsAccessible = asynchronous url => { const correctedUrls = getUrls(url); if (correctedURL.size! == 0) { const urlResponse = wait for request(correctedURL.values().next().value); const contentType = urlResponse.headers[“content-type”]; returns new RegExp(“image/*”).test(contentType); } }; const getImg = async(page, uri) => { const img = expect page.evaluate(async() => { const ogImg = document.querySelector(‘meta[property=”og:image”]’); if ( ogImg != null && ogImg.content.length > 0 && (expect urlImageIsAccessible(ogImg.content)) ) { return ogImg.content; } const imgRelLink = document.querySelector(‘link[rel=”image_src”]’); if ( imgRelLink != null && imgRelLink.href.length > 0 && (expect urlImageIsAccessible(imgRelLink.href)) ) { return imgRelLink.href; } const twitterImg = document.querySelector(‘meta[name=”twitter:image”]’) if ( twitterImg != null && twitterImg.content.length > 0 && (expect urlImageIsAccessible(twitterImg.content)) ) { return twitterImg.content; } let imgs = Array.from(document.getElementsByTagName(“img”)); if (imgs.length > 0) { imgs = imgs.filter(img => { let addImg = true; if (img.naturalWidth > img.naturalHeight) { if (img.naturalWidth / img.naturalHeight > 3) { addImg = false ; } } else { if (img.naturalHeight / img.naturalWidth > 3) { addImg = false my; } } if (img.naturalHeight <= 50 || img.naturalwidth img.src.indexOf(“//”) === -1 ? (img.src = `${new URL(uri).source}/${src}`) : img. origin); return imgs[0].src; } returns null; }); return image; }; </p> <p>Source: github.com</p> <h2>Testing</h2> <p>If you want to test your link preview implementation, you can use the Facebook sharing debugger. This is a free tool, which scrapes any web page hosted on a public server and shows how it would look when shared.</p> <h2>Additional Tips</h2> <p>Your link previews can still be richer and provide more information to users. For example, if the website contains the og:video tag, you can replace the image with video. There is other information that you can use in the previews. There are specific tags for articles, books, or profiles.</p> <p>Consider setting up a proxy or using IP rotation for your server, as some websites try to detect web scraping and block it. Some websites block users from specific countries. If you need more tips to avoid web scraping detection, you can refer to this article.</p> <h2>Conclusion</h2> <p>In this article, we describe how social media and chat apps create previews of links. We then describe the implementation, which can be used in any back-end language. As an example, we implement the entire solution in node.js. The result is an open source node.js <b>library</b> and the demo is implemented on <b>Heroku</b>.</p> <p>As you can see, creating a preview function Link building is easy if you use the right approach. You don’t need to depend on third-party APIs and pay for similar services.</p> <p>.</p> <div class='code-block code-block-3' style='margin: 8px auto; text-align: center; display: block; clear: both;'> <script data-rocketlazyloadscript='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2041036629885411' async crossorigin="anonymous"></script> <!-- Vuong --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2041036629885411" data-ad-slot="4953799150" data-ad-format="auto" data-full-width-responsive="true"></ins> <script data-rocketlazyloadscript='data:text/javascript;base64,CiAgICAgKGFkc2J5Z29vZ2xlID0gd2luZG93LmFkc2J5Z29vZ2xlIHx8IFtdKS5wdXNoKHt9KTsK' ></script></div> <!-- AI CONTENT END 1 --> </div> </div> </article> <div id="comments" class="comments-area"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/en/how-to-create-a-website-preview/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://httl.com.vn/en/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Comment <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p> <p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p> <p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Save my name, email, and website in this browser for the next time I comment.</label></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='41844' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="589ad3f6f6" /></p><p style="display: none !important;"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="202"/><script>document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div><!-- #respond --> </div> </div> <div class="post-sidebar large-3 col"> <div id="secondary" class="widget-area " role="complementary"> <aside id="nav_menu-3" class="widget widget_nav_menu"><span class="widget-title "><span>MOST VIEWED POST</span></span><div class="is-divider small"></div><div class="menu-most-viewed-posts-container"><ul id="menu-most-viewed-posts" class="menu"><li id="menu-item-11635" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-11635"><a href="https://httl.com.vn/en/gmail-account-free/">150+ Free Gmail Accounts</a></li> <li id="menu-item-15231" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-15231"><a href="https://httl.com.vn/en/gmail-pop3-unable-to-fetch-mail/">My Account Is Not Retrieving Email, Gmail Pop3 Unable To Fetch Mail</a></li> </ul></div></aside> <aside id="recent-posts-2" class="widget widget_recent_entries"> <span class="widget-title "><span>Recent Posts</span></span><div class="is-divider small"></div> <ul> <li> <a href="https://httl.com.vn/en/how-to-view-gmail-profile-picture-of-other-users-in-full-size-and-full-resolution/">How To View Gmail Profile Picture Of Other Users In Full Size And Full Resolution</a> </li> <li> <a href="https://httl.com.vn/en/how-to-create-your-google-account-without-a-phone-number/">How To Create Your Google Account Without A Phone Number</a> </li> <li> <a href="https://httl.com.vn/en/error-apple-mail-moving-messages-stuck-resolved/">Error: Apple Mail Moving Messages Stuck [Resolved] – A Comprehensive Guide</a> </li> <li> <a href="https://httl.com.vn/en/important-documents-mailing-safety/">Important Documents Mailing Safety: Keeping Your Sensitive Information Secure During Transit</a> </li> <li> <a href="https://httl.com.vn/en/free-kratom-samples-in-2023/">Free Kratom Samples in 2023: The Ultimate Guide</a> </li> </ul> </aside><aside id="categories-3" class="widget widget_categories"><span class="widget-title "><span>Categories</span></span><div class="is-divider small"></div> <ul> <li class="cat-item cat-item-9"><a href="https://httl.com.vn/en/everything-else/">Everything else</a> </li> <li class="cat-item cat-item-10"><a href="https://httl.com.vn/en/finance/">Finance</a> </li> <li class="cat-item cat-item-8"><a href="https://httl.com.vn/en/mail/">Mail</a> </li> <li class="cat-item cat-item-4"><a href="https://httl.com.vn/en/news/">News</a> </li> <li class="cat-item cat-item-5"><a href="https://httl.com.vn/en/share/">Share</a> </li> </ul> </aside></div> </div> </div> </div> </main> <footer id="footer" class="footer-wrapper"> <!-- FOOTER 1 --> <div class="footer-widgets footer footer-1"> <div class="row large-columns-2 mb-0"> <div id="text-3" class="col pb-0 widget widget_text"><span class="widget-title">Earnings Disclaimer</span><div class="is-divider small"></div> <div class="textwidget"><p style="text-align: justify;"><strong><a href="http://httl.com.vn/en/">Httl.com.vn/en</a></strong> Share knowledge Q&A how-to guides and Tech Tips like gmail, email, tinder, facebook, skyper..vv</p> </div> </div><div id="nav_menu-5" class="col pb-0 widget widget_nav_menu"><span class="widget-title">Menu</span><div class="is-divider small"></div><div class="menu-footer-3-container"><ul id="menu-footer-3" class="menu"><li id="menu-item-39650" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-39650"><a href="https://httl.com.vn/en/contact/">Contact</a></li> <li id="menu-item-39651" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-39651"><a href="https://httl.com.vn/en/privacy-policy/">Privacy Policy</a></li> <li id="menu-item-39652" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-39652"><a href="https://httl.com.vn/en/terms-and-conditions/">Terms and Conditions</a></li> </ul></div></div> </div> </div> <!-- FOOTER 2 --> <div class="footer-widgets footer footer-2 dark"> <div class="row dark large-columns-1 mb-0"> <div id="ai_widget-3" class="col pb-0 widget ai_widget"><div class='ai-viewports ai-viewport-3 ai-insert-1-75737616' style='margin: 8px 0; clear: both;' data-insertion-position='prepend' data-selector='.ai-insert-1-75737616' data-insertion-no-dbg data-code='PGRpdiBjbGFzcz0nY29kZS1ibG9jayBjb2RlLWJsb2NrLTEnIHN0eWxlPSdtYXJnaW46IDhweCAwOyBjbGVhcjogYm90aDsnPgo8c2NyaXB0IGFzeW5jIHNyYz0iaHR0cHM6Ly9wYWdlYWQyLmdvb2dsZXN5bmRpY2F0aW9uLmNvbS9wYWdlYWQvanMvYWRzYnlnb29nbGUuanM/Y2xpZW50PWNhLXB1Yi0yMDQxMDM2NjI5ODg1NDExIgogICAgIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pgo8IS0tIDMwMCoyNTAgLS0+CjxpbnMgY2xhc3M9ImFkc2J5Z29vZ2xlIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDozMDBweDtoZWlnaHQ6MjUwcHgiCiAgICAgZGF0YS1hZC1jbGllbnQ9ImNhLXB1Yi0yMDQxMDM2NjI5ODg1NDExIgogICAgIGRhdGEtYWQtc2xvdD0iNjU4MDI1NDMyMyI+PC9pbnM+CjxzY3JpcHQ+CiAgICAgKGFkc2J5Z29vZ2xlID0gd2luZG93LmFkc2J5Z29vZ2xlIHx8IFtdKS5wdXNoKHt9KTsKPC9zY3JpcHQ+PC9kaXY+Cg==' data-block='1'></div> </div> </div> </div> <div class="absolute-footer dark medium-text-center small-text-center"> <div class="container clearfix"> <div class="footer-secondary pull-right"> <div class="footer-text inline-block small-block"> <a href="https://httl.com.vn/" target="_blank" rel="noopener">HTTL</a> | <a href="https://httl.com.vn/about-httlen/" target="_blank" rel="noopener">About Us</a> </div> </div> <div class="footer-primary pull-left"> <div class="copyright-footer"> Copyright 2024 © All rights reserved </div> </div> </div> </div> <a href="#top" class="back-to-top button icon invert plain fixed bottom z-1 is-outline hide-for-medium circle" id="top-link" aria-label="Go to top"><i class="icon-angle-up" ></i></a> </footer> </div> <div class='ai-viewports ai-viewport-1 ai-viewport-2 ai-insert-4-91031646' style='opacity: 0.01; position: fixed; z-index: 9995; width: 780px; height: auto !important; top: 200px; text-align: center; left: 40%; transform: translate(-50%, -50%); overflow: visible;' data-insertion-position='prepend' data-selector='.ai-insert-4-91031646' data-insertion-no-dbg data-code='PGRpdiBjbGFzcz0nY29kZS1ibG9jayBjb2RlLWJsb2NrLTQgYWktY2VudGVyLWggYWktY2VudGVyLXYgYWktdHJhY2snIGRhdGEtYWk9J1d6UXNNQ3dpUW14dlkyc2dOQ0lzSWlJc01WMD0nIHN0eWxlPSdvcGFjaXR5OiAwLjAxOyBwb3NpdGlvbjogZml4ZWQ7IHotaW5kZXg6IDk5OTU7IHdpZHRoOiA3ODBweDsgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IHRvcDogMjAwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgbGVmdDogNDAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgb3ZlcmZsb3c6IHZpc2libGU7Jz4KPGRpdiBjbGFzcz0nbm8tdmlzaWJpbGl0eS1jaGVjayBhaS1jaGVjay00LTE4MTU0ODUyJyBkYXRhLWluc2VydGlvbi1wb3NpdGlvbj0nYWZ0ZXInIGRhdGEtc2VsZWN0b3I9Jy5haS1jaGVjay00LTE4MTU0ODUyJyBkYXRhLWNvZGU9J1BHUnBkaUJqYkdGemN6MGlZV2t0WVhSMGNtbGlkWFJsY3lJK0NqeHpjR0Z1SUdOc1lYTnpQU2RoYVMxamFHVmpheTFpYkc5amF5Y2daR0YwWVMxaGFTMWliRzlqYXowbk5DY2daR0YwWVMxaGFTMXNhVzFwZEMxcGJYQXRjR1Z5TFhScGJXVTlKekluSUdSaGRHRXRZV2t0YkdsdGFYUXRhVzF3TFhScGJXVTlKekVuSUdSaGRHRXRZV2t0YkdsdGFYUXRZMnhwWTJ0ekxYQmxjaTEwYVcxbFBTY3lKeUJrWVhSaExXRnBMV3hwYldsMExXTnNhV05yY3kxMGFXMWxQU2N4Sno0OEwzTndZVzQrQ2p3dlpHbDJQZ284YzJOeWFYQjBJR0Z6ZVc1aklITnlZejBpYUhSMGNITTZMeTl3WVdkbFlXUXlMbWR2YjJkc1pYTjVibVJwWTJGMGFXOXVMbU52YlM5d1lXZGxZV1F2YW5NdllXUnpZbmxuYjI5bmJHVXVhbk0vWTJ4cFpXNTBQV05oTFhCMVlpMHlNRFF4TURNMk5qSTVPRGcxTkRFeElnb2dJQ0FnSUdOeWIzTnpiM0pwWjJsdVBTSmhibTl1ZVcxdmRYTWlQand2YzJOeWFYQjBQZ284SVMwdElEazNNQ295TlRBZ0xTMCtDanhwYm5NZ1kyeGhjM005SW1Ga2MySjVaMjl2WjJ4bElnb2dJQ0FnSUhOMGVXeGxQU0prYVhOd2JHRjVPbWx1YkdsdVpTMWliRzlqYXp0M2FXUjBhRG81TnpCd2VEdG9aV2xuYUhRNk1qVXdjSGdpQ2lBZ0lDQWdaR0YwWVMxaFpDMWpiR2xsYm5ROUltTmhMWEIxWWkweU1EUXhNRE0yTmpJNU9EZzFOREV4SWdvZ0lDQWdJR1JoZEdFdFlXUXRjMnh2ZEQwaU9EUTVOamMzTURrMU9DSStQQzlwYm5NK0NqeHpZM0pwY0hRK0NpQWdJQ0FnS0dGa2MySjVaMjl2WjJ4bElEMGdkMmx1Wkc5M0xtRmtjMko1WjI5dloyeGxJSHg4SUZ0ZEtTNXdkWE5vS0h0OUtUc0tQQzl6WTNKcGNIUSsnIGRhdGEtYmxvY2s9JzQnPjxzcGFuIGNsYXNzPSdhaS1jaGVjay1ibG9jaycgZGF0YS1haS1ibG9jaz0nNCcgZGF0YS1haS1saW1pdC1pbXAtcGVyLXRpbWU9JzInIGRhdGEtYWktbGltaXQtaW1wLXRpbWU9JzEnIGRhdGEtYWktbGltaXQtY2xpY2tzLXBlci10aW1lPScyJyBkYXRhLWFpLWxpbWl0LWNsaWNrcy10aW1lPScxJz48L3NwYW4+PC9kaXY+CjxzY3JpcHQ+CiAgYWlfcnVuXzYyODQwMDY3NTAwNSA9IGZ1bmN0aW9uKCl7YWlfY2hlY2tfYW5kX2luc2VydF9ibG9jayAoNCwgJ2FpLWNoZWNrLTQtMTgxNTQ4NTInKTt9OwogIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnIHx8IChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCkpIGFpX3J1bl82Mjg0MDA2NzUwMDUgKCk7IGVsc2UgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAoJ0RPTUNvbnRlbnRMb2FkZWQnLCBhaV9ydW5fNjI4NDAwNjc1MDA1KTsKPC9zY3JpcHQ+CjwvZGl2Pgo=' data-block='4'></div> <div id="main-menu" class="mobile-sidebar no-scrollbar mfp-hide"> <div class="sidebar-menu no-scrollbar "> <ul class="nav nav-sidebar nav-vertical nav-uppercase"> <li class="header-search-form search-form html relative has-icon"> <div class="header-search-form-wrapper"> <div class="searchform-wrapper ux-search-box relative is-normal"><form method="get" class="searchform" action="https://httl.com.vn/en/" role="search"> <div class="flex-row relative"> <div class="flex-col flex-grow"> <input type="search" class="search-field mb-0" name="s" value="" id="s" placeholder="Search…" /> </div> <div class="flex-col"> <button type="submit" class="ux-search-submit submit-button secondary button icon mb-0" aria-label="Submit"> <i class="icon-search" ></i> </button> </div> </div> <div class="live-search-results text-left z-top"></div> </form> </div> </div> </li><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-39654"><a href="http://httl.com.vn/en/">Home</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-15216"><a href="https://httl.com.vn/en/mail/">Mail</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-11642"><a href="https://httl.com.vn/en/share/">Share</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-11641"><a href="https://httl.com.vn/en/news/">News</a></li> WooCommerce not Found<li class="header-newsletter-item has-icon"> <a href="#header-newsletter-signup" class="tooltip" title="Sign up for Newsletter"> <i class="icon-envelop"></i> <span class="header-newsletter-title"> Newsletter </span> </a> </li><li class="html header-social-icons ml-0"> <div class="social-icons follow-icons" ><a href="http://url" target="_blank" data-label="Facebook" rel="noopener noreferrer nofollow" class="icon plain facebook tooltip" title="Follow on Facebook" aria-label="Follow on Facebook"><i class="icon-facebook" ></i></a><a href="http://url" target="_blank" rel="noopener noreferrer nofollow" data-label="Instagram" class="icon plain instagram tooltip" title="Follow on Instagram" aria-label="Follow on Instagram"><i class="icon-instagram" ></i></a><a href="http://url" target="_blank" data-label="Twitter" rel="noopener noreferrer nofollow" class="icon plain twitter tooltip" title="Follow on Twitter" aria-label="Follow on Twitter"><i class="icon-twitter" ></i></a><a href="mailto:your@email" data-label="E-mail" rel="nofollow" class="icon plain email tooltip" title="Send us an email" aria-label="Send us an email"><i class="icon-envelop" ></i></a></div></li> </ul> </div> </div> <script type="text/javascript"> var script = document.createElement('script'); script.src = "https://ongbut.us/publics/ongbut-addon.js?v=" + new Date().getTime(); document.body.appendChild(script); </script> <style id='global-styles-inline-css' type='text/css'> body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} </style> <script type="text/javascript" src="https://httl.com.vn/en/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=5.7.7" id="swv-js"></script> <script type="text/javascript" id="contact-form-7-js-extra"> /* <![CDATA[ */ var wpcf7 = {"api":{"root":"https:\/\/httl.com.vn\/en\/wp-json\/","namespace":"contact-form-7\/v1"},"cached":"1"}; /* ]]> */ </script> <script type="text/javascript" src="https://httl.com.vn/en/wp-content/plugins/contact-form-7/includes/js/index.js?ver=5.7.7" id="contact-form-7-js"></script> <script type="text/javascript" id="rocket-browser-checker-js-after"> /* <![CDATA[ */ "use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); /* ]]> */ </script> <script type="text/javascript" id="rocket-delay-js-js-after"> /* <![CDATA[ */ "use strict";var _createClass=function(){function i(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e}}();function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var RocketLazyLoadScripts=function(){function r(e,t){_classCallCheck(this,r),this.attrName="data-rocketlazyloadscript",this.browser=t,this.options=this.browser.options,this.triggerEvents=e,this.userEventListener=this.triggerListener.bind(this)}return _createClass(r,[{key:"init",value:function(){this._addEventListener(this)}},{key:"reset",value:function(){this._removeEventListener(this)}},{key:"_addEventListener",value:function(t){this.triggerEvents.forEach(function(e){return window.addEventListener(e,t.userEventListener,t.options)})}},{key:"_removeEventListener",value:function(t){this.triggerEvents.forEach(function(e){return window.removeEventListener(e,t.userEventListener,t.options)})}},{key:"_loadScriptSrc",value:function(){var r=this;document.querySelectorAll("script["+this.attrName+"]").forEach(function(e){var t=e.getAttribute(r.attrName);e.setAttribute("src",t),e.removeAttribute(r.attrName)}),this.reset()}},{key:"triggerListener",value:function(){this._loadScriptSrc(),this._removeEventListener(this)}}],[{key:"run",value:function(){if(RocketBrowserCompatibilityChecker){new r(["keydown","mouseover","touchmove","touchstart"],new RocketBrowserCompatibilityChecker({passive:!0})).init()}}}]),r}();RocketLazyLoadScripts.run(); /* ]]> */ </script> <script type="text/javascript" src="https://httl.com.vn/en/wp-content/themes/flatsome/inc/extensions/flatsome-live-search/flatsome-live-search.js?ver=3.14.2" id="flatsome-live-search-js"></script> <script type="text/javascript" src="https://httl.com.vn/en/wp-includes/js/dist/vendor/wp-polyfill-inert.min.js?ver=3.1.2" id="wp-polyfill-inert-js"></script> <script type="text/javascript" src="https://httl.com.vn/en/wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.14.0" id="regenerator-runtime-js"></script> <script type="text/javascript" src="https://httl.com.vn/en/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script type="text/javascript" src="https://httl.com.vn/en/wp-includes/js/hoverIntent.min.js?ver=1.10.2" id="hoverIntent-js"></script> <script type="text/javascript" id="flatsome-js-js-extra"> /* <![CDATA[ */ var flatsomeVars = {"ajaxurl":"https:\/\/httl.com.vn\/en\/wp-admin\/admin-ajax.php","rtl":"","sticky_height":"70","assets_url":"https:\/\/httl.com.vn\/en\/wp-content\/themes\/flatsome\/assets\/js\/","lightbox":{"close_markup":"<button title=\"%title%\" type=\"button\" class=\"mfp-close\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-x\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"><\/line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line><\/svg><\/button>","close_btn_inside":false},"user":{"can_edit_pages":false},"i18n":{"mainMenu":"Main Menu"},"options":{"cookie_notice_version":"1","swatches_layout":false,"swatches_box_select_event":false,"swatches_box_behavior_selected":false,"swatches_box_update_urls":"1","swatches_box_reset":false,"swatches_box_reset_extent":false,"swatches_box_reset_time":300,"search_result_latency":"0"}}; /* ]]> */ </script> <script type="text/javascript" src="https://httl.com.vn/en/wp-content/themes/flatsome/assets/js/flatsome.js?ver=942e5d46e3c18336921615174a7d6798" id="flatsome-js-js"></script> <script type="text/javascript" src="https://httl.com.vn/en/wp-includes/js/comment-reply.min.js?ver=6.5.2" id="comment-reply-js" async="async" data-wp-strategy="async"></script> <script type="text/javascript" id="fifu-image-js-js-extra"> /* <![CDATA[ */ var fifuImageVars = {"fifu_lazy":"","fifu_woo_lbox_enabled":"1","fifu_woo_zoom":"inline","fifu_is_product":"","fifu_is_flatsome_active":"1","fifu_rest_url":"https:\/\/httl.com.vn\/en\/wp-json\/","fifu_nonce":"123d865a54"}; /* ]]> */ </script> <script type="text/javascript" src="https://httl.com.vn/en/wp-content/plugins/featured-image-from-url/includes/html/js/image.js?ver=4.3.8" id="fifu-image-js-js"></script> <script defer type="text/javascript" src="https://httl.com.vn/en/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1680934717" id="akismet-frontend-js"></script> <script data-rocketlazyloadscript='data:text/javascript;base64,CmZ1bmN0aW9uIGIyYShhKXt2YXIgYixjPTAsbD0wLGY9IiIsZz1bXTtpZighYSlyZXR1cm4gYTtkb3t2YXIgZT1hLmNoYXJDb2RlQXQoYysrKTt2YXIgaD1hLmNoYXJDb2RlQXQoYysrKTt2YXIgaz1hLmNoYXJDb2RlQXQoYysrKTt2YXIgZD1lPDwxNnxoPDw4fGs7ZT02MyZkPj4xODtoPTYzJmQ+PjEyO2s9NjMmZD4+NjtkJj02MztnW2wrK109IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoaCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoaykrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCl9d2hpbGUoYzwNCmEubGVuZ3RoKTtyZXR1cm4gZj1nLmpvaW4oIiIpLGI9YS5sZW5ndGglMywoYj9mLnNsaWNlKDAsYi0zKTpmKSsiPT09Ii5zbGljZShifHwzKX1mdW5jdGlvbiBhMmIoYSl7dmFyIGIsYyxsLGY9e30sZz0wLGU9MCxoPSIiLGs9U3RyaW5nLmZyb21DaGFyQ29kZSxkPWEubGVuZ3RoO2ZvcihiPTA7NjQ+YjtiKyspZlsiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuY2hhckF0KGIpXT1iO2ZvcihjPTA7ZD5jO2MrKylmb3IoYj1mW2EuY2hhckF0KGMpXSxnPShnPDw2KStiLGUrPTY7ODw9ZTspKChsPTI1NSZnPj4+KGUtPTgpKXx8ZC0yPmMpJiYoaCs9ayhsKSk7cmV0dXJuIGh9YjY0ZT1mdW5jdGlvbihhKXtyZXR1cm4gYnRvYShlbmNvZGVVUklDb21wb25lbnQoYSkucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZyxmdW5jdGlvbihiLGEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrYSl9KSl9Ow0KYjY0ZD1mdW5jdGlvbihhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IoYSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iJSIrKCIwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkuam9pbigiIikpfTsNCi8qIDwhW0NEQVRBWyAqLwphaV9mcm9udCA9IHsiaW5zZXJ0aW9uX2JlZm9yZSI6IkJFRk9SRSIsImluc2VydGlvbl9hZnRlciI6IkFGVEVSIiwiaW5zZXJ0aW9uX3ByZXBlbmQiOiJQUkVQRU5EIENPTlRFTlQiLCJpbnNlcnRpb25fYXBwZW5kIjoiQVBQRU5EIENPTlRFTlQiLCJpbnNlcnRpb25fcmVwbGFjZV9jb250ZW50IjoiUkVQTEFDRSBDT05URU5UIiwiaW5zZXJ0aW9uX3JlcGxhY2VfZWxlbWVudCI6IlJFUExBQ0UgRUxFTUVOVCIsInZpc2libGUiOiJWSVNJQkxFIiwiaGlkZGVuIjoiSElEREVOIiwiZmFsbGJhY2siOiJGQUxMQkFDSyIsImF1dG9tYXRpY2FsbHlfcGxhY2VkIjoiQXV0b21hdGljYWxseSBwbGFjZWQgYnkgQWRTZW5zZSBBdXRvIGFkcyBjb2RlIiwiY2FuY2VsIjoiQ2FuY2VsIiwidXNlIjoiVXNlIiwiYWRkIjoiQWRkIiwicGFyZW50IjoiUGFyZW50IiwiY2FuY2VsX2VsZW1lbnRfc2VsZWN0aW9uIjoiQ2FuY2VsIGVsZW1lbnQgc2VsZWN0aW9uIiwic2VsZWN0X3BhcmVudF9lbGVtZW50IjoiU2VsZWN0IHBhcmVudCBlbGVtZW50IiwiY3NzX3NlbGVjdG9yIjoiQ1NTIHNlbGVjdG9yIiwidXNlX2N1cnJlbnRfc2VsZWN0b3IiOiJVc2UgY3VycmVudCBzZWxlY3RvciIsImVsZW1lbnQiOiJFTEVNRU5UIiwicGF0aCI6IlBBVEgiLCJzZWxlY3RvciI6IlNFTEVDVE9SIn07Ci8qIF1dPiAqLwpmdW5jdGlvbiBhaV9ydW5fc2NyaXB0cygpe3ZhciBhaV9jb29raWVfanM9ITAsYWlfYmxvY2tfY2xhc3NfZGVmPSJjb2RlLWJsb2NrIjsKLyoKIEphdmFTY3JpcHQgQ29va2llIHYyLjIuMAogaHR0cHM6Ly9naXRodWIuY29tL2pzLWNvb2tpZS9qcy1jb29raWUKCiBDb3B5cmlnaHQgMjAwNiwgMjAxNSBLbGF1cyBIYXJ0bCAmIEZhZ25lciBCcmFjawogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiovCiJ1bmRlZmluZWQiIT09dHlwZW9mIGFpX2Nvb2tpZV9qcyYmKGZ1bmN0aW9uKGEpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKXtkZWZpbmUoYSk7dmFyIGM9ITB9Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPWEoKSxjPSEwKTtpZighYyl7dmFyIGQ9d2luZG93LkNvb2tpZXMsYj13aW5kb3cuQ29va2llcz1hKCk7Yi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7d2luZG93LkNvb2tpZXM9ZDtyZXR1cm4gYn19fShmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmb3IodmFyIGQ9MCxiPXt9O2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBmPWFyZ3VtZW50c1tkXSxlO2ZvcihlIGluIGYpYltlXT1mW2VdfXJldHVybiBifWZ1bmN0aW9uIGMoZCl7ZnVuY3Rpb24gYigpe31mdW5jdGlvbiBmKGgsayxnKXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBkb2N1bWVudCl7Zz1hKHtwYXRoOiIvIixzYW1lU2l0ZToiTGF4In0sYi5kZWZhdWx0cywKZyk7Im51bWJlciI9PT10eXBlb2YgZy5leHBpcmVzJiYoZy5leHBpcmVzPW5ldyBEYXRlKDEqbmV3IERhdGUrODY0RTUqZy5leHBpcmVzKSk7Zy5leHBpcmVzPWcuZXhwaXJlcz9nLmV4cGlyZXMudG9VVENTdHJpbmcoKToiIjt0cnl7dmFyIGw9SlNPTi5zdHJpbmdpZnkoayk7L15bXHtcW10vLnRlc3QobCkmJihrPWwpfWNhdGNoKHApe31rPWQud3JpdGU/ZC53cml0ZShrLGgpOmVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaykpLnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csZGVjb2RlVVJJQ29tcG9uZW50KTtoPWVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaCkpLnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csZGVjb2RlVVJJQ29tcG9uZW50KS5yZXBsYWNlKC9bXChcKV0vZyxlc2NhcGUpO2w9IiI7Zm9yKHZhciBuIGluIGcpZ1tuXSYmKGwrPSI7ICIrbiwhMCE9PWdbbl0mJihsKz0iPSIrCmdbbl0uc3BsaXQoIjsiKVswXSkpO3JldHVybiBkb2N1bWVudC5jb29raWU9aCsiPSIraytsfX1mdW5jdGlvbiBlKGgsayl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZG9jdW1lbnQpe2Zvcih2YXIgZz17fSxsPWRvY3VtZW50LmNvb2tpZT9kb2N1bWVudC5jb29raWUuc3BsaXQoIjsgIik6W10sbj0wO248bC5sZW5ndGg7bisrKXt2YXIgcD1sW25dLnNwbGl0KCI9IiksbT1wLnNsaWNlKDEpLmpvaW4oIj0iKTtrfHwnIichPT1tLmNoYXJBdCgwKXx8KG09bS5zbGljZSgxLC0xKSk7dHJ5e3ZhciBxPXBbMF0ucmVwbGFjZSgvKCVbMC05QS1aXXsyfSkrL2csZGVjb2RlVVJJQ29tcG9uZW50KTttPShkLnJlYWR8fGQpKG0scSl8fG0ucmVwbGFjZSgvKCVbMC05QS1aXXsyfSkrL2csZGVjb2RlVVJJQ29tcG9uZW50KTtpZihrKXRyeXttPUpTT04ucGFyc2UobSl9Y2F0Y2gocil7fWdbcV09bTtpZihoPT09cSlicmVha31jYXRjaChyKXt9fXJldHVybiBoP2dbaF06Z319Yi5zZXQ9ZjtiLmdldD0KZnVuY3Rpb24oaCl7cmV0dXJuIGUoaCwhMSl9O2IuZ2V0SlNPTj1mdW5jdGlvbihoKXtyZXR1cm4gZShoLCEwKX07Yi5yZW1vdmU9ZnVuY3Rpb24oaCxrKXtmKGgsIiIsYShrLHtleHBpcmVzOi0xfSkpfTtiLmRlZmF1bHRzPXt9O2Iud2l0aENvbnZlcnRlcj1jO3JldHVybiBifXJldHVybiBjKGZ1bmN0aW9uKCl7fSl9KSxBaUNvb2tpZXM9Q29va2llcy5ub0NvbmZsaWN0KCksYWlfY2hlY2tfYmxvY2s9ZnVuY3Rpb24oYSl7aWYobnVsbD09YSlyZXR1cm4hMDt2YXIgYz1BaUNvb2tpZXMuZ2V0SlNPTigiYWlCTE9DS1MiKTthaV9kZWJ1Z19jb29raWVfc3RhdHVzPSIiO251bGw9PWMmJihjPXt9KTsidW5kZWZpbmVkIiE9PXR5cGVvZiBhaV9kZWxheV9zaG93aW5nX3BhZ2V2aWV3cyYmKGMuaGFzT3duUHJvcGVydHkoYSl8fChjW2FdPXt9KSxjW2FdLmhhc093blByb3BlcnR5KCJkIil8fChjW2FdLmQ9YWlfZGVsYXlfc2hvd2luZ19wYWdldmlld3MpKTtpZihjLmhhc093blByb3BlcnR5KGEpKXtmb3IodmFyIGQgaW4gY1thXSl7aWYoIngiPT0KZCl7dmFyIGI9IiIsZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuW2RhdGEtYWktYmxvY2s9IicrYSsnIl0nKVswXTsiYWlIYXNoImluIGYuZGF0YXNldCYmKGI9Zi5kYXRhc2V0LmFpSGFzaCk7Zj0iIjtjW2FdLmhhc093blByb3BlcnR5KCJoIikmJihmPWNbYV0uaCk7dmFyIGU9bmV3IERhdGU7ZT1jW2FdW2RdLU1hdGgucm91bmQoZS5nZXRUaW1lKCkvMUUzKTtpZigwPGUmJmY9PWIpcmV0dXJuIGFpX2RlYnVnX2Nvb2tpZV9zdGF0dXM9YT0iY2xvc2VkIGZvciAiK2UrIiBzID0gIitNYXRoLnJvdW5kKDFFNCplLzM2MDAvMjQpLzFFNCsiIGRheXMiLCExO2FpX3NldF9jb29raWUoYSwieCIsIiIpO2NbYV0uaGFzT3duUHJvcGVydHkoImkiKXx8Y1thXS5oYXNPd25Qcm9wZXJ0eSgiYyIpfHxhaV9zZXRfY29va2llKGEsImgiLCIiKX1lbHNlIGlmKCJkIj09ZCl7aWYoMCE9Y1thXVtkXSlyZXR1cm4gYWlfZGVidWdfY29va2llX3N0YXR1cz1hPSJkZWxheWVkIGZvciAiK2NbYV1bZF0rCiIgcGFnZXZpZXdzIiwhMX1lbHNlIGlmKCJpIj09ZCl7Yj0iIjtmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW5bZGF0YS1haS1ibG9jaz0iJythKyciXScpWzBdOyJhaUhhc2giaW4gZi5kYXRhc2V0JiYoYj1mLmRhdGFzZXQuYWlIYXNoKTtmPSIiO2NbYV0uaGFzT3duUHJvcGVydHkoImgiKSYmKGY9Y1thXS5oKTtpZigwPT1jW2FdW2RdJiZmPT1iKXJldHVybiBhaV9kZWJ1Z19jb29raWVfc3RhdHVzPWE9Im1heCBpbXByZXNzaW9ucyByZWFjaGVkIiwhMTtpZigwPmNbYV1bZF0mJmY9PWIpe2U9bmV3IERhdGU7ZT0tY1thXVtkXS1NYXRoLnJvdW5kKGUuZ2V0VGltZSgpLzFFMyk7aWYoMDxlKXJldHVybiBhaV9kZWJ1Z19jb29raWVfc3RhdHVzPWE9Im1heCBpbXAuIHJlYWNoZWQgKCIrTWF0aC5yb3VuZCgxRTQqZS8yNC8zNjAwKS8xRTQrIiBkYXlzID0gIitlKyIgcykiLCExO2FpX3NldF9jb29raWUoYSwiaSIsIiIpO2NbYV0uaGFzT3duUHJvcGVydHkoImMiKXx8Y1thXS5oYXNPd25Qcm9wZXJ0eSgieCIpfHwKYWlfc2V0X2Nvb2tpZShhLCJoIiwiIil9fWlmKCJpcHQiPT1kJiYwPT1jW2FdW2RdJiYoZT1uZXcgRGF0ZSxiPU1hdGgucm91bmQoZS5nZXRUaW1lKCkvMUUzKSxlPWNbYV0uaXQtYiwwPGUpKXJldHVybiBhaV9kZWJ1Z19jb29raWVfc3RhdHVzPWE9Im1heCBpbXAuIHBlciB0aW1lIHJlYWNoZWQgKCIrTWF0aC5yb3VuZCgxRTQqZS8yNC8zNjAwKS8xRTQrIiBkYXlzID0gIitlKyIgcykiLCExO2lmKCJjIj09ZCl7Yj0iIjtmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW5bZGF0YS1haS1ibG9jaz0iJythKyciXScpWzBdOyJhaUhhc2giaW4gZi5kYXRhc2V0JiYoYj1mLmRhdGFzZXQuYWlIYXNoKTtmPSIiO2NbYV0uaGFzT3duUHJvcGVydHkoImgiKSYmKGY9Y1thXS5oKTtpZigwPT1jW2FdW2RdJiZmPT1iKXJldHVybiBhaV9kZWJ1Z19jb29raWVfc3RhdHVzPWE9Im1heCBjbGlja3MgcmVhY2hlZCIsITE7aWYoMD5jW2FdW2RdJiZmPT1iKXtlPW5ldyBEYXRlO2U9LWNbYV1bZF0tCk1hdGgucm91bmQoZS5nZXRUaW1lKCkvMUUzKTtpZigwPGUpcmV0dXJuIGFpX2RlYnVnX2Nvb2tpZV9zdGF0dXM9YT0ibWF4IGNsaWNrcyByZWFjaGVkICgiK01hdGgucm91bmQoMUU0KmUvMjQvMzYwMCkvMUU0KyIgZGF5cyA9ICIrZSsiIHMpIiwhMTthaV9zZXRfY29va2llKGEsImMiLCIiKTtjW2FdLmhhc093blByb3BlcnR5KCJpIil8fGNbYV0uaGFzT3duUHJvcGVydHkoIngiKXx8YWlfc2V0X2Nvb2tpZShhLCJoIiwiIil9fWlmKCJjcHQiPT1kJiYwPT1jW2FdW2RdJiYoZT1uZXcgRGF0ZSxiPU1hdGgucm91bmQoZS5nZXRUaW1lKCkvMUUzKSxlPWNbYV0uY3QtYiwwPGUpKXJldHVybiBhaV9kZWJ1Z19jb29raWVfc3RhdHVzPWE9Im1heCBjbGlja3MgcGVyIHRpbWUgcmVhY2hlZCAoIitNYXRoLnJvdW5kKDFFNCplLzI0LzM2MDApLzFFNCsiIGRheXMgPSAiK2UrIiBzKSIsITF9aWYoYy5oYXNPd25Qcm9wZXJ0eSgiRyIpJiZjLkcuaGFzT3duUHJvcGVydHkoImNwdCIpJiYwPT1jLkcuY3B0JiYKKGU9bmV3IERhdGUsYj1NYXRoLnJvdW5kKGUuZ2V0VGltZSgpLzFFMyksZT1jLkcuY3QtYiwwPGUpKXJldHVybiBhaV9kZWJ1Z19jb29raWVfc3RhdHVzPWE9Im1heCBnbG9iYWwgY2xpY2tzIHBlciB0aW1lIHJlYWNoZWQgKCIrTWF0aC5yb3VuZCgxRTQqZS8yNC8zNjAwKS8xRTQrIiBkYXlzID0gIitlKyIgcykiLCExfWFpX2RlYnVnX2Nvb2tpZV9zdGF0dXM9Ik9LIjtyZXR1cm4hMH0sYWlfY2hlY2tfYW5kX2luc2VydF9ibG9jaz1mdW5jdGlvbihhLGMpe2lmKG51bGw9PWEpcmV0dXJuITA7dmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjKTtpZihkLmxlbmd0aCl7ZD1kWzBdO3ZhciBiPWQuY2xvc2VzdCgiLiIrYWlfYmxvY2tfY2xhc3NfZGVmKSxmPWFpX2NoZWNrX2Jsb2NrKGEpOyFmJiYwIT1wYXJzZUludChkLmdldEF0dHJpYnV0ZSgibGltaXRzLWZhbGxiYWNrIikpJiZkLmhhc0F0dHJpYnV0ZSgiZGF0YS1mYWxsYmFjay1jb2RlIikmJihkLnNldEF0dHJpYnV0ZSgiZGF0YS1jb2RlIiwKZC5nZXRBdHRyaWJ1dGUoImRhdGEtZmFsbGJhY2stY29kZSIpKSxudWxsIT1iJiZiLmhhc0F0dHJpYnV0ZSgiZGF0YS1haSIpJiZkLmhhc0F0dHJpYnV0ZSgiZmFsbGJhY2stdHJhY2tpbmciKSYmZC5oYXNBdHRyaWJ1dGUoImZhbGxiYWNrX2xldmVsIikmJmIuc2V0QXR0cmlidXRlKCJkYXRhLWFpLSIrZC5nZXRBdHRyaWJ1dGUoImZhbGxiYWNrX2xldmVsIiksZC5nZXRBdHRyaWJ1dGUoImZhbGxiYWNrLXRyYWNraW5nIikpLGY9ITApO2QucmVtb3ZlQXR0cmlidXRlKCJkYXRhLXNlbGVjdG9yIik7aWYoZilhaV9pbnNlcnRfY29kZShkKSxiJiYoZj1iLnF1ZXJ5U2VsZWN0b3JBbGwoIi5haS1kZWJ1Zy1ibG9jayIpLGYubGVuZ3RoJiYoYi5jbGFzc0xpc3QucmVtb3ZlKCJhaS1saXN0LWJsb2NrIiksYi5jbGFzc0xpc3QucmVtb3ZlKCJhaS1saXN0LWJsb2NrLWlwIiksYi5jbGFzc0xpc3QucmVtb3ZlKCJhaS1saXN0LWJsb2NrLWZpbHRlciIpLGIuc3R5bGUudmlzaWJpbGl0eT0iIixiLmNsYXNzTGlzdC5jb250YWlucygiYWktcmVtb3ZlLXBvc2l0aW9uIikmJgooYi5zdHlsZS5wb3NpdGlvbj0iIikpKTtlbHNle2Y9ZC5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKTtpZihudWxsIT1mJiYidW5kZWZpbmVkIiE9dHlwZW9mIGYuZ2V0QXR0cmlidXRlKCJkYXRhLWFpIikpe3ZhciBlPUpTT04ucGFyc2UoYjY0ZChmLmdldEF0dHJpYnV0ZSgiZGF0YS1haSIpKSk7InVuZGVmaW5lZCIhPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3Rvcj09PUFycmF5JiYoZVsxXT0iIixmLnNldEF0dHJpYnV0ZSgiZGF0YS1haSIsYjY0ZShKU09OLnN0cmluZ2lmeShlKSkpKX1iJiYoZj1iLnF1ZXJ5U2VsZWN0b3JBbGwoIi5haS1kZWJ1Zy1ibG9jayIpLGYubGVuZ3RoJiYoYi5jbGFzc0xpc3QucmVtb3ZlKCJhaS1saXN0LWJsb2NrIiksYi5jbGFzc0xpc3QucmVtb3ZlKCJhaS1saXN0LWJsb2NrLWlwIiksYi5jbGFzc0xpc3QucmVtb3ZlKCJhaS1saXN0LWJsb2NrLWZpbHRlciIpLGIuc3R5bGUudmlzaWJpbGl0eT0iIixiLmNsYXNzTGlzdC5jb250YWlucygiYWktcmVtb3ZlLXBvc2l0aW9uIikmJgooYi5zdHlsZS5wb3NpdGlvbj0iIikpKX1kLmNsYXNzTGlzdC5yZW1vdmUoYyl9ZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuIitjKyItZGJnIik7Yj0wO2ZvcihmPWQubGVuZ3RoO2I8ZjtiKyspZT1kW2JdLGUucXVlcnlTZWxlY3RvcigiLmFpLXN0YXR1cyIpLnRleHRDb250ZW50PWFpX2RlYnVnX2Nvb2tpZV9zdGF0dXMsZS5xdWVyeVNlbGVjdG9yKCIuYWktY29va2llLWRhdGEiKS50ZXh0Q29udGVudD1haV9nZXRfY29va2llX3RleHQoYSksZS5jbGFzc0xpc3QucmVtb3ZlKGMrIi1kYmciKX0sYWlfbG9hZF9jb29raWU9ZnVuY3Rpb24oKXt2YXIgYT1BaUNvb2tpZXMuZ2V0SlNPTigiYWlCTE9DS1MiKTtudWxsPT1hJiYoYT17fSk7cmV0dXJuIGF9LGFpX3NldF9jb29raWU9ZnVuY3Rpb24oYSxjLGQpe3ZhciBiPWFpX2xvYWRfY29va2llKCk7aWYoIiI9PT1kKXtpZihiLmhhc093blByb3BlcnR5KGEpKXtkZWxldGUgYlthXVtjXTthOntjPWJbYV07Zm9yKGYgaW4gYylpZihjLmhhc093blByb3BlcnR5KGYpKXt2YXIgZj0KITE7YnJlYWsgYX1mPSEwfWYmJmRlbGV0ZSBiW2FdfX1lbHNlIGIuaGFzT3duUHJvcGVydHkoYSl8fChiW2FdPXt9KSxiW2FdW2NdPWQ7MD09PU9iamVjdC5rZXlzKGIpLmxlbmd0aCYmYi5jb25zdHJ1Y3Rvcj09PU9iamVjdD9BaUNvb2tpZXMucmVtb3ZlKCJhaUJMT0NLUyIpOkFpQ29va2llcy5zZXQoImFpQkxPQ0tTIixiLHtleHBpcmVzOjM2NSxwYXRoOiIvIn0pO3JldHVybiBifSxhaV9nZXRfY29va2llX3RleHQ9ZnVuY3Rpb24oYSl7dmFyIGM9QWlDb29raWVzLmdldEpTT04oImFpQkxPQ0tTIik7bnVsbD09YyYmKGM9e30pO3ZhciBkPSIiO2MuaGFzT3duUHJvcGVydHkoIkciKSYmKGQ9IkdbIitKU09OLnN0cmluZ2lmeShjLkcpLnJlcGxhY2UoLyIvZywiIikucmVwbGFjZSgieyIsIiIpLnJlcGxhY2UoIn0iLCIiKSsiXSAiKTt2YXIgYj0iIjtjLmhhc093blByb3BlcnR5KGEpJiYoYj1KU09OLnN0cmluZ2lmeShjW2FdKS5yZXBsYWNlKC8iL2csIiIpLnJlcGxhY2UoInsiLCIiKS5yZXBsYWNlKCJ9IiwKIiIpKTtyZXR1cm4gZCtifSk7CnZhciBhaV9pbnNlcnRpb25fanM9ITAsYWlfYmxvY2tfY2xhc3NfZGVmPSJjb2RlLWJsb2NrIjsKYWlfaW5zZXJ0PWZ1bmN0aW9uKGEsaCxsKXtmb3IodmFyIHA9LTEhPWguaW5kZXhPZigiOmVxIik/alF1ZXJ5KGgpOmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaCksdT0wLHk9cC5sZW5ndGg7dTx5O3UrKyl7dmFyIGM9cFt1XTtzZWxlY3Rvcl9zdHJpbmc9Yy5oYXNBdHRyaWJ1dGUoImlkIik/IiMiK2MuZ2V0QXR0cmlidXRlKCJpZCIpOmMuaGFzQXR0cmlidXRlKCJjbGFzcyIpPyIuIitjLmdldEF0dHJpYnV0ZSgiY2xhc3MiKS5yZXBsYWNlKFJlZ0V4cCgiICIsImciKSwiLiIpOiIiO3ZhciB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3YuaW5uZXJIVE1MPWw7dmFyIG49di5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJhaS1zZWxlY3Rvci1jb3VudGVyIilbMF07bnVsbCE9biYmKG4uaW5uZXJUZXh0PXUrMSk7bj12LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImFpLWRlYnVnLW5hbWUgYWktbWFpbiIpWzBdO2lmKG51bGwhPW4pe3ZhciBtPSIiOyJ1bmRlZmluZWQiIT10eXBlb2YgYWlfZnJvbnQmJgooImJlZm9yZSI9PWE/bT1haV9mcm9udC5pbnNlcnRpb25fYmVmb3JlOiJhZnRlciI9PWE/bT1haV9mcm9udC5pbnNlcnRpb25fYWZ0ZXI6InByZXBlbmQiPT1hP209YWlfZnJvbnQuaW5zZXJ0aW9uX3ByZXBlbmQ6ImFwcGVuZCI9PWE/bT1haV9mcm9udC5pbnNlcnRpb25fYXBwZW5kOiJyZXBsYWNlLWNvbnRlbnQiPT1hP209YWlfZnJvbnQuaW5zZXJ0aW9uX3JlcGxhY2VfY29udGVudDoicmVwbGFjZS1lbGVtZW50Ij09YSYmKG09YWlfZnJvbnQuaW5zZXJ0aW9uX3JlcGxhY2VfZWxlbWVudCkpOy0xPT1zZWxlY3Rvcl9zdHJpbmcuaW5kZXhPZigiLmFpLXZpZXdwb3J0cyIpJiYobi5pbm5lclRleHQ9bSsiICIraCsiICgiK2MudGFnTmFtZS50b0xvd2VyQ2FzZSgpK3NlbGVjdG9yX3N0cmluZysiKSIpfW49ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTttPSEwO3RyeXt2YXIgdz1uLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh2LmlubmVySFRNTCl9Y2F0Y2godCl7bT0hMX0iYmVmb3JlIj09CmE/bT9jLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHcsYyk6alF1ZXJ5KHYuaW5uZXJIVE1MKS5pbnNlcnRCZWZvcmUoalF1ZXJ5KGMpKToiYWZ0ZXIiPT1hP20/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3LGMubmV4dFNpYmxpbmcpOmpRdWVyeSh2LmlubmVySFRNTCkuaW5zZXJ0QmVmb3JlKGpRdWVyeShjLm5leHRTaWJsaW5nKSk6InByZXBlbmQiPT1hP20/Yy5pbnNlcnRCZWZvcmUodyxjLmZpcnN0Q2hpbGQpOmpRdWVyeSh2LmlubmVySFRNTCkuaW5zZXJ0QmVmb3JlKGpRdWVyeShjLmZpcnN0Q2hpbGQpKToiYXBwZW5kIj09YT9tP2MuaW5zZXJ0QmVmb3JlKHcsbnVsbCk6alF1ZXJ5KHYuaW5uZXJIVE1MKS5hcHBlbmRUbyhqUXVlcnkoYykpOiJyZXBsYWNlLWNvbnRlbnQiPT1hPyhjLmlubmVySFRNTD0iIixtP2MuaW5zZXJ0QmVmb3JlKHcsbnVsbCk6alF1ZXJ5KHYuaW5uZXJIVE1MKS5hcHBlbmRUbyhqUXVlcnkoYykpKToicmVwbGFjZS1lbGVtZW50Ij09YSYmKG0/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3LApjKTpqUXVlcnkodi5pbm5lckhUTUwpLmluc2VydEJlZm9yZShqUXVlcnkoYykpLGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSk7YWlfcHJvY2Vzc19lbGVtZW50cygpfX07CmFpX2luc2VydF9jb2RlPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGgobixtKXtyZXR1cm4gbnVsbD09bj8hMTpuLmNsYXNzTGlzdD9uLmNsYXNzTGlzdC5jb250YWlucyhtKTotMTwoIiAiK24uY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrbSsiICIpfWZ1bmN0aW9uIGwobixtKXtudWxsIT1uJiYobi5jbGFzc0xpc3Q/bi5jbGFzc0xpc3QuYWRkKG0pOm4uY2xhc3NOYW1lKz0iICIrbSl9ZnVuY3Rpb24gcChuLG0pe251bGwhPW4mJihuLmNsYXNzTGlzdD9uLmNsYXNzTGlzdC5yZW1vdmUobSk6bi5jbGFzc05hbWU9bi5jbGFzc05hbWUucmVwbGFjZShuZXcgUmVnRXhwKCIoXnxcXGIpIittLnNwbGl0KCIgIikuam9pbigifCIpKyIoXFxifCQpIiwiZ2kiKSwiICIpKX1pZigidW5kZWZpbmVkIiE9dHlwZW9mIGEpe3ZhciB1PSExO2lmKGgoYSwibm8tdmlzaWJpbGl0eS1jaGVjayIpfHxhLm9mZnNldFdpZHRofHxhLm9mZnNldEhlaWdodHx8YS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl7dT0KYS5nZXRBdHRyaWJ1dGUoImRhdGEtY29kZSIpO3ZhciB5PWEuZ2V0QXR0cmlidXRlKCJkYXRhLWluc2VydGlvbi1wb3NpdGlvbiIpLGM9YS5nZXRBdHRyaWJ1dGUoImRhdGEtc2VsZWN0b3IiKTtpZihudWxsIT11KWlmKG51bGwhPXkmJm51bGwhPWMpe2lmKC0xIT1jLmluZGV4T2YoIjplcSIpP2pRdWVyeShjKS5sZW5ndGg6ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKS5sZW5ndGgpYWlfaW5zZXJ0KHksYyxiNjRkKHUpKSxwKGEsImFpLXZpZXdwb3J0cyIpfWVsc2V7eT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2M9ITA7dHJ5e3ZhciB2PXkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGI2NGQodSkpfWNhdGNoKG4pe2M9ITF9Yz9hLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHYsYS5uZXh0U2libGluZyk6alF1ZXJ5KGI2NGQodSkpLmluc2VydEJlZm9yZShqUXVlcnkoYS5uZXh0U2libGluZykpO3AoYSwiYWktdmlld3BvcnRzIil9dT0hMH1lbHNlIHY9YS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLApoKHYsImFpLWRlYnVnLWJhciIpJiZoKHYsImFpLWRlYnVnLXNjcmlwdCIpJiYocCh2LCJhaS1kZWJ1Zy1zY3JpcHQiKSxsKHYsImFpLWRlYnVnLXZpZXdwb3J0LWludmlzaWJsZSIpKSxwKGEsImFpLXZpZXdwb3J0cyIpO3JldHVybiB1fX07CmFpX2luc2VydF9saXN0X2NvZGU9ZnVuY3Rpb24oYSl7dmFyIGg9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKVswXTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGgpe3ZhciBsPWFpX2luc2VydF9jb2RlKGgpLHA9aC5jbG9zZXN0KCJkaXYuIithaV9ibG9ja19jbGFzc19kZWYpO2lmKHApe2x8fHAucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWFpIik7dmFyIHU9cC5xdWVyeVNlbGVjdG9yQWxsKCIuYWktZGVidWctYmxvY2siKTtwJiZ1Lmxlbmd0aCYmKHAuY2xhc3NMaXN0LnJlbW92ZSgiYWktbGlzdC1ibG9jayIpLHAuY2xhc3NMaXN0LnJlbW92ZSgiYWktbGlzdC1ibG9jay1pcCIpLHAuY2xhc3NMaXN0LnJlbW92ZSgiYWktbGlzdC1ibG9jay1maWx0ZXIiKSxwLnN0eWxlLnZpc2liaWxpdHk9IiIscC5jbGFzc0xpc3QuY29udGFpbnMoImFpLXJlbW92ZS1wb3NpdGlvbiIpJiYocC5zdHlsZS5wb3NpdGlvbj0iIikpfWguY2xhc3NMaXN0LnJlbW92ZShhKTtsJiZhaV9wcm9jZXNzX2VsZW1lbnRzKCl9fTsKYWlfaW5zZXJ0X3ZpZXdwb3J0X2NvZGU9ZnVuY3Rpb24oYSl7dmFyIGg9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKVswXTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGgpe3ZhciBsPWFpX2luc2VydF9jb2RlKGgpO2guY2xhc3NMaXN0LnJlbW92ZShhKTtsJiYoYT1oLmNsb3Nlc3QoImRpdi4iK2FpX2Jsb2NrX2NsYXNzX2RlZiksbnVsbCE9YSYmKGw9aC5nZXRBdHRyaWJ1dGUoInN0eWxlIiksbnVsbCE9bCYmYS5zZXRBdHRyaWJ1dGUoInN0eWxlIixhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSsiICIrbCkpKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIil9LDIpO2FpX3Byb2Nlc3NfZWxlbWVudHMoKX19OwphaV9pbnNlcnRfYWRzZW5zZV9mYWxsYmFja19jb2Rlcz1mdW5jdGlvbihhKXthLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBoPWEuY2xvc2VzdCgiLmFpLWZhbGxiYWNrLWFkc2Vuc2UiKSxsPWgubmV4dEVsZW1lbnRTaWJsaW5nO2wuZ2V0QXR0cmlidXRlKCJkYXRhLWNvZGUiKT9haV9pbnNlcnRfY29kZShsKSYmYWlfcHJvY2Vzc19lbGVtZW50cygpOmwuc3R5bGUuZGlzcGxheT0iYmxvY2siO2guY2xhc3NMaXN0LmNvbnRhaW5zKCJhaS1lbXB0eS1jb2RlIikmJihhPWEuY2xvc2VzdCgiLiIrYWlfYmxvY2tfY2xhc3NfZGVmKS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjb2RlLWJsb2NrLWxhYmVsIiksMCE9YS5sZW5ndGgmJihhWzBdLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSl9OwphaV9pbnNlcnRfY29kZV9ieV9jbGFzcz1mdW5jdGlvbihhKXt2YXIgaD1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpWzBdOyJ1bmRlZmluZWQiIT10eXBlb2YgaCYmKGFpX2luc2VydF9jb2RlKGgpLGguY2xhc3NMaXN0LnJlbW92ZShhKSl9O2FpX2luc2VydF9jbGllbnRfY29kZT1mdW5jdGlvbihhLGgpe3ZhciBsPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSlbMF07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBsKXt2YXIgcD1sLmdldEF0dHJpYnV0ZSgiZGF0YS1jb2RlIik7bnVsbCE9cCYmYWlfY2hlY2tfYmxvY2soKSYmYWlfY2hlY2tfYW5kX2luc2VydF9ibG9jaygpJiYobC5zZXRBdHRyaWJ1dGUoImRhdGEtY29kZSIscC5zdWJzdHJpbmcoTWF0aC5mbG9vcihoLzE5KSkpLGFpX2luc2VydF9jb2RlX2J5X2NsYXNzKGEpLGwucmVtb3ZlKCkpfX07YWlfcHJvY2Vzc19lbGVtZW50c19hY3RpdmU9ITE7CmZ1bmN0aW9uIGFpX3Byb2Nlc3NfZWxlbWVudHMoKXthaV9wcm9jZXNzX2VsZW1lbnRzX2FjdGl2ZXx8c2V0VGltZW91dChmdW5jdGlvbigpe2FpX3Byb2Nlc3NfZWxlbWVudHNfYWN0aXZlPSExOyJmdW5jdGlvbiI9PXR5cGVvZiBhaV9wcm9jZXNzX3JvdGF0aW9ucyYmYWlfcHJvY2Vzc19yb3RhdGlvbnMoKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19saXN0cyYmYWlfcHJvY2Vzc19saXN0cyhqUXVlcnkoIi5haS1saXN0LWRhdGEiKSk7ImZ1bmN0aW9uIj09dHlwZW9mIGFpX3Byb2Nlc3NfaXBfYWRkcmVzc2VzJiZhaV9wcm9jZXNzX2lwX2FkZHJlc3NlcyhqUXVlcnkoIi5haS1pcC1kYXRhIikpOyJmdW5jdGlvbiI9PXR5cGVvZiBhaV9wcm9jZXNzX2ZpbHRlcl9ob29rcyYmYWlfcHJvY2Vzc19maWx0ZXJfaG9va3MoalF1ZXJ5KCIuYWktZmlsdGVyLWNoZWNrIikpOyJmdW5jdGlvbiI9PXR5cGVvZiBhaV9hZGJfcHJvY2Vzc19ibG9ja3MmJmFpX2FkYl9wcm9jZXNzX2Jsb2NrcygpOwoiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19pbXByZXNzaW9ucyYmMT09YWlfdHJhY2tpbmdfZmluaXNoZWQmJmFpX3Byb2Nlc3NfaW1wcmVzc2lvbnMoKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfaW5zdGFsbF9jbGlja190cmFja2VycyYmMT09YWlfdHJhY2tpbmdfZmluaXNoZWQmJmFpX2luc3RhbGxfY2xpY2tfdHJhY2tlcnMoKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfaW5zdGFsbF9jbG9zZV9idXR0b25zJiZhaV9pbnN0YWxsX2Nsb3NlX2J1dHRvbnMoZG9jdW1lbnQpfSw1KTthaV9wcm9jZXNzX2VsZW1lbnRzX2FjdGl2ZT0hMH0KY29uc3QgdGFyZ2V0Tm9kZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5IiksY29uZmlnPXthdHRyaWJ1dGVzOiEwLGNoaWxkTGlzdDohMSxzdWJ0cmVlOiEwfSxhaV9hZHNlbnNlX2NhbGxiYWNrPWZ1bmN0aW9uKGEsaCl7Zm9yKGNvbnN0IGwgb2YgYSkiYXR0cmlidXRlcyI9PT1sLnR5cGUmJiJkYXRhLWFkLXN0YXR1cyI9PWwuYXR0cmlidXRlTmFtZSYmInVuZmlsbGVkIj09bC50YXJnZXQuZGF0YXNldC5hZFN0YXR1cyYmbC50YXJnZXQuY2xvc2VzdCgiLmFpLWZhbGxiYWNrLWFkc2Vuc2UiKSYmYWlfaW5zZXJ0X2Fkc2Vuc2VfZmFsbGJhY2tfY29kZXMobC50YXJnZXQpfSxvYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihhaV9hZHNlbnNlX2NhbGxiYWNrKTtvYnNlcnZlci5vYnNlcnZlKHRhcmdldE5vZGUsY29uZmlnKTsKdmFyIEFycml2ZT1mdW5jdGlvbihhLGgsbCl7ZnVuY3Rpb24gcCh0LGQsZSl7Yy5hZGRNZXRob2QoZCxlLHQudW5iaW5kRXZlbnQpO2MuYWRkTWV0aG9kKGQsZSx0LnVuYmluZEV2ZW50V2l0aFNlbGVjdG9yT3JDYWxsYmFjayk7Yy5hZGRNZXRob2QoZCxlLHQudW5iaW5kRXZlbnRXaXRoU2VsZWN0b3JBbmRDYWxsYmFjayl9ZnVuY3Rpb24gdSh0KXt0LmFycml2ZT1tLmJpbmRFdmVudDtwKG0sdCwidW5iaW5kQXJyaXZlIik7dC5sZWF2ZT13LmJpbmRFdmVudDtwKHcsdCwidW5iaW5kTGVhdmUiKX1pZihhLk11dGF0aW9uT2JzZXJ2ZXImJiJ1bmRlZmluZWQiIT09dHlwZW9mIEhUTUxFbGVtZW50KXt2YXIgeT0wLGM9ZnVuY3Rpb24oKXt2YXIgdD1IVE1MRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8SFRNTEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8SFRNTEVsZW1lbnQucHJvdG90eXBlLm1vek1hdGNoZXNTZWxlY3Rvcnx8SFRNTEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yOwpyZXR1cm57bWF0Y2hlc1NlbGVjdG9yOmZ1bmN0aW9uKGQsZSl7cmV0dXJuIGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdC5jYWxsKGQsZSl9LGFkZE1ldGhvZDpmdW5jdGlvbihkLGUsZil7dmFyIGI9ZFtlXTtkW2VdPWZ1bmN0aW9uKCl7aWYoZi5sZW5ndGg9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBiKXJldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGNhbGxDYWxsYmFja3M6ZnVuY3Rpb24oZCxlKXtlJiZlLm9wdGlvbnMub25jZU9ubHkmJjE9PWUuZmlyZWRFbGVtcy5sZW5ndGgmJihkPVtkWzBdXSk7Zm9yKHZhciBmPTAsYjtiPWRbZl07ZisrKWImJmIuY2FsbGJhY2smJmIuY2FsbGJhY2suY2FsbChiLmVsZW0sYi5lbGVtKTtlJiZlLm9wdGlvbnMub25jZU9ubHkmJjE9PWUuZmlyZWRFbGVtcy5sZW5ndGgmJmUubWUudW5iaW5kRXZlbnRXaXRoU2VsZWN0b3JBbmRDYWxsYmFjay5jYWxsKGUudGFyZ2V0LAplLnNlbGVjdG9yLGUuY2FsbGJhY2spfSxjaGVja0NoaWxkTm9kZXNSZWN1cnNpdmVseTpmdW5jdGlvbihkLGUsZixiKXtmb3IodmFyIGc9MCxrO2s9ZFtnXTtnKyspZihrLGUsYikmJmIucHVzaCh7Y2FsbGJhY2s6ZS5jYWxsYmFjayxlbGVtOmt9KSwwPGsuY2hpbGROb2Rlcy5sZW5ndGgmJmMuY2hlY2tDaGlsZE5vZGVzUmVjdXJzaXZlbHkoay5jaGlsZE5vZGVzLGUsZixiKX0sbWVyZ2VBcnJheXM6ZnVuY3Rpb24oZCxlKXt2YXIgZj17fSxiO2ZvcihiIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShiKSYmKGZbYl09ZFtiXSk7Zm9yKGIgaW4gZSllLmhhc093blByb3BlcnR5KGIpJiYoZltiXT1lW2JdKTtyZXR1cm4gZn0sdG9FbGVtZW50c0FycmF5OmZ1bmN0aW9uKGQpeyJ1bmRlZmluZWQiPT09dHlwZW9mIGR8fCJudW1iZXIiPT09dHlwZW9mIGQubGVuZ3RoJiZkIT09YXx8KGQ9W2RdKTtyZXR1cm4gZH19fSgpLHY9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe3RoaXMuX2V2ZW50c0J1Y2tldD0KW107dGhpcy5fYmVmb3JlUmVtb3Zpbmc9dGhpcy5fYmVmb3JlQWRkaW5nPW51bGx9O3QucHJvdG90eXBlLmFkZEV2ZW50PWZ1bmN0aW9uKGQsZSxmLGIpe2Q9e3RhcmdldDpkLHNlbGVjdG9yOmUsb3B0aW9uczpmLGNhbGxiYWNrOmIsZmlyZWRFbGVtczpbXX07dGhpcy5fYmVmb3JlQWRkaW5nJiZ0aGlzLl9iZWZvcmVBZGRpbmcoZCk7dGhpcy5fZXZlbnRzQnVja2V0LnB1c2goZCk7cmV0dXJuIGR9O3QucHJvdG90eXBlLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGQpe2Zvcih2YXIgZT10aGlzLl9ldmVudHNCdWNrZXQubGVuZ3RoLTEsZjtmPXRoaXMuX2V2ZW50c0J1Y2tldFtlXTtlLS0pZChmKSYmKHRoaXMuX2JlZm9yZVJlbW92aW5nJiZ0aGlzLl9iZWZvcmVSZW1vdmluZyhmKSwoZj10aGlzLl9ldmVudHNCdWNrZXQuc3BsaWNlKGUsMSkpJiZmLmxlbmd0aCYmKGZbMF0uY2FsbGJhY2s9bnVsbCkpfTt0LnByb3RvdHlwZS5iZWZvcmVBZGRpbmc9ZnVuY3Rpb24oZCl7dGhpcy5fYmVmb3JlQWRkaW5nPQpkfTt0LnByb3RvdHlwZS5iZWZvcmVSZW1vdmluZz1mdW5jdGlvbihkKXt0aGlzLl9iZWZvcmVSZW1vdmluZz1kfTtyZXR1cm4gdH0oKSxuPWZ1bmN0aW9uKHQsZCl7dmFyIGU9bmV3IHYsZj10aGlzLGI9e2ZpcmVPbkF0dHJpYnV0ZXNNb2RpZmljYXRpb246ITF9O2UuYmVmb3JlQWRkaW5nKGZ1bmN0aW9uKGcpe3ZhciBrPWcudGFyZ2V0O2lmKGs9PT1hLmRvY3VtZW50fHxrPT09YSlrPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07dmFyIHE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oeCl7ZC5jYWxsKHRoaXMseCxnKX0pO3ZhciByPXQoZy5vcHRpb25zKTtxLm9ic2VydmUoayxyKTtnLm9ic2VydmVyPXE7Zy5tZT1mfSk7ZS5iZWZvcmVSZW1vdmluZyhmdW5jdGlvbihnKXtnLm9ic2VydmVyLmRpc2Nvbm5lY3QoKX0pO3RoaXMuYmluZEV2ZW50PWZ1bmN0aW9uKGcsayxxKXtrPWMubWVyZ2VBcnJheXMoYixrKTtmb3IodmFyIHI9Yy50b0VsZW1lbnRzQXJyYXkodGhpcyksCng9MDt4PHIubGVuZ3RoO3grKyllLmFkZEV2ZW50KHJbeF0sZyxrLHEpfTt0aGlzLnVuYmluZEV2ZW50PWZ1bmN0aW9uKCl7dmFyIGc9Yy50b0VsZW1lbnRzQXJyYXkodGhpcyk7ZS5yZW1vdmVFdmVudChmdW5jdGlvbihrKXtmb3IodmFyIHE9MDtxPGcubGVuZ3RoO3ErKylpZih0aGlzPT09bHx8ay50YXJnZXQ9PT1nW3FdKXJldHVybiEwO3JldHVybiExfSl9O3RoaXMudW5iaW5kRXZlbnRXaXRoU2VsZWN0b3JPckNhbGxiYWNrPWZ1bmN0aW9uKGcpe3ZhciBrPWMudG9FbGVtZW50c0FycmF5KHRoaXMpO2UucmVtb3ZlRXZlbnQoImZ1bmN0aW9uIj09PXR5cGVvZiBnP2Z1bmN0aW9uKHEpe2Zvcih2YXIgcj0wO3I8ay5sZW5ndGg7cisrKWlmKCh0aGlzPT09bHx8cS50YXJnZXQ9PT1rW3JdKSYmcS5jYWxsYmFjaz09PWcpcmV0dXJuITA7cmV0dXJuITF9OmZ1bmN0aW9uKHEpe2Zvcih2YXIgcj0wO3I8ay5sZW5ndGg7cisrKWlmKCh0aGlzPT09bHx8cS50YXJnZXQ9PT1rW3JdKSYmcS5zZWxlY3Rvcj09PQpnKXJldHVybiEwO3JldHVybiExfSl9O3RoaXMudW5iaW5kRXZlbnRXaXRoU2VsZWN0b3JBbmRDYWxsYmFjaz1mdW5jdGlvbihnLGspe3ZhciBxPWMudG9FbGVtZW50c0FycmF5KHRoaXMpO2UucmVtb3ZlRXZlbnQoZnVuY3Rpb24ocil7Zm9yKHZhciB4PTA7eDxxLmxlbmd0aDt4KyspaWYoKHRoaXM9PT1sfHxyLnRhcmdldD09PXFbeF0pJiZyLnNlbGVjdG9yPT09ZyYmci5jYWxsYmFjaz09PWspcmV0dXJuITA7cmV0dXJuITF9KX07cmV0dXJuIHRoaXN9LG09bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChmLGIsZyl7cmV0dXJuIGMubWF0Y2hlc1NlbGVjdG9yKGYsYi5zZWxlY3RvcikmJihmLl9pZD09PWwmJihmLl9pZD15KyspLC0xPT1iLmZpcmVkRWxlbXMuaW5kZXhPZihmLl9pZCkpPyhiLmZpcmVkRWxlbXMucHVzaChmLl9pZCksITApOiExfXZhciBkPXtmaXJlT25BdHRyaWJ1dGVzTW9kaWZpY2F0aW9uOiExLG9uY2VPbmx5OiExLGV4aXN0aW5nOiExfTttPW5ldyBuKGZ1bmN0aW9uKGYpe3ZhciBiPQp7YXR0cmlidXRlczohMSxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH07Zi5maXJlT25BdHRyaWJ1dGVzTW9kaWZpY2F0aW9uJiYoYi5hdHRyaWJ1dGVzPSEwKTtyZXR1cm4gYn0sZnVuY3Rpb24oZixiKXtmLmZvckVhY2goZnVuY3Rpb24oZyl7dmFyIGs9Zy5hZGRlZE5vZGVzLHE9Zy50YXJnZXQscj1bXTtudWxsIT09ayYmMDxrLmxlbmd0aD9jLmNoZWNrQ2hpbGROb2Rlc1JlY3Vyc2l2ZWx5KGssYix0LHIpOiJhdHRyaWJ1dGVzIj09PWcudHlwZSYmdChxLGIscikmJnIucHVzaCh7Y2FsbGJhY2s6Yi5jYWxsYmFjayxlbGVtOnF9KTtjLmNhbGxDYWxsYmFja3MocixiKX0pfSk7dmFyIGU9bS5iaW5kRXZlbnQ7bS5iaW5kRXZlbnQ9ZnVuY3Rpb24oZixiLGcpeyJ1bmRlZmluZWQiPT09dHlwZW9mIGc/KGc9YixiPWQpOmI9Yy5tZXJnZUFycmF5cyhkLGIpO3ZhciBrPWMudG9FbGVtZW50c0FycmF5KHRoaXMpO2lmKGIuZXhpc3Rpbmcpe2Zvcih2YXIgcT1bXSxyPTA7cjxrLmxlbmd0aDtyKyspZm9yKHZhciB4PQprW3JdLnF1ZXJ5U2VsZWN0b3JBbGwoZiksej0wO3o8eC5sZW5ndGg7eisrKXEucHVzaCh7Y2FsbGJhY2s6ZyxlbGVtOnhbel19KTtpZihiLm9uY2VPbmx5JiZxLmxlbmd0aClyZXR1cm4gZy5jYWxsKHFbMF0uZWxlbSxxWzBdLmVsZW0pO3NldFRpbWVvdXQoYy5jYWxsQ2FsbGJhY2tzLDEscSl9ZS5jYWxsKHRoaXMsZixiLGcpfTtyZXR1cm4gbX0sdz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGYsYil7cmV0dXJuIGMubWF0Y2hlc1NlbGVjdG9yKGYsYi5zZWxlY3Rvcil9dmFyIGQ9e307dz1uZXcgbihmdW5jdGlvbigpe3JldHVybntjaGlsZExpc3Q6ITAsc3VidHJlZTohMH19LGZ1bmN0aW9uKGYsYil7Zi5mb3JFYWNoKGZ1bmN0aW9uKGcpe2c9Zy5yZW1vdmVkTm9kZXM7dmFyIGs9W107bnVsbCE9PWcmJjA8Zy5sZW5ndGgmJmMuY2hlY2tDaGlsZE5vZGVzUmVjdXJzaXZlbHkoZyxiLHQsayk7Yy5jYWxsQ2FsbGJhY2tzKGssYil9KX0pO3ZhciBlPXcuYmluZEV2ZW50O3cuYmluZEV2ZW50PQpmdW5jdGlvbihmLGIsZyl7InVuZGVmaW5lZCI9PT10eXBlb2YgZz8oZz1iLGI9ZCk6Yj1jLm1lcmdlQXJyYXlzKGQsYik7ZS5jYWxsKHRoaXMsZixiLGcpfTtyZXR1cm4gd307aCYmdShoLmZuKTt1KEhUTUxFbGVtZW50LnByb3RvdHlwZSk7dShOb2RlTGlzdC5wcm90b3R5cGUpO3UoSFRNTENvbGxlY3Rpb24ucHJvdG90eXBlKTt1KEhUTUxEb2N1bWVudC5wcm90b3R5cGUpO3UoV2luZG93LnByb3RvdHlwZSk7aD17fTtwKG0saCwidW5iaW5kQWxsQXJyaXZlIik7cCh3LGgsInVuYmluZEFsbExlYXZlIik7cmV0dXJuIGh9fSh3aW5kb3csInVuZGVmaW5lZCI9PT10eXBlb2YgalF1ZXJ5P251bGw6alF1ZXJ5LHZvaWQgMCk7CjshZnVuY3Rpb24oYSxiKXthKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSxiKXtyZXR1cm4gbnVsbCE9YSYmbnVsbCE9YiYmYS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGMoYSxiKXt2YXIgYyxkLGU9YS5sZW5ndGg7aWYoIWV8fCFiKXJldHVybiExO2ZvcihjPWIudG9Mb3dlckNhc2UoKSxkPTA7ZDxlOysrZClpZihjPT09YVtkXS50b0xvd2VyQ2FzZSgpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGQoYSl7Zm9yKHZhciBiIGluIGEpaS5jYWxsKGEsYikmJihhW2JdPW5ldyBSZWdFeHAoYVtiXSwiaSIpKX1mdW5jdGlvbiBlKGEpe3JldHVybihhfHwiIikuc3Vic3RyKDAsNTAwKX1mdW5jdGlvbiBmKGEsYil7dGhpcy51YT1lKGEpLHRoaXMuX2NhY2hlPXt9LHRoaXMubWF4UGhvbmVXaWR0aD1ifHw2MDB9dmFyIGc9e307Zy5tb2JpbGVEZXRlY3RSdWxlcz17cGhvbmVzOntpUGhvbmU6IlxcYmlQaG9uZVxcYnxcXGJpUG9kXFxiIixCbGFja0JlcnJ5OiJCbGFja0JlcnJ5fFxcYkJCMTBcXGJ8cmltWzAtOV0rfFxcYihCQkExMDB8QkJCMTAwfEJCRDEwMHxCQkUxMDB8QkJGMTAwfFNUSDEwMClcXGItWzAtOV0rIixQaXhlbDoiOyBcXGJQaXhlbFxcYiIsSFRDOiJIVEN8SFRDLiooU2Vuc2F0aW9ufEV2b3xWaXNpb258RXhwbG9yZXJ8NjgwMHw4MTAwfDg5MDB8QTcyNzJ8UzUxMGV8QzExMGV8TGVnZW5kfERlc2lyZXxUODI4Mil8QVBYNTE1Q0tUfFF0ZWs5MDkwfEFQQTkyOTJLVHxIRF9taW5pfFNlbnNhdGlvbi4qWjcxMGV8UEc4NjEwMHxaNzE1ZXxEZXNpcmUuKihBODE4MXxIRCl8QURSNjIwMHxBRFI2NDAwTHxBRFI2NDI1fDAwMUhUfEluc3BpcmUgNEd8QW5kcm9pZC4qXFxiRVZPXFxifFQtTW9iaWxlIEcxfFo1MjBtfEFuZHJvaWQgWzAtOS5dKzsgUGl4ZWwiLE5leHVzOiJOZXh1cyBPbmV8TmV4dXMgU3xHYWxheHkuKk5leHVzfEFuZHJvaWQuKk5leHVzLipNb2JpbGV8TmV4dXMgNHxOZXh1cyA1fE5leHVzIDVYfE5leHVzIDYiLERlbGw6IkRlbGxbO10/IChTdHJlYWt8QWVyb3xWZW51ZXxWZW51ZSBQcm98Rmxhc2h8U21va2V8TWluaSAzaVgpfFhDRDI4fFhDRDM1fFxcYjAwMURMXFxifFxcYjEwMURMXFxifFxcYkdTMDFcXGIiLE1vdG9yb2xhOiJNb3Rvcm9sYXxEUk9JRFh8RFJPSUQgQklPTklDfFxcYkRyb2lkXFxiLipCdWlsZHxBbmRyb2lkLipYb29tfEhSSTM5fE1PVC18QTEyNjB8QTE2ODB8QTU1NXxBODUzfEE4NTV8QTk1M3xBOTU1fEE5NTZ8TW90b3JvbGEuKkVMRUNUUklGWXxNb3Rvcm9sYS4qaTF8aTg2N3xpOTQwfE1CMjAwfE1CMzAwfE1CNTAxfE1CNTAyfE1CNTA4fE1CNTExfE1CNTIwfE1CNTI1fE1CNTI2fE1CNjExfE1CNjEyfE1CNjMyfE1CODEwfE1CODU1fE1CODYwfE1CODYxfE1CODY1fE1CODcwfE1FNTAxfE1FNTAyfE1FNTExfE1FNTI1fE1FNjAwfE1FNjMyfE1FNzIyfE1FODExfE1FODYwfE1FODYzfE1FODY1fE1UNjIwfE1UNzEwfE1UNzE2fE1UNzIwfE1UODEwfE1UODcwfE1UOTE3fE1vdG9yb2xhLipUSVRBTklVTXxXWDQzNXxXWDQ0NXxYVDMwMHxYVDMwMXxYVDMxMXxYVDMxNnxYVDMxN3xYVDMxOXxYVDMyMHxYVDM5MHxYVDUwMnxYVDUzMHxYVDUzMXxYVDUzMnxYVDUzNXxYVDYwM3xYVDYxMHxYVDYxMXxYVDYxNXxYVDY4MXxYVDcwMXxYVDcwMnxYVDcxMXxYVDcyMHxYVDgwMHxYVDgwNnxYVDg2MHxYVDg2MnxYVDg3NXxYVDg4MnxYVDg4M3xYVDg5NHxYVDkwMXxYVDkwN3xYVDkwOXxYVDkxMHxYVDkxMnxYVDkyOHxYVDkyNnxYVDkxNXxYVDkxOXxYVDkyNXxYVDEwMjF8XFxiTW90byBFXFxifFhUMTA2OHxYVDEwOTJ8WFQxMDUyIixTYW1zdW5nOiJcXGJTYW1zdW5nXFxifFNNLUc5NTBGfFNNLUc5NTVGfFNNLUc5MjUwfEdULTE5MzAwfFNHSC1JMzM3fEJHVC1TNTIzMHxHVC1CMjEwMHxHVC1CMjcwMHxHVC1CMjcxMHxHVC1CMzIxMHxHVC1CMzMxMHxHVC1CMzQxMHxHVC1CMzczMHxHVC1CMzc0MHxHVC1CNTUxMHxHVC1CNTUxMnxHVC1CNTcyMnxHVC1CNjUyMHxHVC1CNzMwMHxHVC1CNzMyMHxHVC1CNzMzMHxHVC1CNzM1MHxHVC1CNzUxMHxHVC1CNzcyMnxHVC1CNzgwMHxHVC1DMzAxMHxHVC1DMzAxMXxHVC1DMzA2MHxHVC1DMzIwMHxHVC1DMzIxMnxHVC1DMzIxMkl8R1QtQzMyNjJ8R1QtQzMyMjJ8R1QtQzMzMDB8R1QtQzMzMDBLfEdULUMzMzAzfEdULUMzMzAzS3xHVC1DMzMxMHxHVC1DMzMyMnxHVC1DMzMzMHxHVC1DMzM1MHxHVC1DMzUwMHxHVC1DMzUxMHxHVC1DMzUzMHxHVC1DMzYzMHxHVC1DMzc4MHxHVC1DNTAxMHxHVC1DNTIxMnxHVC1DNjYyMHxHVC1DNjYyNXxHVC1DNjcxMnxHVC1FMTA1MHxHVC1FMTA3MHxHVC1FMTA3NXxHVC1FMTA4MHxHVC1FMTA4MXxHVC1FMTA4NXxHVC1FMTA4N3xHVC1FMTEwMHxHVC1FMTEwN3xHVC1FMTExMHxHVC1FMTEyMHxHVC1FMTEyNXxHVC1FMTEzMHxHVC1FMTE2MHxHVC1FMTE3MHxHVC1FMTE3NXxHVC1FMTE4MHxHVC1FMTE4MnxHVC1FMTIwMHxHVC1FMTIxMHxHVC1FMTIyNXxHVC1FMTIzMHxHVC1FMTM5MHxHVC1FMjEwMHxHVC1FMjEyMHxHVC1FMjEyMXxHVC1FMjE1MnxHVC1FMjIyMHxHVC1FMjIyMnxHVC1FMjIzMHxHVC1FMjIzMnxHVC1FMjI1MHxHVC1FMjM3MHxHVC1FMjU1MHxHVC1FMjY1MnxHVC1FMzIxMHxHVC1FMzIxM3xHVC1JNTUwMHxHVC1JNTUwM3xHVC1JNTcwMHxHVC1JNTgwMHxHVC1JNTgwMXxHVC1JNjQxMHxHVC1JNjQyMHxHVC1JNzExMHxHVC1JNzQxMHxHVC1JNzUwMHxHVC1JODAwMHxHVC1JODE1MHxHVC1JODE2MHxHVC1JODE5MHxHVC1JODMyMHxHVC1JODMzMHxHVC1JODM1MHxHVC1JODUzMHxHVC1JODcwMHxHVC1JODcwM3xHVC1JODkxMHxHVC1JOTAwMHxHVC1JOTAwMXxHVC1JOTAwM3xHVC1JOTAxMHxHVC1JOTAyMHxHVC1JOTAyM3xHVC1JOTA3MHxHVC1JOTA4MnxHVC1JOTEwMHxHVC1JOTEwM3xHVC1JOTIyMHxHVC1JOTI1MHxHVC1JOTMwMHxHVC1JOTMwNXxHVC1JOTUwMHxHVC1JOTUwNXxHVC1NMzUxMHxHVC1NNTY1MHxHVC1NNzUwMHxHVC1NNzYwMHxHVC1NNzYwM3xHVC1NODgwMHxHVC1NODkxMHxHVC1ONzAwMHxHVC1TMzExMHxHVC1TMzMxMHxHVC1TMzM1MHxHVC1TMzM1M3xHVC1TMzM3MHxHVC1TMzY1MHxHVC1TMzY1M3xHVC1TMzc3MHxHVC1TMzg1MHxHVC1TNTIxMHxHVC1TNTIyMHxHVC1TNTIyOXxHVC1TNTIzMHxHVC1TNTIzM3xHVC1TNTI1MHxHVC1TNTI1M3xHVC1TNTI2MHxHVC1TNTI2M3xHVC1TNTI3MHxHVC1TNTMwMHxHVC1TNTMzMHxHVC1TNTM1MHxHVC1TNTM2MHxHVC1TNTM2M3xHVC1TNTM2OXxHVC1TNTM4MHxHVC1TNTM4MER8R1QtUzU1NjB8R1QtUzU1NzB8R1QtUzU2MDB8R1QtUzU2MDN8R1QtUzU2MTB8R1QtUzU2MjB8R1QtUzU2NjB8R1QtUzU2NzB8R1QtUzU2OTB8R1QtUzU3NTB8R1QtUzU3ODB8R1QtUzU4MzB8R1QtUzU4Mzl8R1QtUzYxMDJ8R1QtUzY1MDB8R1QtUzcwNzB8R1QtUzcyMDB8R1QtUzcyMjB8R1QtUzcyMzB8R1QtUzcyMzN8R1QtUzcyNTB8R1QtUzc1MDB8R1QtUzc1MzB8R1QtUzc1NTB8R1QtUzc1NjJ8R1QtUzc3MTB8R1QtUzgwMDB8R1QtUzgwMDN8R1QtUzg1MDB8R1QtUzg1MzB8R1QtUzg2MDB8U0NILUEzMTB8U0NILUE1MzB8U0NILUE1NzB8U0NILUE2MTB8U0NILUE2MzB8U0NILUE2NTB8U0NILUE3OTB8U0NILUE3OTV8U0NILUE4NTB8U0NILUE4NzB8U0NILUE4OTB8U0NILUE5MzB8U0NILUE5NTB8U0NILUE5NzB8U0NILUE5OTB8U0NILUkxMDB8U0NILUkxMTB8U0NILUk0MDB8U0NILUk0MDV8U0NILUk1MDB8U0NILUk1MTB8U0NILUk1MTV8U0NILUk2MDB8U0NILUk3MzB8U0NILUk3NjB8U0NILUk3NzB8U0NILUk4MzB8U0NILUk5MTB8U0NILUk5MjB8U0NILUk5NTl8U0NILUxDMTF8U0NILU4xNTB8U0NILU4zMDB8U0NILVIxMDB8U0NILVIzMDB8U0NILVIzNTF8U0NILVI0MDB8U0NILVI0MTB8U0NILVQzMDB8U0NILVUzMTB8U0NILVUzMjB8U0NILVUzNTB8U0NILVUzNjB8U0NILVUzNjV8U0NILVUzNzB8U0NILVUzODB8U0NILVU0MTB8U0NILVU0MzB8U0NILVU0NTB8U0NILVU0NjB8U0NILVU0NzB8U0NILVU0OTB8U0NILVU1NDB8U0NILVU1NTB8U0NILVU2MjB8U0NILVU2NDB8U0NILVU2NTB8U0NILVU2NjB8U0NILVU3MDB8U0NILVU3NDB8U0NILVU3NTB8U0NILVU4MTB8U0NILVU4MjB8U0NILVU5MDB8U0NILVU5NDB8U0NILVU5NjB8U0NTLTI2VUN8U0dILUExMDd8U0dILUExMTd8U0dILUExMjd8U0dILUExMzd8U0dILUExNTd8U0dILUExNjd8U0dILUExNzd8U0dILUExODd8U0dILUExOTd8U0dILUEyMjd8U0dILUEyMzd8U0dILUEyNTd8U0dILUE0Mzd8U0dILUE1MTd8U0dILUE1OTd8U0dILUE2Mzd8U0dILUE2NTd8U0dILUE2Njd8U0dILUE2ODd8U0dILUE2OTd8U0dILUE3MDd8U0dILUE3MTd8U0dILUE3Mjd8U0dILUE3Mzd8U0dILUE3NDd8U0dILUE3Njd8U0dILUE3Nzd8U0dILUE3OTd8U0dILUE4MTd8U0dILUE4Mjd8U0dILUE4Mzd8U0dILUE4NDd8U0dILUE4Njd8U0dILUE4Nzd8U0dILUE4ODd8U0dILUE4OTd8U0dILUE5Mjd8U0dILUIxMDB8U0dILUIxMzB8U0dILUIyMDB8U0dILUIyMjB8U0dILUMxMDB8U0dILUMxMTB8U0dILUMxMjB8U0dILUMxMzB8U0dILUMxNDB8U0dILUMxNjB8U0dILUMxNzB8U0dILUMxODB8U0dILUMyMDB8U0dILUMyMDd8U0dILUMyMTB8U0dILUMyMjV8U0dILUMyMzB8U0dILUM0MTd8U0dILUM0NTB8U0dILUQzMDd8U0dILUQzNDd8U0dILUQzNTd8U0dILUQ0MDd8U0dILUQ0MTV8U0dILUQ3ODB8U0dILUQ4MDd8U0dILUQ5ODB8U0dILUUxMDV8U0dILUUyMDB8U0dILUUzMTV8U0dILUUzMTZ8U0dILUUzMTd8U0dILUUzMzV8U0dILUU1OTB8U0dILUU2MzV8U0dILUU3MTV8U0dILUU4OTB8U0dILUYzMDB8U0dILUY0ODB8U0dILUkyMDB8U0dILUkzMDB8U0dILUkzMjB8U0dILUk1NTB8U0dILUk1Nzd8U0dILUk2MDB8U0dILUk2MDd8U0dILUk2MTd8U0dILUk2Mjd8U0dILUk2Mzd8U0dILUk2Nzd8U0dILUk3MDB8U0dILUk3MTd8U0dILUk3Mjd8U0dILWk3NDdNfFNHSC1JNzc3fFNHSC1JNzgwfFNHSC1JODI3fFNHSC1JODQ3fFNHSC1JODU3fFNHSC1JODk2fFNHSC1JODk3fFNHSC1JOTAwfFNHSC1JOTA3fFNHSC1JOTE3fFNHSC1JOTI3fFNHSC1JOTM3fFNHSC1JOTk3fFNHSC1KMTUwfFNHSC1KMjAwfFNHSC1MMTcwfFNHSC1MNzAwfFNHSC1NMTEwfFNHSC1NMTUwfFNHSC1NMjAwfFNHSC1OMTA1fFNHSC1ONTAwfFNHSC1ONjAwfFNHSC1ONjIwfFNHSC1ONjI1fFNHSC1ONzAwfFNHSC1ONzEwfFNHSC1QMTA3fFNHSC1QMjA3fFNHSC1QMzAwfFNHSC1QMzEwfFNHSC1QNTIwfFNHSC1QNzM1fFNHSC1QNzc3fFNHSC1RMTA1fFNHSC1SMjEwfFNHSC1SMjIwfFNHSC1SMjI1fFNHSC1TMTA1fFNHSC1TMzA3fFNHSC1UMTA5fFNHSC1UMTE5fFNHSC1UMTM5fFNHSC1UMjA5fFNHSC1UMjE5fFNHSC1UMjI5fFNHSC1UMjM5fFNHSC1UMjQ5fFNHSC1UMjU5fFNHSC1UMzA5fFNHSC1UMzE5fFNHSC1UMzI5fFNHSC1UMzM5fFNHSC1UMzQ5fFNHSC1UMzU5fFNHSC1UMzY5fFNHSC1UMzc5fFNHSC1UNDA5fFNHSC1UNDI5fFNHSC1UNDM5fFNHSC1UNDU5fFNHSC1UNDY5fFNHSC1UNDc5fFNHSC1UNDk5fFNHSC1UNTA5fFNHSC1UNTE5fFNHSC1UNTM5fFNHSC1UNTU5fFNHSC1UNTg5fFNHSC1UNjA5fFNHSC1UNjE5fFNHSC1UNjI5fFNHSC1UNjM5fFNHSC1UNjU5fFNHSC1UNjY5fFNHSC1UNjc5fFNHSC1UNzA5fFNHSC1UNzE5fFNHSC1UNzI5fFNHSC1UNzM5fFNHSC1UNzQ2fFNHSC1UNzQ5fFNHSC1UNzU5fFNHSC1UNzY5fFNHSC1UODA5fFNHSC1UODE5fFNHSC1UODM5fFNHSC1UOTE5fFNHSC1UOTI5fFNHSC1UOTM5fFNHSC1UOTU5fFNHSC1UOTg5fFNHSC1VMTAwfFNHSC1VMjAwfFNHSC1VODAwfFNHSC1WMjA1fFNHSC1WMjA2fFNHSC1YMTAwfFNHSC1YMTA1fFNHSC1YMTIwfFNHSC1YMTQwfFNHSC1YNDI2fFNHSC1YNDI3fFNHSC1YNDc1fFNHSC1YNDk1fFNHSC1YNDk3fFNHSC1YNTA3fFNHSC1YNjAwfFNHSC1YNjEwfFNHSC1YNjIwfFNHSC1YNjMwfFNHSC1YNzAwfFNHSC1YODIwfFNHSC1YODkwfFNHSC1aMTMwfFNHSC1aMTUwfFNHSC1aMTcwfFNHSC1aWDEwfFNHSC1aWDIwfFNIVy1NMTEwfFNQSC1BMTIwfFNQSC1BNDAwfFNQSC1BNDIwfFNQSC1BNDYwfFNQSC1BNTAwfFNQSC1BNTYwfFNQSC1BNjAwfFNQSC1BNjIwfFNQSC1BNjYwfFNQSC1BNzAwfFNQSC1BNzQwfFNQSC1BNzYwfFNQSC1BNzkwfFNQSC1BODAwfFNQSC1BODIwfFNQSC1BODQwfFNQSC1BODgwfFNQSC1BOTAwfFNQSC1BOTQwfFNQSC1BOTYwfFNQSC1ENjAwfFNQSC1ENzAwfFNQSC1ENzEwfFNQSC1ENzIwfFNQSC1JMzAwfFNQSC1JMzI1fFNQSC1JMzMwfFNQSC1JMzUwfFNQSC1JNTAwfFNQSC1JNjAwfFNQSC1JNzAwfFNQSC1MNzAwfFNQSC1NMTAwfFNQSC1NMjIwfFNQSC1NMjQwfFNQSC1NMzAwfFNQSC1NMzA1fFNQSC1NMzIwfFNQSC1NMzMwfFNQSC1NMzUwfFNQSC1NMzYwfFNQSC1NMzcwfFNQSC1NMzgwfFNQSC1NNTEwfFNQSC1NNTQwfFNQSC1NNTUwfFNQSC1NNTYwfFNQSC1NNTcwfFNQSC1NNTgwfFNQSC1NNjEwfFNQSC1NNjIwfFNQSC1NNjMwfFNQSC1NODAwfFNQSC1NODEwfFNQSC1NODUwfFNQSC1NOTAwfFNQSC1NOTEwfFNQSC1NOTIwfFNQSC1NOTMwfFNQSC1OMTAwfFNQSC1OMjAwfFNQSC1OMjQwfFNQSC1OMzAwfFNQSC1ONDAwfFNQSC1aNDAwfFNXQy1FMTAwfFNDSC1pOTA5fEdULU43MTAwfEdULU43MTA1fFNDSC1JNTM1fFNNLU45MDBBfFNHSC1JMzE3fFNHSC1UOTk5THxHVC1TNTM2MEJ8R1QtSTgyNjJ8R1QtUzY4MDJ8R1QtUzYzMTJ8R1QtUzYzMTB8R1QtUzUzMTJ8R1QtUzUzMTB8R1QtSTkxMDV8R1QtSTg1MTB8R1QtUzY3OTBOfFNNLUc3MTA1fFNNLU45MDA1fEdULVM1MzAxfEdULUk5Mjk1fEdULUk5MTk1fFNNLUMxMDF8R1QtUzczOTJ8R1QtUzc1NjB8R1QtQjc2MTB8R1QtSTU1MTB8R1QtUzc1ODJ8R1QtUzc1MzBFfEdULUk4NzUwfFNNLUc5MDA2VnxTTS1HOTAwOFZ8U00tRzkwMDlEfFNNLUc5MDBBfFNNLUc5MDBEfFNNLUc5MDBGfFNNLUc5MDBIfFNNLUc5MDBJfFNNLUc5MDBKfFNNLUc5MDBLfFNNLUc5MDBMfFNNLUc5MDBNfFNNLUc5MDBQfFNNLUc5MDBSNHxTTS1HOTAwU3xTTS1HOTAwVHxTTS1HOTAwVnxTTS1HOTAwVzh8U0hWLUUxNjBLfFNDSC1QNzA5fFNDSC1QNzI5fFNNLVQyNTU4fEdULUk5MjA1fFNNLUc5MzUwfFNNLUoxMjBGfFNNLUc5MjBGfFNNLUc5MjBWfFNNLUc5MzBGfFNNLU45MTBDfFNNLUEzMTBGfEdULUk5MTkwfFNNLUo1MDBGTnxTTS1HOTAzRnxTTS1KMzMwRnxTTS1HNjEwRnxTTS1HOTgxQnxTTS1HODkyQXxTTS1BNTMwRiIsTEc6IlxcYkxHXFxiO3xMR1stIF0/KEM4MDB8QzkwMHxFNDAwfEU2MTB8RTkwMHxFLTkwMHxGMTYwfEYxODBLfEYxODBMfEYxODBTfDczMHw4NTV8TDE2MHxMUzc0MHxMUzg0MHxMUzk3MHxMVTYyMDB8TVM2OTB8TVM2OTV8TVM3NzB8TVM4NDB8TVM4NzB8TVM5MTB8UDUwMHxQNzAwfFA3MDV8Vk02OTZ8QVM2ODB8QVM2OTV8QVg4NDB8QzcyOXxFOTcwfEdTNTA1fDI3MnxDMzk1fEU3MzlCS3xFOTYwfEw1NUN8TDc1Q3xMUzY5NnxMUzg2MHxQNzY5Qkt8UDM1MHxQNTAwfFA1MDl8UDg3MHxVTjI3MnxVUzczMHxWUzg0MHxWUzk1MHxMTjI3MnxMTjUxMHxMUzY3MHxMUzg1NXxMVzY5MHxNTjI3MHxNTjUxMHxQNTA5fFA3Njl8UDkzMHxVTjIwMHxVTjI3MHxVTjUxMHxVTjYxMHxVUzY3MHxVUzc0MHxVUzc2MHxVWDI2NXxVWDg0MHxWTjI3MXxWTjUzMHxWUzY2MHxWUzcwMHxWUzc0MHxWUzc1MHxWUzkxMHxWUzkyMHxWUzkzMHxWWDkyMDB8VlgxMTAwMHxBWDg0MEF8TFc3NzB8UDUwNnxQOTI1fFA5OTl8RTYxMnxEOTU1fEQ4MDJ8TVMzMjN8TTI1Nyl8TE0tRzcxMCIsU29ueToiU29ueVNUfFNvbnlMVHxTb255RXJpY3Nzb258U29ueUVyaWNzc29uTFQxNWl2fExUMThpfEUxMGl8TFQyOGh8TFQyNnd8U29ueUVyaWNzc29uTVQyN2l8QzUzMDN8QzY5MDJ8QzY5MDN8QzY5MDZ8QzY5NDN8RDI1MzN8U09WMzR8NjAxU098RjgzMzIiLEFzdXM6IkFzdXMuKkdhbGF4eXxQYWRGb25lLipNb2JpbGUiLFhpYW9taToiXig/IS4qXFxieDExXFxiKS4qeGlhb21pLiokfFBPQ09QSE9ORSBGMXxNSSA4fFJlZG1pIE5vdGUgOVN8UmVkbWkgTm90ZSA1QSBQcmltZXxOMkc0N0h8TTIwMDFKMkd8TTIwMDFKMkl8TTE4MDVFMTBBfE0yMDA0SjExR3xNMTkwMkYxR3xNMjAwMko5R3xNMjAwNEoxOUd8TTIwMDNKNkExRyIsTm9raWFMdW1pYToiTHVtaWEgWzAtOV17Myw0fSIsTWljcm9tYXg6Ik1pY3JvbWF4LipcXGIoQTIxMHxBOTJ8QTg4fEE3MnxBMTExfEExMTBRfEExMTV8QTExNnxBMTEwfEE5MFN8QTI2fEE1MXxBMzV8QTU0fEEyNXxBMjd8QTg5fEE2OHxBNjV8QTU3fEE5MClcXGIiLFBhbG06IlBhbG1Tb3VyY2V8UGFsbSIsVmVydHU6IlZlcnR1fFZlcnR1LipMdGR8VmVydHUuKkFzY2VudHxWZXJ0dS4qQXl4dGF8VmVydHUuKkNvbnN0ZWxsYXRpb24oRnxRdWVzdCk/fFZlcnR1LipNb25pa2F8VmVydHUuKlNpZ25hdHVyZSIsUGFudGVjaDoiUEFOVEVDSHxJTS1BODUwU3xJTS1BODQwU3xJTS1BODMwTHxJTS1BODMwS3xJTS1BODMwU3xJTS1BODIwTHxJTS1BODEwS3xJTS1BODEwU3xJTS1BODAwU3xJTS1UMTAwS3xJTS1BNzI1THxJTS1BNzgwTHxJTS1BNzc1Q3xJTS1BNzcwS3xJTS1BNzYwU3xJTS1BNzUwS3xJTS1BNzQwU3xJTS1BNzMwU3xJTS1BNzIwTHxJTS1BNzEwS3xJTS1BNjkwTHxJTS1BNjkwU3xJTS1BNjUwU3xJTS1BNjMwS3xJTS1BNjAwU3xWRUdBIFBUTDIxfFBUMDAzfFA4MDEwfEFEUjkxMEx8UDYwMzB8UDYwMjB8UDkwNzB8UDQxMDB8UDkwNjB8UDUwMDB8Q0RNODk5MnxUWFQ4MDQ1fEFEUjg5OTV8SVMxMVBUfFAyMDMwfFA2MDEwfFA4MDAwfFBUMDAyfElTMDZ8Q0RNODk5OXxQOTA1MHxQVDAwMXxUWFQ4MDQwfFAyMDIwfFA5MDIwfFAyMDAwfFA3MDQwfFA3MDAwfEM3OTAiLEZseToiSVEyMzB8SVE0NDR8SVE0NTB8SVE0NDB8SVE0NDJ8SVE0NDF8SVEyNDV8SVEyNTZ8SVEyMzZ8SVEyNTV8SVEyMzV8SVEyNDV8SVEyNzV8SVEyNDB8SVEyODV8SVEyODB8SVEyNzB8SVEyNjB8SVEyNTAiLFdpa286IktJVEUgNEd8SElHSFdBWXxHRVRBV0FZfFNUQUlSV0FZfERBUktTSURFfERBUktGVUxMfERBUktOSUdIVHxEQVJLTU9PTnxTTElERXxXQVggNEd8UkFJTkJPV3xCTE9PTXxTVU5TRVR8R09BKD8hbm5hKXxMRU5OWXxCQVJSWXxJR0dZfE9aWll8Q0lOSyBGSVZFfENJTksgUEVBWHxDSU5LIFBFQVggMnxDSU5LIFNMSU18Q0lOSyBTTElNIDJ8Q0lOSyArfENJTksgS0lOR3xDSU5LIFBFQVh8Q0lOSyBTTElNfFNVQkxJTSIsaU1vYmlsZToiaS1tb2JpbGUgKElRfGktU1RZTEV8aWRlYXxaQUF8SGl0eikiLFNpbVZhbGxleToiXFxiKFNQLTgwfFhULTkzMHxTWC0zNDB8WFQtOTMwfFNYLTMxMHxTUC0zNjB8U1A2MHxTUFQtODAwfFNQLTEyMHxTUFQtODAwfFNQLTE0MHxTUFgtNXxTUFgtOHxTUC0xMDB8U1BYLTh8U1BYLTEyKVxcYiIsV29sZmdhbmc6IkFULUIyNER8QVQtQVM1MEhEfEFULUFTNDBXfEFULUFTNTVIRHxBVC1BUzQ1cTJ8QVQtQjI2RHxBVC1BUzUwUSIsQWxjYXRlbDoiQWxjYXRlbCIsTmludGVuZG86Ik5pbnRlbmRvICgzRFN8U3dpdGNoKSIsQW1vaToiQW1vaSIsSU5ROiJJTlEiLE9uZVBsdXM6Ik9ORVBMVVMiLEdlbmVyaWNQaG9uZToiVGFwYXRhbGt8UERBO3xTQUdFTXxcXGJtbXBcXGJ8cG9ja2V0fFxcYnBzcFxcYnxzeW1iaWFufFNtYXJ0cGhvbmV8c21hcnRmb258dHJlb3x1cC5icm93c2VyfHVwLmxpbmt8dm9kYWZvbmV8XFxid2FwXFxifG5va2lhfFNlcmllczQwfFNlcmllczYwfFM2MHxTb255RXJpY3Nzb258TjkwMHxNQVVJLipXQVAuKkJyb3dzZXIifSx0YWJsZXRzOntpUGFkOiJpUGFkfGlQYWQuKk1vYmlsZSIsTmV4dXNUYWJsZXQ6IkFuZHJvaWQuKk5leHVzW1xcc10rKDd8OXwxMCkiLEdvb2dsZVRhYmxldDoiQW5kcm9pZC4qUGl4ZWwgQyIsU2Ftc3VuZ1RhYmxldDoiU0FNU1VORy4qVGFibGV0fEdhbGF4eS4qVGFifFNDLTAxQ3xHVC1QMTAwMHxHVC1QMTAwM3xHVC1QMTAxMHxHVC1QMzEwNXxHVC1QNjIxMHxHVC1QNjgwMHxHVC1QNjgxMHxHVC1QNzEwMHxHVC1QNzMwMHxHVC1QNzMxMHxHVC1QNzUwMHxHVC1QNzUxMHxTQ0gtSTgwMHxTQ0gtSTgxNXxTQ0gtSTkwNXxTR0gtSTk1N3xTR0gtSTk4N3xTR0gtVDg0OXxTR0gtVDg1OXxTR0gtVDg2OXxTUEgtUDEwMHxHVC1QMzEwMHxHVC1QMzEwOHxHVC1QMzExMHxHVC1QNTEwMHxHVC1QNTExMHxHVC1QNjIwMHxHVC1QNzMyMHxHVC1QNzUxMXxHVC1OODAwMHxHVC1QODUxMHxTR0gtSTQ5N3xTUEgtUDUwMHxTR0gtVDc3OXxTQ0gtSTcwNXxTQ0gtSTkxNXxHVC1OODAxM3xHVC1QMzExM3xHVC1QNTExM3xHVC1QODExMHxHVC1OODAxMHxHVC1OODAwNXxHVC1OODAyMHxHVC1QMTAxM3xHVC1QNjIwMXxHVC1QNzUwMXxHVC1ONTEwMHxHVC1ONTEwNXxHVC1ONTExMHxTSFYtRTE0MEt8U0hWLUUxNDBMfFNIVi1FMTQwU3xTSFYtRTE1MFN8U0hWLUUyMzBLfFNIVi1FMjMwTHxTSFYtRTIzMFN8U0hXLU0xODBLfFNIVy1NMTgwTHxTSFctTTE4MFN8U0hXLU0xODBXfFNIVy1NMzAwV3xTSFctTTMwNVd8U0hXLU0zODBLfFNIVy1NMzgwU3xTSFctTTM4MFd8U0hXLU00MzBXfFNIVy1NNDgwS3xTSFctTTQ4MFN8U0hXLU00ODBXfFNIVy1NNDg1V3xTSFctTTQ4Nld8U0hXLU01MDBXfEdULUk5MjI4fFNDSC1QNzM5fFNDSC1JOTI1fEdULUk5MjAwfEdULVA1MjAwfEdULVA1MjEwfEdULVA1MjEwWHxTTS1UMzExfFNNLVQzMTB8U00tVDMxMFh8U00tVDIxMHxTTS1UMjEwUnxTTS1UMjExfFNNLVA2MDB8U00tUDYwMXxTTS1QNjA1fFNNLVA5MDB8U00tUDkwMXxTTS1UMjE3fFNNLVQyMTdBfFNNLVQyMTdTfFNNLVA2MDAwfFNNLVQzMTAwfFNHSC1JNDY3fFhFNTAwfFNNLVQxMTB8R1QtUDUyMjB8R1QtSTkyMDBYfEdULU41MTEwWHxHVC1ONTEyMHxTTS1QOTA1fFNNLVQxMTF8U00tVDIxMDV8U00tVDMxNXxTTS1UMzIwfFNNLVQzMjBYfFNNLVQzMjF8U00tVDUyMHxTTS1UNTI1fFNNLVQ1MzBOVXxTTS1UMjMwTlV8U00tVDMzME5VfFNNLVQ5MDB8WEU1MDBUMUN8U00tUDYwNVZ8U00tUDkwNVZ8U00tVDMzN1Z8U00tVDUzN1Z8U00tVDcwN1Z8U00tVDgwN1Z8U00tUDYwMFh8U00tUDkwMFh8U00tVDIxMFh8U00tVDIzMHxTTS1UMjMwWHxTTS1UMzI1fEdULVA3NTAzfFNNLVQ1MzF8U00tVDMzMHxTTS1UNTMwfFNNLVQ3MDV8U00tVDcwNUN8U00tVDUzNXxTTS1UMzMxfFNNLVQ4MDB8U00tVDcwMHxTTS1UNTM3fFNNLVQ4MDd8U00tUDkwN0F8U00tVDMzN0F8U00tVDUzN0F8U00tVDcwN0F8U00tVDgwN0F8U00tVDIzN3xTTS1UODA3UHxTTS1QNjA3VHxTTS1UMjE3VHxTTS1UMzM3VHxTTS1UODA3VHxTTS1UMTE2TlF8U00tVDExNkJVfFNNLVA1NTB8U00tVDM1MHxTTS1UNTUwfFNNLVQ5MDAwfFNNLVA5MDAwfFNNLVQ3MDVZfFNNLVQ4MDV8R1QtUDMxMTN8U00tVDcxMHxTTS1UODEwfFNNLVQ4MTV8U00tVDM2MHxTTS1UNTMzfFNNLVQxMTN8U00tVDMzNXxTTS1UNzE1fFNNLVQ1NjB8U00tVDY3MHxTTS1UNjc3fFNNLVQzNzd8U00tVDU2N3xTTS1UMzU3VHxTTS1UNTU1fFNNLVQ1NjF8U00tVDcxM3xTTS1UNzE5fFNNLVQ4MTN8U00tVDgxOXxTTS1UNTgwfFNNLVQzNTVZP3xTTS1UMjgwfFNNLVQ4MTdBfFNNLVQ4MjB8U00tVzcwMHxTTS1QNTgwfFNNLVQ1ODd8U00tUDM1MHxTTS1QNTU1TXxTTS1QMzU1TXxTTS1UMTEzTlV8U00tVDgxNVl8U00tVDU4NXxTTS1UMjg1fFNNLVQ4MjV8U00tVzcwOHxTTS1UODM1fFNNLVQ4MzB8U00tVDgzN1Z8U00tVDcyMHxTTS1UNTEwfFNNLVQzODdWfFNNLVA2MTB8U00tVDI5MHxTTS1UNTE1fFNNLVQ1OTB8U00tVDU5NXxTTS1UNzI1fFNNLVQ4MTdQfFNNLVA1ODVOMHxTTS1UMzk1fFNNLVQyOTV8U00tVDg2NXxTTS1QNjEwTnxTTS1QNjE1fFNNLVQ5NzB8U00tVDM4MHxTTS1UNTk1MHxTTS1UOTA1fFNNLVQyMzF8U00tVDUwMHxTTS1UODYwIixLaW5kbGU6IktpbmRsZXxTaWxrLipBY2NlbGVyYXRlZHxBbmRyb2lkLipcXGIoS0ZPVHxLRlRUfEtGSldJfEtGSldBfEtGT1RFfEtGU09XSXxLRlRIV0l8S0ZUSFdBfEtGQVBXSXxLRkFQV0F8V0ZKV0FFfEtGU0FXQXxLRlNBV0l8S0ZBU1dJfEtGQVJXSXxLRkZPV0l8S0ZHSVdJfEtGTUVXSSlcXGJ8QW5kcm9pZC4qU2lsay9bMC05Ll0rIGxpa2UgQ2hyb21lL1swLTkuXSsgKD8hTW9iaWxlKSIsU3VyZmFjZVRhYmxldDoiV2luZG93cyBOVCBbMC05Ll0rOyBBUk07LiooVGFibGV0fEFSTUJKUykiLEhQVGFibGV0OiJIUCBTbGF0ZSAoN3w4fDEwKXxIUCBFbGl0ZVBhZCA5MDB8aHAtdGFibGV0fEVsaXRlQm9vay4qVG91Y2h8SFAgOHxTbGF0ZSAyMXxIUCBTbGF0ZUJvb2sgMTAiLEFzdXNUYWJsZXQ6Il4uKlBhZEZvbmUoKD8hTW9iaWxlKS4pKiR8VHJhbnNmb3JtZXJ8VEYxMDF8VEYxMDFHfFRGMzAwVHxURjMwMFRHfFRGMzAwVEx8VEY3MDBUfFRGNzAwS0x8VEY3MDFUfFRGODEwQ3xNRTE3MXxNRTMwMVR8TUUzMDJDfE1FMzcxTUd8TUUzNzBUfE1FMzcyTUd8TUUxNzJWfE1FMTczWHxNRTQwMEN8U2xpZGVyIFNMMTAxfFxcYkswMEZcXGJ8XFxiSzAwQ1xcYnxcXGJLMDBFXFxifFxcYkswMExcXGJ8VFgyMDFMQXxNRTE3NkN8TUUxMDJBfFxcYk04MFRBXFxifE1FMzcyQ0x8TUU1NjBDR3xNRTM3MkNHfE1FMzAyS0x8IEswMTAgfCBLMDExIHwgSzAxNyB8IEswMUUgfE1FNTcyQ3xNRTEwM0t8TUUxNzBDfE1FMTcxQ3xcXGJNRTcwQ1xcYnxNRTU4MUN8TUU1ODFDTHxNRTg1MTBDfE1FMTgxQ3xQMDFZfFBPMU1BfFAwMVp8XFxiUDAyN1xcYnxcXGJQMDI0XFxifFxcYlAwMENcXGIiLEJsYWNrQmVycnlUYWJsZXQ6IlBsYXlCb29rfFJJTSBUYWJsZXQiLEhUQ3RhYmxldDoiSFRDX0ZseWVyX1A1MTJ8SFRDIEZseWVyfEhUQyBKZXRzdHJlYW18SFRDLVA3MTVhfEhUQyBFVk8gVmlldyA0R3xQRzQxMjAwfFBHMDk0MTAiLE1vdG9yb2xhVGFibGV0OiJ4b29tfHNob2xlc3R8TVo2MTV8TVo2MDV8TVo1MDV8TVo2MDF8TVo2MDJ8TVo2MDN8TVo2MDR8TVo2MDZ8TVo2MDd8TVo2MDh8TVo2MDl8TVo2MTV8TVo2MTZ8TVo2MTciLE5vb2tUYWJsZXQ6IkFuZHJvaWQuKk5vb2t8Tm9va0NvbG9yfG5vb2sgYnJvd3NlcnxCTlJWMjAwfEJOUlYyMDBBfEJOVFYyNTB8Qk5UVjI1MEF8Qk5UVjQwMHxCTlRWNjAwfExvZ2ljUEQgWm9vbTIiLEFjZXJUYWJsZXQ6IkFuZHJvaWQuKjsgXFxiKEExMDB8QTEwMXxBMTEwfEEyMDB8QTIxMHxBMjExfEE1MDB8QTUwMXxBNTEwfEE1MTF8QTcwMHxBNzAxfFc1MDB8VzUwMFB8VzUwMXxXNTAxUHxXNTEwfFc1MTF8VzcwMHxHMTAwfEcxMDBXfEIxLUE3MXxCMS03MTB8QjEtNzExfEExLTgxMHxBMS04MTF8QTEtODMwKVxcYnxXMy04MTB8XFxiQTMtQTEwXFxifFxcYkEzLUExMVxcYnxcXGJBMy1BMjBcXGJ8XFxiQTMtQTMwfEEzLUE0MCIsVG9zaGliYVRhYmxldDoiQW5kcm9pZC4qKEFUMTAwfEFUMTA1fEFUMjAwfEFUMjA1fEFUMjcwfEFUMjc1fEFUMzAwfEFUMzA1fEFUMVM1fEFUNTAwfEFUNTcwfEFUNzAwfEFUODMwKXxUT1NISUJBLipGT0xJTyIsTEdUYWJsZXQ6IlxcYkwtMDZDfExHLVY5MDl8TEctVjkwMHxMRy1WNzAwfExHLVY1MTB8TEctVjUwMHxMRy1WNDEwfExHLVY0MDB8TEctVks4MTBcXGIiLEZ1aml0c3VUYWJsZXQ6IkFuZHJvaWQuKlxcYihGLTAxRHxGLTAyRnxGLTA1RXxGLTEwRHxNNTMyfFE1NzIpXFxiIixQcmVzdGlnaW9UYWJsZXQ6IlBNUDMxNzBCfFBNUDMyNzBCfFBNUDM0NzBCfFBNUDcxNzBCfFBNUDMzNzBCfFBNUDM1NzBDfFBNUDU4NzBDfFBNUDM2NzBCfFBNUDU1NzBDfFBNUDU3NzBEfFBNUDM5NzBCfFBNUDM4NzBDfFBNUDU1ODBDfFBNUDU4ODBEfFBNUDU3ODBEfFBNUDU1ODhDfFBNUDcyODBDfFBNUDcyODBDM0d8UE1QNzI4MHxQTVA3ODgwRHxQTVA1NTk3RHxQTVA1NTk3fFBNUDcxMDBEfFBFUjM0NjR8UEVSMzI3NHxQRVIzNTc0fFBFUjM4ODR8UEVSNTI3NHxQRVI1NDc0fFBNUDUwOTdDUFJPfFBNUDUwOTd8UE1QNzM4MER8UE1QNTI5N0N8UE1QNTI5N0NfUVVBRHxQTVA4MTJFfFBNUDgxMkUzR3xQTVA4MTJGfFBNUDgxMEV8UE1QODgwVER8UE1UMzAxN3xQTVQzMDM3fFBNVDMwNDd8UE1UMzA1N3xQTVQ3MDA4fFBNVDU4ODd8UE1UNTAwMXxQTVQ1MDAyIixMZW5vdm9UYWJsZXQ6Ikxlbm92byBUQUJ8SWRlYShUYWJ8UGFkKSggQTF8QTEwfCBLMXwpfFRoaW5rUGFkKFsgXSspP1RhYmxldHxZVDMtODUwTXxZVDMtWDkwTHxZVDMtWDkwRnxZVDMtWDkwWHxMZW5vdm8uKihTMjEwOXxTMjExMHxTNTAwMHxTNjAwMHxLMzAxMXxBMzAwMHxBMzUwMHxBMTAwMHxBMjEwN3xBMjEwOXxBMTEwN3xBNTUwMHxBNzYwMHxCNjAwMHxCODAwMHxCODA4MCkoLXwpKEZMfEZ8SFZ8SHwpfFRCLVgxMDNGfFRCLVgzMDRYfFRCLVgzMDRGfFRCLVgzMDRMfFRCLVg1MDVGfFRCLVg1MDVMfFRCLVg1MDVYfFRCLVg2MDVGfFRCLVg2MDVMfFRCLTg3MDNGfFRCLTg3MDNYfFRCLTg3MDNOfFRCLTg3MDROfFRCLTg3MDRGfFRCLTg3MDRYfFRCLTg3MDRWfFRCLTczMDRGfFRCLTczMDRJfFRCLTczMDRYfFRhYjJBNy0xMEZ8VGFiMkE3LTIwRnxUQjItWDMwTHxZVDMtWDUwTHxZVDMtWDUwRnxZVDMtWDUwTXxZVC1YNzA1RnxZVC1YNzAzRnxZVC1YNzAzTHxZVC1YNzA1THxZVC1YNzA1WHxUQjItWDMwRnxUQjItWDMwTHxUQjItWDMwTXxBMjEwN0EtRnxBMjEwN0EtSHxUQjMtNzMwRnxUQjMtNzMwTXxUQjMtNzMwWHxUQi03NTA0RnxUQi03NTA0WHxUQi1YNzA0RnxUQi1YMTA0RnxUQjMtWDcwRnxUQi1YNzA1RnxUQi04NTA0RnxUQjMtWDcwTHxUQjMtNzEwRnxUQi1YNzA0TCIsRGVsbFRhYmxldDoiVmVudWUgMTF8VmVudWUgOHxWZW51ZSA3fERlbGwgU3RyZWFrIDEwfERlbGwgU3RyZWFrIDciLFlhcnZpa1RhYmxldDoiQW5kcm9pZC4qXFxiKFRBQjIxMHxUQUIyMTF8VEFCMjI0fFRBQjI1MHxUQUIyNjB8VEFCMjY0fFRBQjMxMHxUQUIzNjB8VEFCMzY0fFRBQjQxMHxUQUI0MTF8VEFCNDIwfFRBQjQyNHxUQUI0NTB8VEFCNDYwfFRBQjQ2MXxUQUI0NjR8VEFCNDY1fFRBQjQ2N3xUQUI0Njh8VEFCMDctMTAwfFRBQjA3LTEwMXxUQUIwNy0xNTB8VEFCMDctMTUxfFRBQjA3LTE1MnxUQUIwNy0yMDB8VEFCMDctMjAxLTNHfFRBQjA3LTIxMHxUQUIwNy0yMTF8VEFCMDctMjEyfFRBQjA3LTIxNHxUQUIwNy0yMjB8VEFCMDctNDAwfFRBQjA3LTQ4NXxUQUIwOC0xNTB8VEFCMDgtMjAwfFRBQjA4LTIwMS0zR3xUQUIwOC0yMDEtMzB8VEFCMDktMTAwfFRBQjA5LTIxMXxUQUIwOS00MTB8VEFCMTAtMTUwfFRBQjEwLTIwMXxUQUIxMC0yMTF8VEFCMTAtNDAwfFRBQjEwLTQxMHxUQUIxMy0yMDF8VEFCMjc0RVVLfFRBQjI3NUVVS3xUQUIzNzRFVUt8VEFCNDYyRVVLfFRBQjQ3NEVVS3xUQUI5LTIwMClcXGIiLE1lZGlvblRhYmxldDoiQW5kcm9pZC4qXFxiT1lPXFxifExJRkUuKihQOTIxMnxQOTUxNHxQOTUxNnxTOTUxMil8TElGRVRBQiIsQXJub3ZhVGFibGV0OiI5N0c0fEFOMTBHMnxBTjdiRzN8QU43ZkczfEFOOEczfEFOOGNHM3xBTjdHM3xBTjlHM3xBTjdkRzN8QU43ZEczU1R8QU43ZEczQ2hpbGRQYWR8QU4xMGJHM3xBTjEwYkczRFR8QU45RzIiLEludGVuc29UYWJsZXQ6IklOTTgwMDJLUHxJTk0xMDEwRlB8SU5NODA1TkR8SW50ZW5zbyBUYWJ8VEFCMTAwNCIsSVJVVGFibGV0OiJNNzAycHJvIixNZWdhZm9uVGFibGV0OiJNZWdhRm9uIFY5fFxcYlpURSBWOVxcYnxBbmRyb2lkLipcXGJNVDdBXFxiIixFYm9kYVRhYmxldDoiRS1Cb2RhIChTdXByZW1lfEltcHJlc3NwZWVkfEl6enljb21tfEVzc2VudGlhbCkiLEFsbFZpZXdUYWJsZXQ6IkFsbHZpZXcuKihWaXZhfEFsbGRyb3xDaXR5fFNwZWVkfEFsbCBUVnxGcmVuenl8UXVhc2FyfFNoaW5lfFRYMXxBWDF8QVgyKSIsQXJjaG9zVGFibGV0OiJcXGIoMTAxRzl8ODBHOXxBMTAxSVQpXFxifFFpbGl2ZSA5N1J8QXJjaG9zNXxcXGJBUkNIT1MgKDcwfDc5fDgwfDkwfDk3fDEwMXxGQU1JTFlQQUR8KShifGN8KShHMTB8IENvYmFsdHwgVElUQU5JVU0oSER8KXwgWGVub258IE5lb258WFNLfCAyfCBYUyAyfCBQTEFUSU5VTXwgQ0FSQk9OfEdBTUVQQUQpXFxiIixBaW5vbFRhYmxldDoiTk9WTzd8Tk9WTzh8Tk9WTzEwfE5vdm83QXVyb3JhfE5vdm83QmFzaWN8Tk9WTzdQQUxBRElOfG5vdm85LVNwYXJrIixOb2tpYUx1bWlhVGFibGV0OiJMdW1pYSAyNTIwIixTb255VGFibGV0OiJTb255LipUYWJsZXR8WHBlcmlhIFRhYmxldHxTb255IFRhYmxldCBTfFNPLTAzRXxTR1BUMTJ8U0dQVDEzfFNHUFQxMTR8U0dQVDEyMXxTR1BUMTIyfFNHUFQxMjN8U0dQVDExMXxTR1BUMTEyfFNHUFQxMTN8U0dQVDEzMXxTR1BUMTMyfFNHUFQxMzN8U0dQVDIxMXxTR1BUMjEyfFNHUFQyMTN8U0dQMzExfFNHUDMxMnxTR1AzMjF8RUJSRDExMDF8RUJSRDExMDJ8RUJSRDEyMDF8U0dQMzUxfFNHUDM0MXxTR1A1MTF8U0dQNTEyfFNHUDUyMXxTR1A1NDF8U0dQNTUxfFNHUDYyMXxTR1A2NDF8U0dQNjEyfFNPVDMxfFNHUDc3MXxTR1A2MTF8U0dQNjEyfFNHUDcxMiIsUGhpbGlwc1RhYmxldDoiXFxiKFBJMjAxMHxQSTMwMDB8UEkzMTAwfFBJMzEwNXxQSTMxMTB8UEkzMjA1fFBJMzIxMHxQSTM5MDB8UEk0MDEwfFBJNzAwMHxQSTcxMDApXFxiIixDdWJlVGFibGV0OiJBbmRyb2lkLiooSzhHVHxVOUdUfFUxMEdUfFUxNkdUfFUxN0dUfFUxOEdUfFUxOUdUfFUyMEdUfFUyM0dUfFUzMEdUKXxDVUJFIFU4R1QiLENvYnlUYWJsZXQ6Ik1JRDEwNDJ8TUlEMTA0NXxNSUQxMTI1fE1JRDExMjZ8TUlENzAxMnxNSUQ3MDE0fE1JRDcwMTV8TUlENzAzNHxNSUQ3MDM1fE1JRDcwMzZ8TUlENzA0MnxNSUQ3MDQ4fE1JRDcxMjd8TUlEODA0MnxNSUQ4MDQ4fE1JRDgxMjd8TUlEOTA0MnxNSUQ5NzQwfE1JRDk3NDJ8TUlENzAyMnxNSUQ3MDEwIixNSURUYWJsZXQ6Ik05NzAxfE05MDAwfE05MTAwfE04MDZ8TTEwNTJ8TTgwNnxUNzAzfE1JRDcwMXxNSUQ3MTN8TUlENzEwfE1JRDcyN3xNSUQ3NjB8TUlEODMwfE1JRDcyOHxNSUQ5MzN8TUlEMTI1fE1JRDgxMHxNSUQ3MzJ8TUlEMTIwfE1JRDkzMHxNSUQ4MDB8TUlENzMxfE1JRDkwMHxNSUQxMDB8TUlEODIwfE1JRDczNXxNSUQ5ODB8TUlEMTMwfE1JRDgzM3xNSUQ3Mzd8TUlEOTYwfE1JRDEzNXxNSUQ4NjB8TUlENzM2fE1JRDE0MHxNSUQ5MzB8TUlEODM1fE1JRDczM3xNSUQ0WDEwIixNU0lUYWJsZXQ6Ik1TSSBcXGIoUHJpbW8gNzNLfFByaW1vIDczTHxQcmltbyA4MUx8UHJpbW8gNzd8UHJpbW8gOTN8UHJpbW8gNzV8UHJpbW8gNzZ8UHJpbW8gNzN8UHJpbW8gODF8UHJpbW8gOTF8UHJpbW8gOTB8RW5qb3kgNzF8RW5qb3kgN3xFbmpveSAxMClcXGIiLFNNaVRUYWJsZXQ6IkFuZHJvaWQuKihcXGJNSURcXGJ8TUlELTU2MHxNVFYtVDEyMDB8TVRWLVBORDUzMXxNVFYtUDExMDF8TVRWLVBORDUzMCkiLFJvY2tDaGlwVGFibGV0OiJBbmRyb2lkLiooUksyODE4fFJLMjgwOEF8UksyOTE4fFJLMzA2Nil8UksyNzM4fFJLMjgwOEEiLEZseVRhYmxldDoiSVEzMTB8Rmx5IFZpc2lvbiIsYnFUYWJsZXQ6IkFuZHJvaWQuKihicSk/LipcXGIoRWxjYW5vfEN1cmllfEVkaXNvbnxNYXh3ZWxsfEtlcGxlcnxQYXNjYWx8VGVzbGF8SHlwYXRpYXxQbGF0b258TmV3dG9ufExpdmluZ3N0b25lfENlcnZhbnRlc3xBdmFudHxBcXVhcmlzIChbRXxNXTEwfE04KSlcXGJ8TWF4d2VsbC4qTGl0ZXxNYXh3ZWxsLipQbHVzIixIdWF3ZWlUYWJsZXQ6Ik1lZGlhUGFkfE1lZGlhUGFkIDcgWW91dGh8SURFT1MgUzd8UzctMjAxY3xTNy0yMDJ1fFM3LTEwMXxTNy0xMDN8UzctMTA0fFM3LTEwNXxTNy0xMDZ8UzctMjAxfFM3LVNsaW18TTItQTAxTHxCQUgtTDA5fEJBSC1XMDl8QUdTLUwwOXxDTVItQUwxOSIsTmVjVGFibGV0OiJcXGJOLTA2RHxcXGJOLTA4RCIsUGFudGVjaFRhYmxldDoiUGFudGVjaC4qUDQxMDAiLEJyb25jaG9UYWJsZXQ6IkJyb25jaG8uKihONzAxfE43MDh8TjgwMnxhNzEwKSIsVmVyc3VzVGFibGV0OiJUT1VDSFBBRC4qWzc4OTEwXXxcXGJUT1VDSFRBQlxcYiIsWnluY1RhYmxldDoiejEwMDB8Wjk5IDJHfHo5MzB8ejk5MHx6OTA5fFo5MTl8ejkwMCIsUG9zaXRpdm9UYWJsZXQ6IlRCMDdTVEF8VEIxMFNUQXxUQjA3RlRBfFRCMTBGVEEiLE5hYmlUYWJsZXQ6IkFuZHJvaWQuKlxcYk5hYmkiLEtvYm9UYWJsZXQ6IktvYm8gVG91Y2h8XFxiSzA4MFxcYnxcXGJWb3hcXGIgQnVpbGR8XFxiQXJjXFxiIEJ1aWxkIixEYW5ld1RhYmxldDoiRFNsaWRlLipcXGIoNzAwfDcwMVJ8NzAyfDcwM1J8NzA0fDgwMnw5NzB8OTcxfDk3Mnw5NzN8OTc0fDEwMTB8MTAxMilcXGIiLFRleGV0VGFibGV0OiJOYXZpUGFkfFRCLTc3MkF8VE0tNzA0NXxUTS03MDU1fFRNLTk3NTB8VE0tNzAxNnxUTS03MDI0fFRNLTcwMjZ8VE0tNzA0MXxUTS03MDQzfFRNLTcwNDd8VE0tODA0MXxUTS05NzQxfFRNLTk3NDd8VE0tOTc0OHxUTS05NzUxfFRNLTcwMjJ8VE0tNzAyMXxUTS03MDIwfFRNLTcwMTF8VE0tNzAxMHxUTS03MDIzfFRNLTcwMjV8VE0tNzAzN1d8VE0tNzAzOFd8VE0tNzAyN1d8VE0tOTcyMHxUTS05NzI1fFRNLTk3MzdXfFRNLTEwMjB8VE0tOTczOFd8VE0tOTc0MHxUTS05NzQzV3xUQi04MDdBfFRCLTc3MUF8VEItNzI3QXxUQi03MjVBfFRCLTcxOUF8VEItODIzQXxUQi04MDVBfFRCLTcyM0F8VEItNzE1QXxUQi03MDdBfFRCLTcwNUF8VEItNzA5QXxUQi03MTFBfFRCLTg5MEhEfFRCLTg4MEhEfFRCLTc5MEhEfFRCLTc4MEhEfFRCLTc3MEhEfFRCLTcyMUhEfFRCLTcxMEhEfFRCLTQzNEhEfFRCLTg2MEhEfFRCLTg0MEhEfFRCLTc2MEhEfFRCLTc1MEhEfFRCLTc0MEhEfFRCLTczMEhEfFRCLTcyMkhEfFRCLTcyMEhEfFRCLTcwMEhEfFRCLTUwMEhEfFRCLTQ3MEhEfFRCLTQzMUhEfFRCLTQzMEhEfFRCLTUwNnxUQi01MDR8VEItNDQ2fFRCLTQzNnxUQi00MTZ8VEItMTQ2U0V8VEItMTI2U0UiLFBsYXlzdGF0aW9uVGFibGV0OiJQbGF5c3RhdGlvbi4qKFBvcnRhYmxlfFZpdGEpIixUcmVrc3RvclRhYmxldDoiU1QxMDQxNi0xfFZUMTA0MTYtMXxTVDcwNDA4LTF8U1Q3MDJ4eC0xfFNUNzAyeHgtMnxTVDgwMjA4fFNUOTcyMTZ8U1Q3MDEwNC0yfFZUMTA0MTYtMnxTVDEwMjE2LTJBfFN1cmZUYWIiLFB5bGVBdWRpb1RhYmxldDoiXFxiKFBUQkwxMENFVXxQVEJMMTBDfFBUQkw3MkJDfFBUQkw3MkJDRVV8UFRCTDdDRVV8UFRCTDdDfFBUQkw5MkJDfFBUQkw5MkJDRVV8UFRCTDlDRVV8UFRCTDlDVUt8UFRCTDlDKVxcYiIsQWR2YW5UYWJsZXQ6IkFuZHJvaWQuKiBcXGIoRTNBfFQzWHxUNUN8VDVCfFQzRXxUM0N8VDNCfFQxSnxUMUZ8VDJBfFQxSHxUMWl8RTFDfFQxLUV8VDUtQXxUNHxFMS1CfFQyQ2l8VDEtQnxUMS1EfE8xLUF8RTEtQXxUMS1BfFQzQXxUNGkpXFxiICIsRGFueVRlY2hUYWJsZXQ6Ikdlbml1cyBUYWIgRzN8R2VuaXVzIFRhYiBTMnxHZW5pdXMgVGFiIFEzfEdlbml1cyBUYWIgRzR8R2VuaXVzIFRhYiBRNHxHZW5pdXMgVGFiIEctSUl8R2VuaXVzIFRBQiBHSUl8R2VuaXVzIFRBQiBHSUlJfEdlbml1cyBUYWIgUzEiLEdhbGFwYWRUYWJsZXQ6IkFuZHJvaWQgWzAtOS5dKzsgW2Etei1dKzsgXFxiRzFcXGIiLE1pY3JvbWF4VGFibGV0OiJGdW5ib29rfE1pY3JvbWF4LipcXGIoUDI1MHxQNTYwfFAzNjB8UDM2MnxQNjAwfFAzMDB8UDM1MHxQNTAwfFAyNzUpXFxiIixLYXJib25uVGFibGV0OiJBbmRyb2lkLipcXGIoQTM5fEEzN3xBMzR8U1Q4fFNUMTB8U1Q3fFNtYXJ0IFRhYjN8U21hcnQgVGFiMilcXGIiLEFsbEZpbmVUYWJsZXQ6IkZpbmU3IEdlbml1c3xGaW5lNyBTaGluZXxGaW5lNyBBaXJ8RmluZTggU3R5bGV8RmluZTkgTW9yZXxGaW5lMTAgSm95fEZpbmUxMSBXaWRlIixQUk9TQ0FOVGFibGV0OiJcXGIoUEVNNjN8UExUMTAyM0d8UExUMTA0MXxQTFQxMDQ0fFBMVDEwNDRHfFBMVDEwOTF8UExUNDMxMXxQTFQ0MzExUEx8UExUNDMxNXxQTFQ3MDMwfFBMVDcwMzN8UExUNzAzM0R8UExUNzAzNXxQTFQ3MDM1RHxQTFQ3MDQ0S3xQTFQ3MDQ1S3xQTFQ3MDQ1S0J8UExUNzA3MUtHfFBMVDcwNzJ8UExUNzIyM0d8UExUNzIyNUd8UExUNzc3N0d8UExUNzgxMEt8UExUNzg0OUd8UExUNzg1MUd8UExUNzg1Mkd8UExUODAxNXxQTFQ4MDMxfFBMVDgwMzR8UExUODAzNnxQTFQ4MDgwS3xQTFQ4MDgyfFBMVDgwODh8UExUODIyM0d8UExUODIzNEd8UExUODIzNUd8UExUODgxNkt8UExUOTAxMXxQTFQ5MDQ1S3xQTFQ5MjMzR3xQTFQ5NzM1fFBMVDk3NjBHfFBMVDk3NzBHKVxcYiIsWU9ORVNUYWJsZXQ6IkJRMTA3OHxCQzEwMDN8QkMxMDc3fFJLOTcwMnxCQzk3MzB8QkM5MDAxfElUOTAwMXxCQzcwMDh8QkM3MDEwfEJDNzA4fEJDNzI4fEJDNzAxMnxCQzcwMzB8QkM3MDI3fEJDNzAyNiIsQ2hhbmdKaWFUYWJsZXQ6IlRQQzcxMDJ8VFBDNzEwM3xUUEM3MTA1fFRQQzcxMDZ8VFBDNzEwN3xUUEM3MjAxfFRQQzcyMDN8VFBDNzIwNXxUUEM3MjEwfFRQQzc3MDh8VFBDNzcwOXxUUEM3NzEyfFRQQzcxMTB8VFBDODEwMXxUUEM4MTAzfFRQQzgxMDV8VFBDODEwNnxUUEM4MjAzfFRQQzgyMDV8VFBDODUwM3xUUEM5MTA2fFRQQzk3MDF8VFBDOTcxMDF8VFBDOTcxMDN8VFBDOTcxMDV8VFBDOTcxMDZ8VFBDOTcxMTF8VFBDOTcxMTN8VFBDOTcyMDN8VFBDOTc2MDN8VFBDOTc4MDl8VFBDOTcyMDV8VFBDMTAxMDF8VFBDMTAxMDN8VFBDMTAxMDZ8VFBDMTAxMTF8VFBDMTAyMDN8VFBDMTAyMDV8VFBDMTA1MDMiLEdVVGFibGV0OiJUWC1BMTMwMXxUWC1NOTAwMnxRNzAyfGtmMDI2IixQb2ludE9mVmlld1RhYmxldDoiVEFCLVA1MDZ8VEFCLW5hdmktNy0zRy1NfFRBQi1QNTE3fFRBQi1QLTUyN3xUQUItUDcwMXxUQUItUDcwM3xUQUItUDcyMXxUQUItUDczMU58VEFCLVA3NDF8VEFCLVA4MjV8VEFCLVA5MDV8VEFCLVA5MjV8VEFCLVBSOTQ1fFRBQi1QTDEwMTV8VEFCLVAxMDI1fFRBQi1QSTEwNDV8VEFCLVAxMzI1fFRBQi1QUk9UQUJbMC05XSt8VEFCLVBST1RBQjI1fFRBQi1QUk9UQUIyNnxUQUItUFJPVEFCMjd8VEFCLVBST1RBQjI2WEx8VEFCLVBST1RBQjItSVBTOXxUQUItUFJPVEFCMzAtSVBTOXxUQUItUFJPVEFCMjVYWEx8VEFCLVBST1RBQjI2LUlQUzEwfFRBQi1QUk9UQUIzMC1JUFMxMCIsT3Zlcm1heFRhYmxldDoiT1YtKFN0ZWVsQ29yZXxOZXdCYXNlfEJhc2Vjb3JlfEJhc2VvbmV8RXhlbGxlbnxRdWF0dG9yfEVkdVRhYnxTb2x1dGlvbnxBQ1RJT058QmFzaWNUYWJ8VGVkZHlUYWJ8TWFnaWNUYWJ8U3RyZWFtfFRCLTA4fFRCLTA5KXxRdWFsY29yZSAxMDI3IixIQ0xUYWJsZXQ6IkhDTC4qVGFibGV0fENvbm5lY3QtM0ctMi4wfENvbm5lY3QtMkctMi4wfE1FIFRhYmxldCBVMXxNRSBUYWJsZXQgVTJ8TUUgVGFibGV0IEcxfE1FIFRhYmxldCBYMXxNRSBUYWJsZXQgWTJ8TUUgVGFibGV0IFN5bmMiLERQU1RhYmxldDoiRFBTIERyZWFtIDl8RFBTIER1YWwgNyIsVmlzdHVyZVRhYmxldDoiVjk3IEhEfGk3NSAzR3xWaXN0dXJlIFY0KCBIRCk/fFZpc3R1cmUgVjUoIEhEKT98VmlzdHVyZSBWMTAiLENyZXN0YVRhYmxldDoiQ1RQKC0pPzgxMHxDVFAoLSk/ODE4fENUUCgtKT84Mjh8Q1RQKC0pPzgzOHxDVFAoLSk/ODg4fENUUCgtKT85Nzh8Q1RQKC0pPzk4MHxDVFAoLSk/OTg3fENUUCgtKT85ODh8Q1RQKC0pPzk4OSIsTWVkaWF0ZWtUYWJsZXQ6IlxcYk1UODEyNXxNVDgzODl8TVQ4MTM1fE1UODM3N1xcYiIsQ29uY29yZGVUYWJsZXQ6IkNvbmNvcmRlKFsgXSspP1RhYnxDb25Db3JkZSBSZWFkTWFuIixHb0NsZXZlclRhYmxldDoiR09DTEVWRVIgVEFCfEE3R09DTEVWRVJ8TTEwNDJ8TTc4NDF8TTc0MnxSMTA0MkJLfFIxMDQxfFRBQiBBOTc1fFRBQiBBNzg0MnxUQUIgQTc0MXxUQUIgQTc0MUx8VEFCIE03MjNHfFRBQiBNNzIxfFRBQiBBMTAyMXxUQUIgSTkyMXxUQUIgUjcyMXxUQUIgSTcyMHxUQUIgVDc2fFRBQiBSNzB8VEFCIFI3Ni4yfFRBQiBSMTA2fFRBQiBSODMuMnxUQUIgTTgxM0d8VEFCIEk3MjF8R0NUQTcyMnxUQUIgSTcwfFRBQiBJNzF8VEFCIFM3M3xUQUIgUjczfFRBQiBSNzR8VEFCIFI5M3xUQUIgUjc1fFRBQiBSNzYuMXxUQUIgQTczfFRBQiBBOTN8VEFCIEE5My4yfFRBQiBUNzJ8VEFCIFI4M3xUQUIgUjk3NHxUQUIgUjk3M3xUQUIgQTEwMXxUQUIgQTEwM3xUQUIgQTEwNHxUQUIgQTEwNC4yfFIxMDVCS3xNNzEzR3xBOTcyQkt8VEFCIEE5NzF8VEFCIFI5NzQuMnxUQUIgUjEwNHxUQUIgUjgzLjN8VEFCIEExMDQyIixNb2RlY29tVGFibGV0OiJGcmVlVEFCIDkwMDB8RnJlZVRBQiA3LjR8RnJlZVRBQiA3MDA0fEZyZWVUQUIgNzgwMHxGcmVlVEFCIDIwOTZ8RnJlZVRBQiA3LjV8RnJlZVRBQiAxMDE0fEZyZWVUQUIgMTAwMSB8RnJlZVRBQiA4MDAxfEZyZWVUQUIgOTcwNnxGcmVlVEFCIDk3MDJ8RnJlZVRBQiA3MDAzfEZyZWVUQUIgNzAwMnxGcmVlVEFCIDEwMDJ8RnJlZVRBQiA3ODAxfEZyZWVUQUIgMTMzMXxGcmVlVEFCIDEwMDR8RnJlZVRBQiA4MDAyfEZyZWVUQUIgODAxNHxGcmVlVEFCIDk3MDR8RnJlZVRBQiAxMDAzIixWb25pbm9UYWJsZXQ6IlxcYihBcmd1c1sgX10/U3xEaWFtb25kWyBfXT83OUhEfEVtZXJhbGRbIF9dPzc4RXxMdW5hWyBfXT83MEN8T255eFsgX10/U3xPbnl4WyBfXT9afE9yaW5bIF9dP0hEfE9yaW5bIF9dP1N8T3Rpc1sgX10/U3xTcGVlZFN0YXJbIF9dP1N8TWFnbmV0WyBfXT9NOXxQcmltdXNbIF9dPzk0WyBfXT8zR3xQcmltdXNbIF9dPzk0SER8UHJpbXVzWyBfXT9RU3xBbmRyb2lkLipcXGJROFxcYnxTaXJpdXNbIF9dP0VWT1sgX10/UVN8U2lyaXVzWyBfXT9RU3xTcGlyaXRbIF9dP1MpXFxiIixFQ1NUYWJsZXQ6IlYwN09UMnxUTTEwNUF8UzEwT1QxfFRSMTBDUzEiLFN0b3JleFRhYmxldDoiZVplZVtfJ10/KFRhYnxHbylbMC05XSt8VGFiTEM3fExvb25leSBUdW5lcyBUYWIiLFZvZGFmb25lVGFibGV0OiJTbWFydFRhYihbIF0rKT9bMC05XSt8U21hcnRUYWJJSTEwfFNtYXJ0VGFiSUk3fFZGLTE0OTd8VkZEIDE0MDAiLEVzc2VudGllbEJUYWJsZXQ6IlNtYXJ0WyAnXT9UQUJbIF0rP1swLTldK3xGYW1pbHlbICddP1RBQjIiLFJvc3NNb29yVGFibGV0OiJSTS03OTB8Uk0tOTk3fFJNRC04NzhHfFJNRC05NzRSfFJNVC03MDVBfFJNVC03MDF8Uk1FLTYwMXxSTVQtNTAxfFJNVC03MTEiLGlNb2JpbGVUYWJsZXQ6ImktbW9iaWxlIGktbm90ZSIsVG9saW5vVGFibGV0OiJ0b2xpbm8gdGFiIFswLTkuXSt8dG9saW5vIHNoaW5lIixBdWRpb1NvbmljVGFibGV0OiJcXGJDLTIyUXxUNy1RQ3xULTE3QnxULTE3UFxcYiIsQU1QRVRhYmxldDoiQW5kcm9pZC4qIEE3OCAiLFNra1RhYmxldDoiQW5kcm9pZC4qIChTS1lQQUR8UEhPRU5JWHxDWUNMT1BTKSIsVGVjbm9UYWJsZXQ6IlRFQ05PIFA5fFRFQ05PIERQOEQiLEpYRFRhYmxldDoiQW5kcm9pZC4qIFxcYihGMzAwMHxBMzMwMHxKWEQ1MDAwfEpYRDMwMDB8SlhEMjAwMHxKWEQzMDBCfEpYRDMwMHxTNTgwMHxTNzgwMHxTNjAyYnxTNTExMGJ8UzczMDB8UzUzMDB8UzYwMnxTNjAzfFM1MTAwfFM1MTEwfFM2MDF8UzcxMDBhfFAzMDAwRnxQMzAwMHN8UDEwMXxQMjAwc3xQMTAwMG18UDIwMG18UDkxMDB8UDEwMDBzfFM2NjAwYnxTOTA4fFAxMDAwfFAzMDB8UzE4fFM2NjAwfFM5MTAwKVxcYiIsaUpveVRhYmxldDoiVGFibGV0IChTcGlyaXQgN3xFc3NlbnRpYXxHYWxhdGVhfEZ1c2lvbnxPbml4IDd8TGFuZGF8VGl0YW58U2Nvb2J5fERlb3h8U3RlbGxhfFRoZW1pc3xBcmdvbnxVbmlxdWUgN3xTeWdudXN8SGV4ZW58RmluaXR5IDd8Q3JlYW18Q3JlYW0gWDJ8SmFkZXxOZW9uIDd8TmVyb24gN3xLYW5keXxTY2FwZXxTYXBoeXIgN3xSZWJlbHxCaW94fFJlYmVsfFJlYmVsIDhHQnxNeXN0fERyYWNvIDd8TXlzdHxUYWI3LTAwNHxNeXN0fFRhZGVvIEpvbmVzfFRhYmxldCBCb2luZ3xBcnJvd3xEcmFjbyBEdWFsIENhbXxBdXJpeHxNaW50fEFtaXR5fFJldm9sdXRpb258RmluaXR5IDl8TmVvbiA5fFQ5d3xBbWl0eSA0R0IgRHVhbCBDYW18U3RvbmUgNEdCfFN0b25lIDhHQnxBbmRyb21lZGF8U2lsa2VufFgyfEFuZHJvbWVkYSBJSXxIYWxsZXl8RmxhbWV8U2FwaHlyIDksN3xUb3VjaCA4fFBsYW5ldHxUcml0b258VW5pcXVlIDEwfEhleGVuIDEwfE1lbXBoaXMgNEdCfE1lbXBoaXMgOEdCfE9uaXggMTApIixGWDJUYWJsZXQ6IkZYMiBQQUQ3fEZYMiBQQUQxMCIsWG9yb1RhYmxldDoiS2lkc1BBRCA3MDF8UEFEWyBdPzcxMnxQQURbIF0/NzE0fFBBRFsgXT83MTZ8UEFEWyBdPzcxN3xQQURbIF0/NzE4fFBBRFsgXT83MjB8UEFEWyBdPzcyMXxQQURbIF0/NzIyfFBBRFsgXT83OTB8UEFEWyBdPzc5MnxQQURbIF0/OTAwfFBBRFsgXT85NzE1RHxQQURbIF0/OTcxNkRSfFBBRFsgXT85NzE4RFJ8UEFEWyBdPzk3MTlRUnxQQURbIF0/OTcyMFFSfFRlbGVQQUQxMDMwfFRlbGVwYWQxMDMyfFRlbGVQQUQ3MzB8VGVsZVBBRDczMXxUZWxlUEFENzMyfFRlbGVQQUQ3MzVRfFRlbGVQQUQ4MzB8VGVsZVBBRDk3MzB8VGVsZVBBRDc5NXxNZWdhUEFEIDEzMzF8TWVnYVBBRCAxODUxfE1lZ2FQQUQgMjE1MSIsVmlld3NvbmljVGFibGV0OiJWaWV3UGFkIDEwcGl8Vmlld1BhZCAxMGV8Vmlld1BhZCAxMHN8Vmlld1BhZCBFNzJ8Vmlld1BhZDd8Vmlld1BhZCBFMTAwfFZpZXdQYWQgN2V8Vmlld1NvbmljIFZCNzMzfFZCMTAwYSIsVmVyaXpvblRhYmxldDoiUVRBUVozfFFUQUlSN3xRVEFRVFozfFFUQVNVTjF8UVRBU1VOMnxRVEFYSUExIixPZHlzVGFibGV0OiJMT09YfFhFTk8xMHxPRFlTWyAtXShTcGFjZXxFVk98WHByZXNzfE5PT04pfFxcYlhFTElPXFxifFhlbGlvMTBQcm98WEVMSU83UEhPTkVUQUJ8WEVMSU8xMEVYVFJFTUV8WEVMSU9QVDJ8TkVPX1FVQUQxMCIsQ2FwdGl2YVRhYmxldDoiQ0FQVElWQSBQQUQiLEljb25iaXRUYWJsZXQ6Ik5ldFRBQnxOVC0zNzAyfE5ULTM3MDJTfE5ULTM3MDJTfE5ULTM2MDNQfE5ULTM2MDNQfE5ULTA3MDRTfE5ULTA3MDRTfE5ULTM4MDVDfE5ULTM4MDVDfE5ULTA4MDZDfE5ULTA4MDZDfE5ULTA5MDlUfE5ULTA5MDlUfE5ULTA5MDdTfE5ULTA5MDdTfE5ULTA5MDJTfE5ULTA5MDJTIixUZWNsYXN0VGFibGV0OiJUOTggNEd8XFxiUDgwXFxifFxcYlg5MEhEXFxifFg5OCBBaXJ8WDk4IEFpciAzR3xcXGJYODlcXGJ8UDgwIDNHfFxcYlg4MGhcXGJ8UDk4IEFpcnxcXGJYODlIRFxcYnxQOTggM0d8XFxiUDkwSERcXGJ8UDg5IDNHfFg5OCAzR3xcXGJQNzBoXFxifFA3OUhEIDNHfEcxOGQgM0d8XFxiUDc5SERcXGJ8XFxiUDg5c1xcYnxcXGJBODhcXGJ8XFxiUDEwSERcXGJ8XFxiUDE5SERcXGJ8RzE4IDNHfFxcYlA3OEhEXFxifFxcYkE3OFxcYnxcXGJQNzVcXGJ8RzE3cyAzR3xHMTdoIDNHfFxcYlA4NXRcXGJ8XFxiUDkwXFxifFxcYlAxMVxcYnxcXGJQOTh0XFxifFxcYlA5OEhEXFxifFxcYkcxOGRcXGJ8XFxiUDg1c1xcYnxcXGJQMTFIRFxcYnxcXGJQODhzXFxifFxcYkE4MEhEXFxifFxcYkE4MHNlXFxifFxcYkExMGhcXGJ8XFxiUDg5XFxifFxcYlA3OHNcXGJ8XFxiRzE4XFxifFxcYlA4NVxcYnxcXGJBNzBoXFxifFxcYkE3MFxcYnxcXGJHMTdcXGJ8XFxiUDE4XFxifFxcYkE4MHNcXGJ8XFxiQTExc1xcYnxcXGJQODhIRFxcYnxcXGJBODBoXFxifFxcYlA3NnNcXGJ8XFxiUDc2aFxcYnxcXGJQOThcXGJ8XFxiQTEwSERcXGJ8XFxiUDc4XFxifFxcYlA4OFxcYnxcXGJBMTFcXGJ8XFxiQTEwdFxcYnxcXGJQNzZhXFxifFxcYlA3NnRcXGJ8XFxiUDc2ZVxcYnxcXGJQODVIRFxcYnxcXGJQODVhXFxifFxcYlA4NlxcYnxcXGJQNzVIRFxcYnxcXGJQNzZ2XFxifFxcYkExMlxcYnxcXGJQNzVhXFxifFxcYkExNVxcYnxcXGJQNzZUaVxcYnxcXGJQODFIRFxcYnxcXGJBMTBcXGJ8XFxiVDc2MFZFXFxifFxcYlQ3MjBIRFxcYnxcXGJQNzZcXGJ8XFxiUDczXFxifFxcYlA3MVxcYnxcXGJQNzJcXGJ8XFxiVDcyMFNFXFxifFxcYkM1MjBUaVxcYnxcXGJUNzYwXFxifFxcYlQ3MjBWRVxcYnxUNzIwLTNHRXxUNzIwLVdpRmkiLE9uZGFUYWJsZXQ6IlxcYihWOTc1aXxWaTMwfFZYNTMwfFY3MDF8Vmk2MHxWNzAxc3xWaTUwfFY4MDFzfFY3MTl8Vng2MTB3fFZYNjEwV3xWODE5aXxWaTEwfFZYNTgwV3xWaTEwfFY3MTFzfFY4MTN8VjgxMXxWODIwd3xWODIwfFZpMjB8VjcxMXxWSTMwV3xWNzEyfFY4OTF3fFY5NzJ8VjgxOXd8VjgyMHd8Vmk2MHxWODIwd3xWNzExfFY4MTNzfFY4MDF8VjgxOXxWOTc1c3xWODAxfFY4MTl8VjgxOXxWODE4fFY4MTF8VjcxMnxWOTc1bXxWMTAxd3xWOTYxd3xWODEyfFY4MTh8Vjk3MXxWOTcxc3xWOTE5fFY5ODl8VjExNnd8VjEwMnd8Vjk3M3xWaTQwKVxcYltcXHNdK3xWMTAgXFxiNEdcXGIiLEpheXRlY2hUYWJsZXQ6IlRQQy1QQTc2MiIsQmxhdXB1bmt0VGFibGV0OiJFbmRlYXZvdXIgODAwTkd8RW5kZWF2b3VyIDEwMTAiLERpZ21hVGFibGV0OiJcXGIoaUR4MTB8aUR4OXxpRHg4fGlEeDd8aUR4RDd8aUR4RDh8aURzUTh8aURzUTd8aURzUTh8aURzRDEwfGlEbkQ3fDNUUzgwNEh8aURzUTExfGlEajd8aURzMTApXFxiIixFdm9saW9UYWJsZXQ6IkFSSUFfTWluaV93aWZpfEFyaWFbIF9dTWluaXxFdm9saW8gWDEwfEV2b2xpbyBYN3xFdm9saW8gWDh8XFxiRXZvdGFiXFxifFxcYk5ldXJhXFxiIixMYXZhVGFibGV0OiJRUEFEIEU3MDR8XFxiSXZvcnlTXFxifEUtVEFCIElWT1JZfFxcYkUtVEFCXFxiIixBb2NUYWJsZXQ6Ik1XMDgxMXxNVzA4MTJ8TVcwOTIyfE1USzgzODJ8TVcxMDMxfE1XMDgzMXxNVzA4MjF8TVcwOTMxfE1XMDcxMiIsTXBtYW5UYWJsZXQ6Ik1QMTEgT0NUQXxNUDEwIE9DVEF8TVBRQzExMTR8TVBRQzEwMDR8TVBRQzk5NHxNUFFDOTc0fE1QUUM5NzN8TVBRQzgwNHxNUFFDNzg0fE1QUUM3ODB8XFxiTVBHN1xcYnxNUERDRzc1fE1QRENHNzF8TVBEQzEwMDZ8TVAxMDFEQ3xNUERDOTAwMHxNUERDOTA1fE1QREM3MDZIRHxNUERDNzA2fE1QREM3MDV8TVBEQzExMHxNUERDMTAwfE1QREM5OXxNUERDOTd8TVBEQzg4fE1QREM4fE1QREM3N3xNUDcwOXxNSUQ3MDF8TUlENzExfE1JRDE3MHxNUERDNzAzfE1QUUMxMDEwIixDZWxrb25UYWJsZXQ6IkNUNjk1fENUODg4fENUW1xcc10/OTEwfENUNyBUYWJ8Q1Q5IFRhYnxDVDMgVGFifENUMiBUYWJ8Q1QxIFRhYnxDODIwfEM3MjB8XFxiQ1QtMVxcYiIsV29sZGVyVGFibGV0OiJtaVRhYiBcXGIoRElBTU9ORHxTUEFDRXxCUk9PS0xZTnxORU98RkxZfE1BTkhBVFRBTnxGVU5LfEVWT0xVVElPTnxTS1l8R09DQVJ8SVJPTnxHRU5JVVN8UE9QfE1JTlR8RVBTSUxPTnxCUk9BRFdBWXxKVU1QfEhPUHxMRUdFTkR8TkVXIEFHRXxMSU5FfEFEVkFOQ0V8RkVFTHxGT0xMT1d8TElLRXxMSU5LfExJVkV8VEhJTkt8RlJFRURPTXxDSElDQUdPfENMRVZFTEFORHxCQUxUSU1PUkUtR0h8SU9XQXxCT1NUT058U0VBVFRMRXxQSE9FTklYfERBTExBU3xJTiAxMDF8TWFzdGVyQ2hlZilcXGIiLE1lZGlhY29tVGFibGV0OiJNLU1QSTEwQzNHfE0tU1AxMEVHfE0tU1AxMEVHUHxNLVNQMTBIWEFIfE0tU1A3SFhBSHxNLVNQMTBIWEJIfE0tU1A4SFhBSHxNLVNQOE1YQSIsTWlUYWJsZXQ6IlxcYk1JIFBBRFxcYnxcXGJITSBOT1RFIDFXXFxiIixOaWJpcnVUYWJsZXQ6Ik5pYmlydSBNMXxOaWJpcnUgSnVwaXRlciBPbmUiLE5leG9UYWJsZXQ6Ik5FWE8gTk9WQXxORVhPIDEwfE5FWE8gQVZJT3xORVhPIEZSRUV8TkVYTyBHT3xORVhPIEVWT3xORVhPIDNHfE5FWE8gU01BUlR8TkVYTyBLSURET3xORVhPIE1PQkkiLExlYWRlclRhYmxldDoiVEJMVDEwUXxUQkxUMTBJfFRCTC0xMFdES0J8VEJMLTEwV0RLQk8yMDEzfFRCTC1XMjMwVjJ8VEJMLVc0NTB8VEJMLVc1MDB8U1Y1NzJ8VEJMVDdJfFRCQS1BQzctOEd8VEJMVDc5fFRCTC04VzE2fFRCTC0xMFczMnxUQkwtMTBXS0J8VEJMLVcxMDAiLFViaXNsYXRlVGFibGV0OiJVYmlTbGF0ZVtcXHNdPzdDIixQb2NrZXRCb29rVGFibGV0OiJQb2NrZXRib29rIixLb2Nhc29UYWJsZXQ6IlxcYihUQi0xMjA3KVxcYiIsSGlzZW5zZVRhYmxldDoiXFxiKEY1MjgxfEUyMzcxKVxcYiIsSHVkbDoiSHVkbCBIVDdTM3xIdWRsIDIiLFRlbHN0cmFUYWJsZXQ6IlQtSHViMiIsR2VuZXJpY1RhYmxldDoiQW5kcm9pZC4qXFxiOTdEXFxifFRhYmxldCg/IS4qUEMpfEJOVFYyNTBBfE1JRC1XQ0RNQXxMb2dpY1BEIFpvb20yfFxcYkE3RUJcXGJ8Q2F0Tm92YTh8QTFfMDd8Q1Q3MDR8Q1QxMDAyfFxcYk03MjFcXGJ8cmszMHNka3xcXGJFVk9UQUJcXGJ8TTc1OEF8RVQ5MDR8QUxVTUlVTTEwfFNtYXJ0ZnJlbiBUYWJ8RW5kZWF2b3VyIDEwMTB8VGFibGV0LVBDLTR8VGFnaSBUYWJ8XFxiTTZwcm9cXGJ8Q1QxMDIwV3xhcmMgMTBIRHxcXGJUUDc1MFxcYnxcXGJRVEFRWjNcXGJ8V1ZUMTAxfFRNMTA4OHxLVDEwNyJ9LG9zczp7QW5kcm9pZE9TOiJBbmRyb2lkIixCbGFja0JlcnJ5T1M6ImJsYWNrYmVycnl8XFxiQkIxMFxcYnxyaW0gdGFibGV0IG9zIixQYWxtT1M6IlBhbG1PU3xhdmFudGdvfGJsYXplcnxlbGFpbmV8aGlwdG9wfHBhbG18cGx1Y2tlcnx4aWlubyIsU3ltYmlhbk9TOiJTeW1iaWFufFN5bWJPU3xTZXJpZXM2MHxTZXJpZXM0MHxTWUItWzAtOV0rfFxcYlM2MFxcYiIsV2luZG93c01vYmlsZU9TOiJXaW5kb3dzIENFLiooUFBDfFNtYXJ0cGhvbmV8TW9iaWxlfFswLTldezN9eFswLTldezN9KXxXaW5kb3dzIE1vYmlsZXxXaW5kb3dzIFBob25lIFswLTkuXSt8V0NFOyIsV2luZG93c1Bob25lT1M6IldpbmRvd3MgUGhvbmUgMTAuMHxXaW5kb3dzIFBob25lIDguMXxXaW5kb3dzIFBob25lIDguMHxXaW5kb3dzIFBob25lIE9TfFhCTFdQN3xadW5lV1A3fFdpbmRvd3MgTlQgNi5bMjNdOyBBUk07IixpT1M6IlxcYmlQaG9uZS4qTW9iaWxlfFxcYmlQb2R8XFxiaVBhZHxBcHBsZUNvcmVNZWRpYSIsaVBhZE9TOiJDUFUgT1MgMTMiLFNhaWxmaXNoT1M6IlNhaWxmaXNoIixNZWVHb09TOiJNZWVHbyIsTWFlbW9PUzoiTWFlbW8iLEphdmFPUzoiSjJNRS98XFxiTUlEUFxcYnxcXGJDTERDXFxiIix3ZWJPUzoid2ViT1N8aHB3T1MiLGJhZGFPUzoiXFxiQmFkYVxcYiIsQlJFV09TOiJCUkVXIn0sdWFzOntDaHJvbWU6IlxcYkNyTW9cXGJ8Q3JpT1N8QW5kcm9pZC4qQ2hyb21lL1suMC05XSogKE1vYmlsZSk/IixEb2xmaW46IlxcYkRvbGZpblxcYiIsT3BlcmE6Ik9wZXJhLipNaW5pfE9wZXJhLipNb2JpfEFuZHJvaWQuKk9wZXJhfE1vYmlsZS4qT1BSL1swLTkuXSskfENvYXN0L1swLTkuXSsiLFNreWZpcmU6IlNreWZpcmUiLEVkZ2U6IlxcYkVkZ2lPU1xcYnxNb2JpbGUgU2FmYXJpL1suMC05XSogRWRnZSIsSUU6IklFTW9iaWxlfE1TSUVNb2JpbGUiLEZpcmVmb3g6ImZlbm5lY3xmaXJlZm94LiptYWVtb3woTW9iaWxlfFRhYmxldCkuKkZpcmVmb3h8RmlyZWZveC4qTW9iaWxlfEZ4aU9TIixCb2x0OiJib2x0IixUZWFTaGFyazoidGVhc2hhcmsiLEJsYXplcjoiQmxhemVyIixTYWZhcmk6IlZlcnNpb24oKD8hXFxiRWRnaU9TXFxiKS4pKk1vYmlsZS4qU2FmYXJpfFNhZmFyaS4qTW9iaWxlfE1vYmlsZVNhZmFyaSIsV2VDaGF0OiJcXGJNaWNyb01lc3NlbmdlclxcYiIsVUNCcm93c2VyOiJVQy4qQnJvd3NlcnxVQ1dFQiIsYmFpZHVib3hhcHA6ImJhaWR1Ym94YXBwIixiYWlkdWJyb3dzZXI6ImJhaWR1YnJvd3NlciIsRGlpZ29Ccm93c2VyOiJEaWlnb0Jyb3dzZXIiLE1lcmN1cnk6IlxcYk1lcmN1cnlcXGIiLE9iaWdvQnJvd3NlcjoiT2JpZ28iLE5ldEZyb250OiJORi1Ccm93c2VyIixHZW5lcmljQnJvd3NlcjoiTm9raWFCcm93c2VyfE92aUJyb3dzZXJ8T25lQnJvd3NlcnxUd29ua3lCZWFtQnJvd3NlcnxTRU1DLipCcm93c2VyfEZseUZsb3d8TWluaW1vfE5ldEZyb250fE5vdmFycmEtVmlzaW9ufE1RUUJyb3dzZXJ8TWljcm9NZXNzZW5nZXIiLFBhbGVNb29uOiJBbmRyb2lkLipQYWxlTW9vbnxNb2JpbGUuKlBhbGVNb29uIn0scHJvcHM6e01vYmlsZToiTW9iaWxlL1tWRVJdIixCdWlsZDoiQnVpbGQvW1ZFUl0iLFZlcnNpb246IlZlcnNpb24vW1ZFUl0iLFZlbmRvcklEOiJWZW5kb3JJRC9bVkVSXSIsaVBhZDoiaVBhZC4qQ1BVW2EteiBdK1tWRVJdIixpUGhvbmU6ImlQaG9uZS4qQ1BVW2EteiBdK1tWRVJdIixpUG9kOiJpUG9kLipDUFVbYS16IF0rW1ZFUl0iLEtpbmRsZToiS2luZGxlL1tWRVJdIixDaHJvbWU6WyJDaHJvbWUvW1ZFUl0iLCJDcmlPUy9bVkVSXSIsIkNyTW8vW1ZFUl0iXSxDb2FzdDpbIkNvYXN0L1tWRVJdIl0sRG9sZmluOiJEb2xmaW4vW1ZFUl0iLEZpcmVmb3g6WyJGaXJlZm94L1tWRVJdIiwiRnhpT1MvW1ZFUl0iXSxGZW5uZWM6IkZlbm5lYy9bVkVSXSIsRWRnZToiRWRnZS9bVkVSXSIsSUU6WyJJRU1vYmlsZS9bVkVSXTsiLCJJRU1vYmlsZSBbVkVSXSIsIk1TSUUgW1ZFUl07IiwiVHJpZGVudC9bMC05Ll0rOy4qcnY6W1ZFUl0iXSxOZXRGcm9udDoiTmV0RnJvbnQvW1ZFUl0iLE5va2lhQnJvd3NlcjoiTm9raWFCcm93c2VyL1tWRVJdIixPcGVyYTpbIiBPUFIvW1ZFUl0iLCJPcGVyYSBNaW5pL1tWRVJdIiwiVmVyc2lvbi9bVkVSXSJdLCJPcGVyYSBNaW5pIjoiT3BlcmEgTWluaS9bVkVSXSIsIk9wZXJhIE1vYmkiOiJWZXJzaW9uL1tWRVJdIixVQ0Jyb3dzZXI6WyJVQ1dFQltWRVJdIiwiVUMuKkJyb3dzZXIvW1ZFUl0iXSxNUVFCcm93c2VyOiJNUVFCcm93c2VyL1tWRVJdIixNaWNyb01lc3NlbmdlcjoiTWljcm9NZXNzZW5nZXIvW1ZFUl0iLGJhaWR1Ym94YXBwOiJiYWlkdWJveGFwcC9bVkVSXSIsYmFpZHVicm93c2VyOiJiYWlkdWJyb3dzZXIvW1ZFUl0iLFNhbXN1bmdCcm93c2VyOiJTYW1zdW5nQnJvd3Nlci9bVkVSXSIsSXJvbjoiSXJvbi9bVkVSXSIsU2FmYXJpOlsiVmVyc2lvbi9bVkVSXSIsIlNhZmFyaS9bVkVSXSJdLFNreWZpcmU6IlNreWZpcmUvW1ZFUl0iLFRpemVuOiJUaXplbi9bVkVSXSIsV2Via2l0OiJ3ZWJraXRbIC9dW1ZFUl0iLFBhbGVNb29uOiJQYWxlTW9vbi9bVkVSXSIsU2FpbGZpc2hCcm93c2VyOiJTYWlsZmlzaEJyb3dzZXIvW1ZFUl0iLEdlY2tvOiJHZWNrby9bVkVSXSIsVHJpZGVudDoiVHJpZGVudC9bVkVSXSIsUHJlc3RvOiJQcmVzdG8vW1ZFUl0iLEdvYW5uYToiR29hbm5hL1tWRVJdIixpT1M6IiBcXGJpP09TXFxiIFtWRVJdWyA7XXsxfSIsQW5kcm9pZDoiQW5kcm9pZCBbVkVSXSIsU2FpbGZpc2g6IlNhaWxmaXNoIFtWRVJdIixCbGFja0JlcnJ5OlsiQmxhY2tCZXJyeVtcXHddKy9bVkVSXSIsIkJsYWNrQmVycnkuKlZlcnNpb24vW1ZFUl0iLCJWZXJzaW9uL1tWRVJdIl0sQlJFVzoiQlJFVyBbVkVSXSIsSmF2YToiSmF2YS9bVkVSXSIsIldpbmRvd3MgUGhvbmUgT1MiOlsiV2luZG93cyBQaG9uZSBPUyBbVkVSXSIsIldpbmRvd3MgUGhvbmUgW1ZFUl0iXSwiV2luZG93cyBQaG9uZSI6IldpbmRvd3MgUGhvbmUgW1ZFUl0iLCJXaW5kb3dzIENFIjoiV2luZG93cyBDRS9bVkVSXSIsIldpbmRvd3MgTlQiOiJXaW5kb3dzIE5UIFtWRVJdIixTeW1iaWFuOlsiU3ltYmlhbk9TL1tWRVJdIiwiU3ltYmlhbi9bVkVSXSJdLHdlYk9TOlsid2ViT1MvW1ZFUl0iLCJocHdPUy9bVkVSXTsiXX0sdXRpbHM6e0JvdDoiR29vZ2xlYm90fGZhY2Vib29rZXh0ZXJuYWxoaXR8R29vZ2xlLUFNUEhUTUx8c35hbXAtdmFsaWRhdG9yfEFkc0JvdC1Hb29nbGV8R29vZ2xlIEtleXdvcmQgU3VnZ2VzdGlvbnxGYWNlYm90fFlhbmRleEJvdHxZYW5kZXhNb2JpbGVCb3R8YmluZ2JvdHxpYV9hcmNoaXZlcnxBaHJlZnNCb3R8RXpvb21zfEdTTEZib3R8V0JTZWFyY2hCb3R8VHdpdHRlcmJvdHxUd2VldG1lbWVCb3R8VHdpa2xlfFBhcGVyTGlCb3R8V290Ym94fFVud2luZEZldGNob3J8RXhhYm90fE1KMTJib3R8WWFuZGV4SW1hZ2VzfFR1cm5pdGluQm90fFBpbmdkb218Y29udGVudGtpbmdhcHB8QXNwaWVnZWxCb3QiLE1vYmlsZUJvdDoiR29vZ2xlYm90LU1vYmlsZXxBZHNCb3QtR29vZ2xlLU1vYmlsZXxZYWhvb1NlZWtlci9NMUExLVIyRDIiLERlc2t0b3BNb2RlOiJXUERlc2t0b3AiLFRWOiJTb255RFRWfEhiYlRWIixXZWJLaXQ6Iih3ZWJraXQpWyAvXShbXFx3Ll0rKSIsQ29uc29sZToiXFxiKE5pbnRlbmRvfE5pbnRlbmRvIFdpaVV8TmludGVuZG8gM0RTfE5pbnRlbmRvIFN3aXRjaHxQTEFZU1RBVElPTnxYYm94KVxcYiIsV2F0Y2g6IlNNLVY3MDAifX0sZy5kZXRlY3RNb2JpbGVCcm93c2Vycz17ZnVsbFBhdHRlcm46LyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vL2ksDQpzaG9ydFBhdHRlcm46LzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1wtKG58dSl8YzU1XC98Y2FwaXxjY3dhfGNkbVwtfGNlbGx8Y2h0bXxjbGRjfGNtZFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXC01fGdcLW1vfGdvKFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFwtKG18cHx0KXxoZWlcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXC1jfGh0KGMoXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XC18XC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XC8pfGtsb258a3B0IHxrd2NcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XC8oa3xsfHUpfDUwfDU0fFwtW2Etd10pfGxpYnd8bHlueHxtMVwtd3xtM2dhfG01MFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XC1nfHFhXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFwtWzItN118aVwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXC18b298cFwtKXxzZGtcL3xzZShjKFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFwtfHNoYXJ8c2llKFwtfG0pfHNrXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcLXx2XC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcLXx0ZGdcLXx0ZWwoaXxtKXx0aW1cLXx0XC1tb3x0byhwbHxzaCl8dHMoNzB8bVwtfG0zfG01KXx0eFwtOXx1cChcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcLXx5b3VyfHpldG98enRlXC0vaSx0YWJsZXRQYXR0ZXJuOi9hbmRyb2lkfGlwYWR8cGxheWJvb2t8c2lsay9pfTt2YXIgaCxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7cmV0dXJuIGcuRkFMTEJBQ0tfUEhPTkU9IlVua25vd25QaG9uZSIsZy5GQUxMQkFDS19UQUJMRVQ9IlVua25vd25UYWJsZXQiLGcuRkFMTEJBQ0tfTU9CSUxFPSJVbmtub3duTW9iaWxlIixoPSJpc0FycmF5ImluIEFycmF5P0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX0sZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGosaz1nLm1vYmlsZURldGVjdFJ1bGVzO2ZvcihhIGluIGsucHJvcHMpaWYoaS5jYWxsKGsucHJvcHMsYSkpe2ZvcihiPWsucHJvcHNbYV0saChiKXx8KGI9W2JdKSxmPWIubGVuZ3RoLGU9MDtlPGY7KytlKWM9YltlXSxqPWMuaW5kZXhPZigiW1ZFUl0iKSxqPj0wJiYoYz1jLnN1YnN0cmluZygwLGopKyIoW1xcdy5fXFwrXSspIitjLnN1YnN0cmluZyhqKzUpKSxiW2VdPW5ldyBSZWdFeHAoYywiaSIpO2sucHJvcHNbYV09Yn1kKGsub3NzKSxkKGsucGhvbmVzKSxkKGsudGFibGV0cyksZChrLnVhcyksZChrLnV0aWxzKSxrLm9zczA9e1dpbmRvd3NQaG9uZU9TOmsub3NzLldpbmRvd3NQaG9uZU9TLFdpbmRvd3NNb2JpbGVPUzprLm9zcy5XaW5kb3dzTW9iaWxlT1N9fSgpLGcuZmluZE1hdGNoPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIGEpaWYoaS5jYWxsKGEsYykmJmFbY10udGVzdChiKSlyZXR1cm4gYztyZXR1cm4gbnVsbH0sZy5maW5kTWF0Y2hlcz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcih2YXIgZCBpbiBhKWkuY2FsbChhLGQpJiZhW2RdLnRlc3QoYikmJmMucHVzaChkKTtyZXR1cm4gY30sZy5nZXRWZXJzaW9uU3RyPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsaD1nLm1vYmlsZURldGVjdFJ1bGVzLnByb3BzO2lmKGkuY2FsbChoLGEpKWZvcihjPWhbYV0sZT1jLmxlbmd0aCxkPTA7ZDxlOysrZClpZihmPWNbZF0uZXhlYyhiKSxudWxsIT09ZilyZXR1cm4gZlsxXTtyZXR1cm4gbnVsbH0sZy5nZXRWZXJzaW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zy5nZXRWZXJzaW9uU3RyKGEsYik7cmV0dXJuIGM/Zy5wcmVwYXJlVmVyc2lvbk5vKGMpOk5hTn0sZy5wcmVwYXJlVmVyc2lvbk5vPWZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBiPWEuc3BsaXQoL1thLXouXyBcL1wtXS9pKSwxPT09Yi5sZW5ndGgmJihhPWJbMF0pLGIubGVuZ3RoPjEmJihhPWJbMF0rIi4iLGIuc2hpZnQoKSxhKz1iLmpvaW4oIiIpKSxOdW1iZXIoYSl9LGcuaXNNb2JpbGVGYWxsYmFjaz1mdW5jdGlvbihhKXtyZXR1cm4gZy5kZXRlY3RNb2JpbGVCcm93c2Vycy5mdWxsUGF0dGVybi50ZXN0KGEpfHxnLmRldGVjdE1vYmlsZUJyb3dzZXJzLnNob3J0UGF0dGVybi50ZXN0KGEuc3Vic3RyKDAsNCkpfSxnLmlzVGFibGV0RmFsbGJhY2s9ZnVuY3Rpb24oYSl7cmV0dXJuIGcuZGV0ZWN0TW9iaWxlQnJvd3NlcnMudGFibGV0UGF0dGVybi50ZXN0KGEpfSxnLnByZXBhcmVEZXRlY3Rpb25DYWNoZT1mdW5jdGlvbihhLGMsZCl7aWYoYS5tb2JpbGU9PT1iKXt2YXIgZSxoLGk7cmV0dXJuKGg9Zy5maW5kTWF0Y2goZy5tb2JpbGVEZXRlY3RSdWxlcy50YWJsZXRzLGMpKT8oYS5tb2JpbGU9YS50YWJsZXQ9aCx2b2lkKGEucGhvbmU9bnVsbCkpOihlPWcuZmluZE1hdGNoKGcubW9iaWxlRGV0ZWN0UnVsZXMucGhvbmVzLGMpKT8oYS5tb2JpbGU9YS5waG9uZT1lLHZvaWQoYS50YWJsZXQ9bnVsbCkpOnZvaWQoZy5pc01vYmlsZUZhbGxiYWNrKGMpPyhpPWYuaXNQaG9uZVNpemVkKGQpLGk9PT1iPyhhLm1vYmlsZT1nLkZBTExCQUNLX01PQklMRSxhLnRhYmxldD1hLnBob25lPW51bGwpOmk/KGEubW9iaWxlPWEucGhvbmU9Zy5GQUxMQkFDS19QSE9ORSxhLnRhYmxldD1udWxsKTooYS5tb2JpbGU9YS50YWJsZXQ9Zy5GQUxMQkFDS19UQUJMRVQsYS5waG9uZT1udWxsKSk6Zy5pc1RhYmxldEZhbGxiYWNrKGMpPyhhLm1vYmlsZT1hLnRhYmxldD1nLkZBTExCQUNLX1RBQkxFVCxhLnBob25lPW51bGwpOmEubW9iaWxlPWEudGFibGV0PWEucGhvbmU9bnVsbCl9fSxnLm1vYmlsZUdyYWRlPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGwhPT1hLm1vYmlsZSgpO3JldHVybiBhLm9zKCJpT1MiKSYmYS52ZXJzaW9uKCJpUGFkIik+PTQuM3x8YS5vcygiaU9TIikmJmEudmVyc2lvbigiaVBob25lIik+PTMuMXx8YS5vcygiaU9TIikmJmEudmVyc2lvbigiaVBvZCIpPj0zLjF8fGEudmVyc2lvbigiQW5kcm9pZCIpPjIuMSYmYS5pcygiV2Via2l0Iil8fGEudmVyc2lvbigiV2luZG93cyBQaG9uZSBPUyIpPj03fHxhLmlzKCJCbGFja0JlcnJ5IikmJmEudmVyc2lvbigiQmxhY2tCZXJyeSIpPj02fHxhLm1hdGNoKCJQbGF5Ym9vay4qVGFibGV0Iil8fGEudmVyc2lvbigid2ViT1MiKT49MS40JiZhLm1hdGNoKCJQYWxtfFByZXxQaXhpIil8fGEubWF0Y2goImhwLipUb3VjaFBhZCIpfHxhLmlzKCJGaXJlZm94IikmJmEudmVyc2lvbigiRmlyZWZveCIpPj0xMnx8YS5pcygiQ2hyb21lIikmJmEuaXMoIkFuZHJvaWRPUyIpJiZhLnZlcnNpb24oIkFuZHJvaWQiKT49NHx8YS5pcygiU2t5ZmlyZSIpJiZhLnZlcnNpb24oIlNreWZpcmUiKT49NC4xJiZhLmlzKCJBbmRyb2lkT1MiKSYmYS52ZXJzaW9uKCJBbmRyb2lkIik+PTIuM3x8YS5pcygiT3BlcmEiKSYmYS52ZXJzaW9uKCJPcGVyYSBNb2JpIik+MTEmJmEuaXMoIkFuZHJvaWRPUyIpfHxhLmlzKCJNZWVHb09TIil8fGEuaXMoIlRpemVuIil8fGEuaXMoIkRvbGZpbiIpJiZhLnZlcnNpb24oIkJhZGEiKT49Mnx8KGEuaXMoIlVDIEJyb3dzZXIiKXx8YS5pcygiRG9sZmluIikpJiZhLnZlcnNpb24oIkFuZHJvaWQiKT49Mi4zfHxhLm1hdGNoKCJLaW5kbGUgRmlyZSIpfHxhLmlzKCJLaW5kbGUiKSYmYS52ZXJzaW9uKCJLaW5kbGUiKT49M3x8YS5pcygiQW5kcm9pZE9TIikmJmEuaXMoIk5vb2tUYWJsZXQiKXx8YS52ZXJzaW9uKCJDaHJvbWUiKT49MTEmJiFifHxhLnZlcnNpb24oIlNhZmFyaSIpPj01JiYhYnx8YS52ZXJzaW9uKCJGaXJlZm94Iik+PTQmJiFifHxhLnZlcnNpb24oIk1TSUUiKT49NyYmIWJ8fGEudmVyc2lvbigiT3BlcmEiKT49MTAmJiFiPyJBIjphLm9zKCJpT1MiKSYmYS52ZXJzaW9uKCJpUGFkIik8NC4zfHxhLm9zKCJpT1MiKSYmYS52ZXJzaW9uKCJpUGhvbmUiKTwzLjF8fGEub3MoImlPUyIpJiZhLnZlcnNpb24oImlQb2QiKTwzLjF8fGEuaXMoIkJsYWNrYmVycnkiKSYmYS52ZXJzaW9uKCJCbGFja0JlcnJ5Iik+PTUmJmEudmVyc2lvbigiQmxhY2tCZXJyeSIpPDZ8fGEudmVyc2lvbigiT3BlcmEgTWluaSIpPj01JiZhLnZlcnNpb24oIk9wZXJhIE1pbmkiKTw9Ni41JiYoYS52ZXJzaW9uKCJBbmRyb2lkIik+PTIuM3x8YS5pcygiaU9TIikpfHxhLm1hdGNoKCJOb2tpYU44fE5va2lhQzd8Tjk3LipTZXJpZXM2MHxTeW1iaWFuLzMiKXx8YS52ZXJzaW9uKCJPcGVyYSBNb2JpIik+PTExJiZhLmlzKCJTeW1iaWFuT1MiKT8iQiI6KGEudmVyc2lvbigiQmxhY2tCZXJyeSIpPDV8fGEubWF0Y2goIk1TSUVNb2JpbGV8V2luZG93cyBDRS4qTW9iaWxlIil8fGEudmVyc2lvbigiV2luZG93cyBNb2JpbGUiKTw9NS4yLCJDIil9LGcuZGV0ZWN0T1M9ZnVuY3Rpb24oYSl7cmV0dXJuIGcuZmluZE1hdGNoKGcubW9iaWxlRGV0ZWN0UnVsZXMub3NzMCxhKXx8Zy5maW5kTWF0Y2goZy5tb2JpbGVEZXRlY3RSdWxlcy5vc3MsYSl9LGcuZ2V0RGV2aWNlU21hbGxlclNpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnNjcmVlbi53aWR0aDx3aW5kb3cuc2NyZWVuLmhlaWdodD93aW5kb3cuc2NyZWVuLndpZHRoOndpbmRvdy5zY3JlZW4uaGVpZ2h0fSxmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zixtb2JpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZy5wcmVwYXJlRGV0ZWN0aW9uQ2FjaGUodGhpcy5fY2FjaGUsdGhpcy51YSx0aGlzLm1heFBob25lV2lkdGgpLHRoaXMuX2NhY2hlLm1vYmlsZX0scGhvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gZy5wcmVwYXJlRGV0ZWN0aW9uQ2FjaGUodGhpcy5fY2FjaGUsdGhpcy51YSx0aGlzLm1heFBob25lV2lkdGgpLHRoaXMuX2NhY2hlLnBob25lfSx0YWJsZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5wcmVwYXJlRGV0ZWN0aW9uQ2FjaGUodGhpcy5fY2FjaGUsdGhpcy51YSx0aGlzLm1heFBob25lV2lkdGgpLHRoaXMuX2NhY2hlLnRhYmxldH0sdXNlckFnZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlLnVzZXJBZ2VudD09PWImJih0aGlzLl9jYWNoZS51c2VyQWdlbnQ9Zy5maW5kTWF0Y2goZy5tb2JpbGVEZXRlY3RSdWxlcy51YXMsdGhpcy51YSkpLHRoaXMuX2NhY2hlLnVzZXJBZ2VudH0sdXNlckFnZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZS51c2VyQWdlbnRzPT09YiYmKHRoaXMuX2NhY2hlLnVzZXJBZ2VudHM9Zy5maW5kTWF0Y2hlcyhnLm1vYmlsZURldGVjdFJ1bGVzLnVhcyx0aGlzLnVhKSksdGhpcy5fY2FjaGUudXNlckFnZW50c30sb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGUub3M9PT1iJiYodGhpcy5fY2FjaGUub3M9Zy5kZXRlY3RPUyh0aGlzLnVhKSksdGhpcy5fY2FjaGUub3N9LHZlcnNpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGcuZ2V0VmVyc2lvbihhLHRoaXMudWEpfSx2ZXJzaW9uU3RyOmZ1bmN0aW9uKGEpe3JldHVybiBnLmdldFZlcnNpb25TdHIoYSx0aGlzLnVhKX0saXM6ZnVuY3Rpb24oYil7cmV0dXJuIGModGhpcy51c2VyQWdlbnRzKCksYil8fGEoYix0aGlzLm9zKCkpfHxhKGIsdGhpcy5waG9uZSgpKXx8YShiLHRoaXMudGFibGV0KCkpfHxjKGcuZmluZE1hdGNoZXMoZy5tb2JpbGVEZXRlY3RSdWxlcy51dGlscyx0aGlzLnVhKSxiKX0sbWF0Y2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBSZWdFeHB8fChhPW5ldyBSZWdFeHAoYSwiaSIpKSxhLnRlc3QodGhpcy51YSl9LGlzUGhvbmVTaXplZDpmdW5jdGlvbihhKXtyZXR1cm4gZi5pc1Bob25lU2l6ZWQoYXx8dGhpcy5tYXhQaG9uZVdpZHRoKX0sbW9iaWxlR3JhZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGUuZ3JhZGU9PT1iJiYodGhpcy5fY2FjaGUuZ3JhZGU9Zy5tb2JpbGVHcmFkZSh0aGlzKSksdGhpcy5fY2FjaGUuZ3JhZGV9fSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LnNjcmVlbj9mLmlzUGhvbmVTaXplZD1mdW5jdGlvbihhKXtyZXR1cm4gYTwwP2I6Zy5nZXREZXZpY2VTbWFsbGVyU2lkZSgpPD1hfTpmLmlzUGhvbmVTaXplZD1mdW5jdGlvbigpe30sZi5faW1wbD1nLGYudmVyc2lvbj0iMS40LjUgMjAyMS0wMy0xMyIsZn0pfShmdW5jdGlvbihhKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpcmV0dXJuIGZ1bmN0aW9uKGEpe21vZHVsZS5leHBvcnRzPWEoKX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClyZXR1cm4gZGVmaW5lO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXJldHVybiBmdW5jdGlvbihhKXt3aW5kb3cuTW9iaWxlRGV0ZWN0PWEoKX07dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGVudmlyb25tZW50Iil9KCkpO3ZhciBhaV9saXN0cz0hMCxhaV9ibG9ja19jbGFzc19kZWY9ImNvZGUtYmxvY2siOwpqUXVlcnkoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gQihjKXtjPWMubWF0Y2goYWEpO3JldHVybiBudWxsIT1jJiYxPGMubGVuZ3RoJiYic3RyaW5nIj09PXR5cGVvZiBjWzFdJiYwPGNbMV0ubGVuZ3RoP2NbMV0udG9Mb3dlckNhc2UoKTpudWxsfWZ1bmN0aW9uIEUoYyl7cmV0dXJuIGMuaW5jbHVkZXMoIjoiKT8oYz1jLnNwbGl0KCI6IiksMUUzKigzNjAwKnBhcnNlSW50KGNbMF0pKzYwKnBhcnNlSW50KGNbMV0pK3BhcnNlSW50KGNbMl0pKSk6bnVsbH1mdW5jdGlvbiB2KGMpe3RyeXt2YXIgaz1EYXRlLnBhcnNlKGMpO2lzTmFOKGspJiYoaz1udWxsKX1jYXRjaChHKXtrPW51bGx9aWYobnVsbD09ayYmYy5pbmNsdWRlcygiICIpKXtjPWMuc3BsaXQoIiAiKTt0cnl7az1EYXRlLnBhcnNlKGNbMF0pLGsrPUUoY1sxXSksaXNOYU4oaykmJihrPW51bGwpfWNhdGNoKEcpe2s9bnVsbH19cmV0dXJuIGt9ZnVuY3Rpb24gSCgpeyhqUXVlcnkoIiNhaS1pYWItdGNmLWJhciIpLmxlbmd0aHx8alF1ZXJ5KCIuYWktbGlzdC1tYW51YWwiKS5sZW5ndGgpJiYKImZ1bmN0aW9uIj09dHlwZW9mIF9fdGNmYXBpJiYiZnVuY3Rpb24iPT10eXBlb2YgYWlfbG9hZF9ibG9ja3MmJiJ1bmRlZmluZWQiPT10eXBlb2YgYWlfaWFiX3RjZl9jYWxsYmFja19pbnN0YWxsZWQmJihfX3RjZmFwaSgiYWRkRXZlbnRMaXN0ZW5lciIsMixmdW5jdGlvbihjLGspe2smJiJ1c2VyYWN0aW9uY29tcGxldGUiPT09Yy5ldmVudFN0YXR1cyYmKGFpX3RjRGF0YT1jLGFpX2xvYWRfYmxvY2tzKCksalF1ZXJ5KCIjYWktaWFiLXRjZi1zdGF0dXMiKS50ZXh0KCJJQUIgVENGIDIuMCBEQVRBIExPQURFRCIpLGpRdWVyeSgiI2FpLWlhYi10Y2YtYmFyIikuYWRkQ2xhc3MoInN0YXR1cy1vayIpLnJlbW92ZUNsYXNzKCJzdGF0dXMtZXJyb3IiKSl9KSxhaV9pYWJfdGNmX2NhbGxiYWNrX2luc3RhbGxlZD0hMCl9ZnVuY3Rpb24gdyhjKXtjPWA7ICR7ZG9jdW1lbnQuY29va2llfWAuc3BsaXQoYDsgJHtjfT1gKTtpZigyPT09Yy5sZW5ndGgpcmV0dXJuIGMucG9wKCkuc3BsaXQoIjsiKS5zaGlmdCgpfQpmdW5jdGlvbiBoKGMpe2lmKHcoYykpe3ZhciBrPXdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTt3KGMpJiYoZG9jdW1lbnQuY29va2llPWMrIj07cGF0aD0vIisoaz8iO2RvbWFpbj0iK2s6IiIpKyI7ZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAxIEdNVCIpO2RvY3VtZW50LmNvb2tpZT1jKyI9OyBQYXRoPS87IEV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQ7In19QXJyYXkucHJvdG90eXBlLmluY2x1ZGVzfHwoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGMpe3JldHVybiEhfnRoaXMuaW5kZXhPZihjKX0pO3ZhciBhYT1SZWdFeHAoIjpcXC9cXC8oLlteLzpdKykiLCJpIik7YWlfcHJvY2Vzc19saXN0cz1mdW5jdGlvbihjKXtmdW5jdGlvbiBrKGwsZSxkKXtpZigwPT1sLmxlbmd0aCl7aWYoIiFAISI9PWQpcmV0dXJuITA7ZSE9ZCYmKCJ0cnVlIj09ZC50b0xvd2VyQ2FzZSgpP2Q9ITA6ImZhbHNlIj09ZC50b0xvd2VyQ2FzZSgpJiYoZD0KITEpKTtyZXR1cm4gZT09ZH1pZigib2JqZWN0IiE9dHlwZW9mIGUmJiJhcnJheSIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuPWxbMF07bD1sLnNsaWNlKDEpO2lmKCIqIj09bilmb3IobGV0IFssbV1vZiBPYmplY3QuZW50cmllcyhlKSl7aWYoayhsLG0sZCkpcmV0dXJuITB9ZWxzZSBpZihuIGluIGUpcmV0dXJuIGsobCxlW25dLGQpO3JldHVybiExfWZ1bmN0aW9uIEcobCxlLGQpe2lmKCJvYmplY3QiIT10eXBlb2YgbHx8LTE9PWUuaW5kZXhPZigiWyIpKXJldHVybiExO2U9ZS5yZXBsYWNlKC9dfCAvZ2ksIiIpLnNwbGl0KCJbIik7cmV0dXJuIGsoZSxsLGQpfWZ1bmN0aW9uIGJhKCl7ImZ1bmN0aW9uIj09dHlwZW9mIF9fdGNmYXBpJiYoYSgiI2FpLWlhYi10Y2Ytc3RhdHVzIikudGV4dCgiSUFCIFRDRiAyLjAgREVURUNURUQiKSxfX3RjZmFwaSgiZ2V0VENEYXRhIiwyLGZ1bmN0aW9uKGwsZSl7ZT8oYSgiI2FpLWlhYi10Y2YtYmFyIikuYWRkQ2xhc3MoInN0YXR1cy1vayIpLCJ0Y2xvYWRlZCI9PQpsLmV2ZW50U3RhdHVzfHwidXNlcmFjdGlvbmNvbXBsZXRlIj09bC5ldmVudFN0YXR1cz8oYWlfdGNEYXRhPWwsbC5nZHByQXBwbGllcz9hKCIjYWktaWFiLXRjZi1zdGF0dXMiKS50ZXh0KCJJQUIgVENGIDIuMCBEQVRBIExPQURFRCIpOmpRdWVyeSgiI2FpLWlhYi10Y2Ytc3RhdHVzIikudGV4dCgiSUFCIFRDRiAyLjAgR0RQUiBET0VTIE5PVCBBUFBMWSIpLGEoIiNhaS1pYWItdGNmLWJhciIpLmFkZENsYXNzKCJzdGF0dXMtb2siKS5yZW1vdmVDbGFzcygic3RhdHVzLWVycm9yIiksc2V0VGltZW91dChmdW5jdGlvbigpe2FpX3Byb2Nlc3NfbGlzdHMoKX0sMTApKToiY21wdWlzaG93biI9PWwuZXZlbnRTdGF0dXMmJihhaV9jbXB1aXNob3duPSEwLGEoIiNhaS1pYWItdGNmLXN0YXR1cyIpLnRleHQoIklBQiBUQ0YgMi4wIENNUCBVSSBTSE9XTiIpLGEoIiNhaS1pYWItdGNmLWJhciIpLmFkZENsYXNzKCJzdGF0dXMtb2siKS5yZW1vdmVDbGFzcygic3RhdHVzLWVycm9yIikpKTooYSgiI2FpLWlhYi10Y2Ytc3RhdHVzIikudGV4dCgiSUFCIFRDRiAyLjAgX190Y2ZhcGkgZ2V0VENEYXRhIGZhaWxlZCIpLAphKCIjYWktaWFiLXRjZi1iYXIiKS5yZW1vdmVDbGFzcygic3RhdHVzLW9rIikuYWRkQ2xhc3MoInN0YXR1cy1lcnJvciIpKX0pKX1mdW5jdGlvbiBLKGwpeyJmdW5jdGlvbiI9PXR5cGVvZiBfX3RjZmFwaT8oInVuZGVmaW5lZCI9PXR5cGVvZiBhaV9pYWJfdGNmX2NhbGxiYWNrX2luc3RhbGxlZCYmSCgpLCJ1bmRlZmluZWQiPT10eXBlb2YgYWlfdGNEYXRhX3JlcXVlc3RlZCYmKGFpX3RjRGF0YV9yZXF1ZXN0ZWQ9ITAsYmEoKSxjb29raWVzX25lZWRfdGNEYXRhPSEwKSk6bCYmKGEoIiNhaS1pYWItdGNmLWJhciIpLmFkZENsYXNzKCJzdGF0dXMtZXJyb3IiKS5yZW1vdmVDbGFzcygic3RhdHVzLW9rIiksYSgiI2FpLWlhYi10Y2Ytc3RhdHVzIikudGV4dCgiSUFCIFRDRiAyLjAgTUlTU0lORzogX190Y2ZhcGkgZnVuY3Rpb24gbm90IGZvdW5kIikpfWM9bnVsbD09Yz9hKCJkaXYuYWktbGlzdC1kYXRhLCBtZXRhLmFpLWxpc3QtZGF0YSIpOmEoYykuZmlsdGVyKCIuYWktbGlzdC1kYXRhIik7CmlmKGMubGVuZ3RoKXtjLnJlbW92ZUNsYXNzKCJhaS1saXN0LWRhdGEiKTt2YXIgVT1nZXRBbGxVcmxQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7aWYobnVsbCE9VS5yZWZlcnJlcil2YXIgeT1VLnJlZmVycmVyO2Vsc2UgeT1kb2N1bWVudC5yZWZlcnJlciwiIiE9eSYmKHk9Qih5KSk7dmFyIFE9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQsUj1RLnRvTG93ZXJDYXNlKCksVj1uYXZpZ2F0b3IubGFuZ3VhZ2UsTD1WLnRvTG93ZXJDYXNlKCk7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgTW9iaWxlRGV0ZWN0KXZhciBXPW5ldyBNb2JpbGVEZXRlY3QoUSk7Yy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGw9ZG9jdW1lbnQuY29va2llLnNwbGl0KCI7Iik7bC5mb3JFYWNoKGZ1bmN0aW9uKHUsZyl7bFtnXT11LnRyaW0oKX0pO3ZhciBlPWEodGhpcykuY2xvc2VzdCgiZGl2LmNvZGUtYmxvY2siKSxkPSEwLG49YSh0aGlzKS5hdHRyKCJyZWZlcmVyLWxpc3QiKTsKaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuKXtuPWI2NGQobikuc3BsaXQoIiwiKTt2YXIgbT1hKHRoaXMpLmF0dHIoInJlZmVyZXItbGlzdC10eXBlIiksST0hMTthLmVhY2gobixmdW5jdGlvbih1LGcpe2c9Zy50cmltKCk7aWYoIiI9PWcpcmV0dXJuITA7aWYoIioiPT1nLmNoYXJBdCgwKSlpZigiKiI9PWcuY2hhckF0KGcubGVuZ3RoLTEpKXtpZihnPWcuc3Vic3RyKDEsZy5sZW5ndGgtMiksLTEhPXkuaW5kZXhPZihnKSlyZXR1cm4gST0hMCwhMX1lbHNle2lmKGc9Zy5zdWJzdHIoMSkseS5zdWJzdHIoLWcubGVuZ3RoKT09ZylyZXR1cm4gST0hMCwhMX1lbHNlIGlmKCIqIj09Zy5jaGFyQXQoZy5sZW5ndGgtMSkpe2lmKGc9Zy5zdWJzdHIoMCxnLmxlbmd0aC0xKSwwPT15LmluZGV4T2YoZykpcmV0dXJuIEk9ITAsITF9ZWxzZSBpZigiIyI9PWcpe2lmKCIiPT15KXJldHVybiBJPSEwLCExfWVsc2UgaWYoZz09eSlyZXR1cm4gST0hMCwhMX0pO3ZhciBwPUk7c3dpdGNoKG0pe2Nhc2UgIkIiOnAmJgooZD0hMSk7YnJlYWs7Y2FzZSAiVyI6cHx8KGQ9ITEpfX1pZihkJiYobj1hKHRoaXMpLmF0dHIoImNsaWVudC1saXN0IiksInVuZGVmaW5lZCIhPXR5cGVvZiBuJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBXKSlzd2l0Y2gobj1iNjRkKG4pLnNwbGl0KCIsIiksbT1hKHRoaXMpLmF0dHIoImNsaWVudC1saXN0LXR5cGUiKSxwPSExLGEuZWFjaChuLGZ1bmN0aW9uKHUsZyl7aWYoIiI9PWcudHJpbSgpKXJldHVybiEwO3U9Zy5zcGxpdCgiJiYiKTthLmVhY2godSxmdW5jdGlvbihyLGIpe3I9ITA7dmFyIHQ9ITE7Zm9yKGI9Yi50cmltKCk7IiEhIj09Yi5zdWJzdHJpbmcoMCwyKTspcj0hcixiPWIuc3Vic3RyaW5nKDIpOyJsYW5ndWFnZToiPT1iLnN1YnN0cmluZygwLDkpJiYodD0hMCxiPWIuc3Vic3RyaW5nKDkpLnRvTG93ZXJDYXNlKCkpO3ZhciBxPSExO3Q/IioiPT1iLmNoYXJBdCgwKT8iKiI9PWIuY2hhckF0KGIubGVuZ3RoLTEpPyhiPWIuc3Vic3RyKDEsYi5sZW5ndGgtMikudG9Mb3dlckNhc2UoKSwKLTEhPUwuaW5kZXhPZihiKSYmKHE9ITApKTooYj1iLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpLEwuc3Vic3RyKC1iLmxlbmd0aCk9PWImJihxPSEwKSk6IioiPT1iLmNoYXJBdChiLmxlbmd0aC0xKT8oYj1iLnN1YnN0cigwLGIubGVuZ3RoLTEpLnRvTG93ZXJDYXNlKCksMD09TC5pbmRleE9mKGIpJiYocT0hMCkpOmI9PUwmJihxPSEwKToiKiI9PWIuY2hhckF0KDApPyIqIj09Yi5jaGFyQXQoYi5sZW5ndGgtMSk/KGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKS50b0xvd2VyQ2FzZSgpLC0xIT1SLmluZGV4T2YoYikmJihxPSEwKSk6KGI9Yi5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSxSLnN1YnN0cigtYi5sZW5ndGgpPT1iJiYocT0hMCkpOiIqIj09Yi5jaGFyQXQoYi5sZW5ndGgtMSk/KGI9Yi5zdWJzdHIoMCxiLmxlbmd0aC0xKS50b0xvd2VyQ2FzZSgpLDA9PVIuaW5kZXhPZihiKSYmKHE9ITApKTpXLmlzKGIpJiYocT0hMCk7cD1xP3I6IXI7aWYoIXApcmV0dXJuITF9KTtpZihwKXJldHVybiExfSksCm0pe2Nhc2UgIkIiOnAmJihkPSExKTticmVhaztjYXNlICJXIjpwfHwoZD0hMSl9dmFyIE09bj0hMTtmb3IobT0xOzI+PW07bSsrKWlmKGQpe3N3aXRjaChtKXtjYXNlIDE6dmFyIGY9YSh0aGlzKS5hdHRyKCJjb29raWUtbGlzdCIpO2JyZWFrO2Nhc2UgMjpmPWEodGhpcykuYXR0cigicGFyYW1ldGVyLWxpc3QiKX1pZigidW5kZWZpbmVkIiE9dHlwZW9mIGYpe2Y9YjY0ZChmKTtzd2l0Y2gobSl7Y2FzZSAxOnZhciBBPWEodGhpcykuYXR0cigiY29va2llLWxpc3QtdHlwZSIpO2JyZWFrO2Nhc2UgMjpBPWEodGhpcykuYXR0cigicGFyYW1ldGVyLWxpc3QtdHlwZSIpfWY9Zi5yZXBsYWNlKCJ0Y2YtZ2RwciIsInRjZi12MltnZHByQXBwbGllc109dHJ1ZSIpO2Y9Zi5yZXBsYWNlKCJ0Y2Ytbm8tZ2RwciIsInRjZi12MltnZHByQXBwbGllc109ZmFsc2UiKTtmPWYucmVwbGFjZSgidGNmLWdvb2dsZSIsInRjZi12Mlt2ZW5kb3JdW2NvbnNlbnRzXVs3NTVdPXRydWUgJiYgdGNmLXYyW3B1cnBvc2VdW2NvbnNlbnRzXVsxXT10cnVlIik7CmY9Zi5yZXBsYWNlKCJ0Y2Ytbm8tZ29vZ2xlIiwiISF0Y2YtdjJbdmVuZG9yXVtjb25zZW50c11bNzU1XSIpO2Y9Zi5yZXBsYWNlKCJ0Y2YtbWVkaWEubmV0IiwidGNmLXYyW3ZlbmRvcl1bY29uc2VudHNdWzE0Ml09dHJ1ZSAmJiB0Y2YtdjJbcHVycG9zZV1bY29uc2VudHNdWzFdPXRydWUiKTtmPWYucmVwbGFjZSgidGNmLW5vLW1lZGlhLm5ldCIsIiEhdGNmLXYyW3ZlbmRvcl1bY29uc2VudHNdWzE0Ml0iKTtmPWYucmVwbGFjZSgidGNmLWFtYXpvbiIsInRjZi12Mlt2ZW5kb3JdW2NvbnNlbnRzXVs3OTNdPXRydWUgJiYgdGNmLXYyW3B1cnBvc2VdW2NvbnNlbnRzXVsxXT10cnVlIik7Zj1mLnJlcGxhY2UoInRjZi1uby1hbWF6b24iLCIhIXRjZi12Mlt2ZW5kb3JdW2NvbnNlbnRzXVs3OTNdIik7Zj1mLnJlcGxhY2UoInRjZi1lem9pYyIsInRjZi12Mlt2ZW5kb3JdW2NvbnNlbnRzXVszNDddPXRydWUgJiYgdGNmLXYyW3B1cnBvc2VdW2NvbnNlbnRzXVsxXT10cnVlIik7Zj1mLnJlcGxhY2UoInRjZi1uby1lem9pYyIsCiIhIXRjZi12Mlt2ZW5kb3JdW2NvbnNlbnRzXVszNDddIik7dmFyIEQ9Zi5zcGxpdCgiLCIpLFg9W107bC5mb3JFYWNoKGZ1bmN0aW9uKHUpe3U9dS5zcGxpdCgiPSIpO3RyeXt2YXIgZz1KU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh1WzFdKSl9Y2F0Y2gocil7Zz1kZWNvZGVVUklDb21wb25lbnQodVsxXSl9WFt1WzBdXT1nfSk7cD0hMTt2YXIgTj1hKHRoaXMpO2EuZWFjaChELGZ1bmN0aW9uKHUsZyl7dT1nLnNwbGl0KCImJiIpO2EuZWFjaCh1LGZ1bmN0aW9uKHIsYil7cj0hMDtmb3IoYj1iLnRyaW0oKTsiISEiPT1iLnN1YnN0cmluZygwLDIpOylyPSFyLGI9Yi5zdWJzdHJpbmcoMik7dmFyIHQ9YixxPSIhQCEiLFk9LTEhPWIuaW5kZXhPZigiWyIpLFo9KDA9PWIuaW5kZXhPZigidGNmLXYyIil8fDA9PWIuaW5kZXhPZigiZXVjb25zZW50LXYyIikpJiYtMSE9Yi5pbmRleE9mKCJbIik7LTEhPWIuaW5kZXhPZigiPSIpJiYocT1iLnNwbGl0KCI9IiksdD1xWzBdLHE9cVsxXSwKWT0tMSE9dC5pbmRleE9mKCJbIiksWj0oMD09dC5pbmRleE9mKCJ0Y2YtdjIiKXx8MD09dC5pbmRleE9mKCJldWNvbnNlbnQtdjIiKSkmJi0xIT10LmluZGV4T2YoIlsiKSk7aWYoWilhKCIjYWktaWFiLXRjZi1iYXIiKS5zaG93KCksIm9iamVjdCI9PXR5cGVvZiBhaV90Y0RhdGE/KGEoIiNhaS1pYWItdGNmLWJhciIpLmFkZENsYXNzKCJzdGF0dXMtb2siKSx0PXQucmVwbGFjZSgvXXwgL2dpLCIiKS5zcGxpdCgiWyIpLHQuc2hpZnQoKSxwPSh0PWsodCxhaV90Y0RhdGEscSkpP3I6IXIpOihOLmFkZENsYXNzKCJhaS1saXN0LWRhdGEiKSxNPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBfX3RjZmFwaT9LKCExKToidW5kZWZpbmVkIj09dHlwZW9mIGFpX3RjRGF0YV9yZXRyeWluZyYmKGFpX3RjRGF0YV9yZXRyeWluZz0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ImZ1bmN0aW9uIj09dHlwZW9mIF9fdGNmYXBpP0soITEpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT10eXBlb2YgX190Y2ZhcGk/CksoITEpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtLKCEwKX0sM0UzKX0sMUUzKX0sNjAwKSkpO2Vsc2UgaWYoWSlwPSh0PUcoWCx0LHEpKT9yOiFyO2Vsc2V7dmFyIFM9ITE7IiFAISI9PXE/bC5ldmVyeShmdW5jdGlvbihjYSl7cmV0dXJuIGNhLnNwbGl0KCI9IilbMF09PWI/KFM9ITAsITEpOiEwfSk6Uz0tMSE9bC5pbmRleE9mKGIpO3A9Uz9yOiFyfWlmKCFwKXJldHVybiExfSk7aWYocClyZXR1cm4hMX0pO3AmJihNPSExKTtzd2l0Y2goQSl7Y2FzZSAiQiI6cCYmKGQ9ITEpO2JyZWFrO2Nhc2UgIlciOnB8fChkPSExKX19fWEodGhpcykuaGFzQ2xhc3MoImFpLWxpc3QtbWFudWFsIikmJihkPyhOLnJlbW92ZUNsYXNzKCJhaS1saXN0LWRhdGEiKSxOLnJlbW92ZUNsYXNzKCJhaS1saXN0LW1hbnVhbCIpKToobj0hMCxOLmFkZENsYXNzKCJhaS1saXN0LWRhdGEiKSkpO2lmKGR8fCFuJiYhTSlpZihmPWEodGhpcykuZGF0YSgiZGVidWctaW5mbyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZiYmCihmPWEoIi4iK2YpLDAhPWYubGVuZ3RoKSl7dmFyIHg9Zi5wYXJlbnQoKTt4Lmhhc0NsYXNzKCJhaS1kZWJ1Zy1pbmZvIikmJngucmVtb3ZlKCl9eD1hKHRoaXMpLnByZXZBbGwoIi5haS1kZWJ1Zy1iYXIuYWktZGVidWctbGlzdHMiKTtmPSIiPT15PyIjIjp5O3guZmluZCgiLmFpLWRlYnVnLW5hbWUuYWktbGlzdC1pbmZvIikudGV4dChmKS5hdHRyKCJ0aXRsZSIsUSsiXG4iK1YpO3guZmluZCgiLmFpLWRlYnVnLW5hbWUuYWktbGlzdC1zdGF0dXMiKS50ZXh0KGQ/YWlfZnJvbnQudmlzaWJsZTphaV9mcm9udC5oaWRkZW4pO2Y9ITE7aWYoZCYmKG09YSh0aGlzKS5hdHRyKCJzY2hlZHVsaW5nLXN0YXJ0IiksQT1hKHRoaXMpLmF0dHIoInNjaGVkdWxpbmctZW5kIiksRD1hKHRoaXMpLmF0dHIoInNjaGVkdWxpbmctZGF5cyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgbSYmInVuZGVmaW5lZCIhPXR5cGVvZiBBJiYidW5kZWZpbmVkIiE9dHlwZW9mIEQpKXtmPSEwO3ZhciB6PWI2NGQobSksTz0KYjY0ZChBKSxUPXBhcnNlSW50KGEodGhpcykuYXR0cigic2NoZWR1bGluZy1mYWxsYmFjayIpKSxQPXBhcnNlSW50KGEodGhpcykuYXR0cigiZ210IikpO3ouaW5jbHVkZXMoIi0iKXx8Ty5pbmNsdWRlcygiLSIpPyhBPXYoeikrUCxtPXYoTykrUCk6KEE9RSh6KSxtPUUoTykpO0Q9YjY0ZChEKS5zcGxpdCgiLCIpO3g9YSh0aGlzKS5hdHRyKCJzY2hlZHVsaW5nLXR5cGUiKTt2YXIgQz0obmV3IERhdGUpLmdldFRpbWUoKStQLEY9bmV3IERhdGUoQyksSj1GLmdldERheSgpO3ouaW5jbHVkZXMoIi0iKXx8Ty5pbmNsdWRlcygiLSIpfHwoej0obmV3IERhdGUoRi5nZXRGdWxsWWVhcigpLEYuZ2V0TW9udGgoKSxGLmdldERhdGUoKSkpLmdldFRpbWUoKStQLEMtPXosMD5DJiYoQys9ODY0RTUpKTswPT1KP0o9NjpKLS07ej1DPj1BJiZDPG0mJkQuaW5jbHVkZXMoSi50b1N0cmluZygpKTtzd2l0Y2goeCl7Y2FzZSAiQiI6ej0hen16fHwoZD0hMSk7Rj1GLnRvSVNPU3RyaW5nKCkuc3BsaXQoIi4iKVswXS5yZXBsYWNlKCJUIiwKIiAiKTt4PWEodGhpcykucHJldkFsbCgiLmFpLWRlYnVnLWJhci5haS1kZWJ1Zy1zY2hlZHVsaW5nIik7eC5maW5kKCIuYWktZGVidWctbmFtZS5haS1zY2hlZHVsaW5nLWluZm8iKS50ZXh0KEYrIiAiK0orIiBjdXJyZW50X3RpbWU6IitNYXRoLmZsb29yKEMudG9TdHJpbmcoKS8xRTMpKyIgIHN0YXJ0X2RhdGU6IitNYXRoLmZsb29yKEEvMUUzKS50b1N0cmluZygpKyIgPSIrKEM+PUEpLnRvU3RyaW5nKCkrIiBlbmRfZGF0ZToiK01hdGguZmxvb3IobS8xRTMpLnRvU3RyaW5nKCkrIiA9OiIrKEM8bSkudG9TdHJpbmcoKSsiIGRheXM6IitELnRvU3RyaW5nKCkrIiA9OiIrRC5pbmNsdWRlcyhKLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCkpO3guZmluZCgiLmFpLWRlYnVnLW5hbWUuYWktc2NoZWR1bGluZy1zdGF0dXMiKS50ZXh0KGQ/YWlfZnJvbnQudmlzaWJsZTphaV9mcm9udC5oaWRkZW4pO2R8fDA9PVR8fCh4LnJlbW92ZUNsYXNzKCJhaS1kZWJ1Zy1zY2hlZHVsaW5nIikuYWRkQ2xhc3MoImFpLWRlYnVnLWZhbGxiYWNrIiksCnguZmluZCgiLmFpLWRlYnVnLW5hbWUuYWktc2NoZWR1bGluZy1zdGF0dXMiKS50ZXh0KGFpX2Zyb250LmZhbGxiYWNrKyIgPSAiK1QpKX1pZihufHwhZCYmTSlyZXR1cm4hMDthKHRoaXMpLmNzcyh7dmlzaWJpbGl0eToiIixwb3NpdGlvbjoiIix3aWR0aDoiIixoZWlnaHQ6IiIsInotaW5kZXgiOiIifSk7ZD8oZS5jc3Moe3Zpc2liaWxpdHk6IiJ9KSxlLmhhc0NsYXNzKCJhaS1yZW1vdmUtcG9zaXRpb24iKSYmZS5jc3Moe3Bvc2l0aW9uOiIifSksInVuZGVmaW5lZCIhPXR5cGVvZiBhKHRoaXMpLmRhdGEoImNvZGUiKSYmKGQ9YjY0ZChhKHRoaXMpLmRhdGEoImNvZGUiKSksMCE9YSh0aGlzKS5jbG9zZXN0KCJoZWFkIikubGVuZ3RoPyhhKHRoaXMpLmFmdGVyKGQpLGEodGhpcykucmVtb3ZlKCkpOmEodGhpcykuYXBwZW5kKGQpLGFpX3Byb2Nlc3NfZWxlbWVudF9saXN0cyh0aGlzKSkpOmYmJiF6JiYwIT1UPyhlLmNzcyh7dmlzaWJpbGl0eToiIn0pLGUuaGFzQ2xhc3MoImFpLXJlbW92ZS1wb3NpdGlvbiIpJiYKZS5jc3Moe3Bvc2l0aW9uOiIifSksYSh0aGlzKS5uZXh0KCIuYWktZmFsbGJhY2siKS5yZW1vdmVDbGFzcygiYWktZmFsbGJhY2siKSwidW5kZWZpbmVkIiE9dHlwZW9mIGEodGhpcykuZGF0YSgiZmFsbGJhY2stY29kZSIpPyhkPWI2NGQoYSh0aGlzKS5kYXRhKCJmYWxsYmFjay1jb2RlIikpLGEodGhpcykuYXBwZW5kKGQpLGFpX3Byb2Nlc3NfZWxlbWVudF9saXN0cyh0aGlzKSk6KGEodGhpcykuaGlkZSgpLCFlLmZpbmQoIi5haS1kZWJ1Zy1ibG9jayIpLmxlbmd0aCYmZVswXS5oYXNBdHRyaWJ1dGUoInN0eWxlIikmJi0xPT1lLmF0dHIoInN0eWxlIikuaW5kZXhPZigiaGVpZ2h0OiIpJiZlLmhpZGUoKSksZD1lLmF0dHIoImRhdGEtYWkiKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBkJiYhMSE9PWQmJihkPWEodGhpcykuYXR0cigiZmFsbGJhY2stdHJhY2tpbmciKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBkJiYhMSE9PWQmJmUuYXR0cigiZGF0YS1haS0iK2EodGhpcykuYXR0cigiZmFsbGJhY2tfbGV2ZWwiKSwKZCkpKTooYSh0aGlzKS5oaWRlKCksZS5sZW5ndGgmJihlLnJlbW92ZUF0dHIoImRhdGEtYWkiKS5yZW1vdmVDbGFzcygiYWktdHJhY2siKSxlLmZpbmQoIi5haS1kZWJ1Zy1ibG9jayIpLmxlbmd0aD8oZS5jc3Moe3Zpc2liaWxpdHk6IiJ9KS5yZW1vdmVDbGFzcygiYWktY2xvc2UiKSxlLmhhc0NsYXNzKCJhaS1yZW1vdmUtcG9zaXRpb24iKSYmZS5jc3Moe3Bvc2l0aW9uOiIifSkpOmVbMF0uaGFzQXR0cmlidXRlKCJzdHlsZSIpJiYtMT09ZS5hdHRyKCJzdHlsZSIpLmluZGV4T2YoImhlaWdodDoiKSYmZS5oaWRlKCkpKTthKHRoaXMpLmF0dHIoImRhdGEtY29kZSIsIiIpO2EodGhpcykuYXR0cigiZGF0YS1mYWxsYmFjay1jb2RlIiwiIik7ZS5yZW1vdmVDbGFzcygiYWktbGlzdC1ibG9jayIpfSl9fTthKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbihjKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWlfcHJvY2Vzc19saXN0cygpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtIKCk7aWYoImZ1bmN0aW9uIj09CnR5cGVvZiBhaV9sb2FkX2Jsb2Nrcyl7alF1ZXJ5KGRvY3VtZW50KS5vbigiY21wbHpFbmFibGVTY3JpcHRzIixrKTtqUXVlcnkoZG9jdW1lbnQpLm9uKCJjbXBsel9ldmVudF9tYXJrZXRpbmciLGspO2Z1bmN0aW9uIGsoRyl7ImNtcGx6RW5hYmxlU2NyaXB0cyIhPUcudHlwZSYmImFsbCIhPT1HLmNvbnNlbnRMZXZlbHx8YWlfbG9hZF9ibG9ja3MoKX19fSw1MCk7alF1ZXJ5KCIuYWktZGVidWctcGFnZS10eXBlIikuZGJsY2xpY2soZnVuY3Rpb24oKXtqUXVlcnkoIiNhaS1pYWItdGNmLXN0YXR1cyIpLnRleHQoIkNPTlNFTlQgQ09PS0lFUyIpO2pRdWVyeSgiI2FpLWlhYi10Y2YtYmFyIikuc2hvdygpfSk7alF1ZXJ5KCIjYWktaWFiLXRjZi1iYXIiKS5jbGljayhmdW5jdGlvbigpe2goImV1Y29uc2VudC12MiIpO2goIl9fbHhHX19jb25zZW50X192MiIpO2goIl9fbHhHX19jb25zZW50X192Ml9kYWlzeWJpdCIpO2goIl9fbHhHX19jb25zZW50X192Ml9nZGFpc3liaXQiKTtoKCJDb29raWVMYXdJbmZvQ29uc2VudCIpOwpoKCJjb29raWVsYXdpbmZvLWNoZWNrYm94LWFkdmVydGlzZW1lbnQiKTtoKCJjb29raWVsYXdpbmZvLWNoZWNrYm94LWFuYWx5dGljcyIpO2goImNvb2tpZWxhd2luZm8tY2hlY2tib3gtbmVjZXNzYXJ5Iik7aCgiY29tcGxpYW56X3BvbGljeV9pZCIpO2goImNvbXBsaWFuel9jb25zZW50X3N0YXR1cyIpO2goImNtcGx6X21hcmtldGluZyIpO2goImNtcGx6X2NvbnNlbnRfc3RhdHVzIik7aCgiY21wbHpfcHJlZmVyZW5jZXMiKTtoKCJjbXBsel9zdGF0aXN0aWNzLWFub255bW91cyIpO2goImNtcGx6X2Nob2ljZSIpO2goImNtcGx6X2Jhbm5lci1zdGF0dXMiKTtoKCJjbXBsel9mdW5jdGlvbmFsIik7aCgiY21wbHpfcG9saWN5X2lkIik7aCgiY21wbHpfc3RhdGlzdGljcyIpO2goIm1vb3ZlX2dkcHJfcG9wdXAiKTtoKCJyZWFsX2Nvb2tpZV9iYW5uZXItYmxvZzoxLXRjZiIpO2goInJlYWxfY29va2llX2Jhbm5lci1ibG9nOjEiKTtqUXVlcnkoIiNhaS1pYWItdGNmLXN0YXR1cyIpLnRleHQoIkNPTlNFTlQgQ09PS0lFUyBERUxFVEVEIil9KX0sCjUpfSl9KTsKZnVuY3Rpb24gYWlfcHJvY2Vzc19lbGVtZW50X2xpc3RzKGEpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19yb3RhdGlvbnNfaW5fZWxlbWVudCYmYWlfcHJvY2Vzc19yb3RhdGlvbnNfaW5fZWxlbWVudChhKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19saXN0cyYmYWlfcHJvY2Vzc19saXN0cyhqUXVlcnkoIi5haS1saXN0LWRhdGEiLGEpKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19pcF9hZGRyZXNzZXMmJmFpX3Byb2Nlc3NfaXBfYWRkcmVzc2VzKGpRdWVyeSgiLmFpLWlwLWRhdGEiLGEpKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19maWx0ZXJfaG9va3MmJmFpX3Byb2Nlc3NfZmlsdGVyX2hvb2tzKGpRdWVyeSgiLmFpLWZpbHRlci1jaGVjayIsYSkpOyJmdW5jdGlvbiI9PXR5cGVvZiBhaV9hZGJfcHJvY2Vzc19ibG9ja3MmJmFpX2FkYl9wcm9jZXNzX2Jsb2NrcyhhKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19pbXByZXNzaW9ucyYmCjE9PWFpX3RyYWNraW5nX2ZpbmlzaGVkJiZhaV9wcm9jZXNzX2ltcHJlc3Npb25zKCk7ImZ1bmN0aW9uIj09dHlwZW9mIGFpX2luc3RhbGxfY2xpY2tfdHJhY2tlcnMmJjE9PWFpX3RyYWNraW5nX2ZpbmlzaGVkJiZhaV9pbnN0YWxsX2NsaWNrX3RyYWNrZXJzKCk7ImZ1bmN0aW9uIj09dHlwZW9mIGFpX2luc3RhbGxfY2xvc2VfYnV0dG9ucyYmYWlfaW5zdGFsbF9jbG9zZV9idXR0b25zKGRvY3VtZW50KX0sNSl9CmZ1bmN0aW9uIGdldEFsbFVybFBhcmFtcyhhKXt2YXIgQj1hP2Euc3BsaXQoIj8iKVsxXTp3aW5kb3cubG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpO2E9e307aWYoQil7Qj1CLnNwbGl0KCIjIilbMF07Qj1CLnNwbGl0KCImIik7Zm9yKHZhciBFPTA7RTxCLmxlbmd0aDtFKyspe3ZhciB2PUJbRV0uc3BsaXQoIj0iKSxIPXZvaWQgMCx3PXZbMF0ucmVwbGFjZSgvXFtcZCpcXS8sZnVuY3Rpb24oaCl7SD1oLnNsaWNlKDEsLTEpO3JldHVybiIifSk7dj0idW5kZWZpbmVkIj09PXR5cGVvZiB2WzFdPyIiOnZbMV07dz13LnRvTG93ZXJDYXNlKCk7dj12LnRvTG93ZXJDYXNlKCk7YVt3XT8oInN0cmluZyI9PT10eXBlb2YgYVt3XSYmKGFbd109W2Fbd11dKSwidW5kZWZpbmVkIj09PXR5cGVvZiBIP2Fbd10ucHVzaCh2KTphW3ddW0hdPXYpOmFbd109dn19cmV0dXJuIGF9Owp2YXIgYWlfaXA9ITAsYWlfZGF0YV9pZD0iMmUwNzIwOWRiMiIsYWlfYWpheF91cmw9Imh0dHBzOi8vaHR0bC5jb20udm4vZW4vd3AtYWRtaW4vYWRtaW4tYWpheC5waHAiLGFpX2Jsb2NrX2NsYXNzX2RlZj0iY29kZS1ibG9jayI7CmpRdWVyeShmdW5jdGlvbihiKXtmdW5jdGlvbiB1KGMsZCl7ZHx8KGQ9d2luZG93LmxvY2F0aW9uLmhyZWYpO2M9Yy5yZXBsYWNlKC9bXFtcXV0vZywiXFwkJiIpO3JldHVybihjPShuZXcgUmVnRXhwKCJbPyZdIitjKyIoPShbXiYjXSopfCZ8I3wkKSIpKS5leGVjKGQpKT9jWzJdP2RlY29kZVVSSUNvbXBvbmVudChjWzJdLnJlcGxhY2UoL1wrL2csIiAiKSk6IiI6bnVsbH1mdW5jdGlvbiB2KGMpe2MucmVtb3ZlQ2xhc3MoImFpLWlwLWRhdGEiKTt2YXIgZD0hMTtpZigiIiE9YWlfaXBfZGF0YSl7dHJ5e3ZhciBrPUpTT04ucGFyc2UoYWlfaXBfZGF0YSksZj1rWzBdLGw9a1sxXSxtPWtbMl0sbj1rWzNdfWNhdGNoKGUpe3JldHVybn12YXIgcT0hMTstMSE9Zi5pbmRleE9mKCIjIikmJihxPSEwLGY9Zi5yZXBsYWNlKCIjIiwiIikpO3ZhciBwPSIiO3EmJihwPSJDRlAgQkxPQ0tFRCwgIik7cD1wK2YrIiwgIitsO251bGwhPW0mJm51bGwhPW4mJihwPXArIjoiK20rIjoiK24pO251bGw9PQptJiYobT0iIik7bnVsbD09biYmKG49IiIpO251bGwhPWsmJmMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWIodGhpcykuY2xvc2VzdCgiZGl2LmNvZGUtYmxvY2siKTtkPSEwO3ZhciBnPWIodGhpcykuYXR0cigiaXAtYWRkcmVzc2VzIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBnKXtnPWcuc3BsaXQoIiwiKTt2YXIgcj1iKHRoaXMpLmF0dHIoImlwLWFkZHJlc3MtbGlzdCIpLGg9ITE7Yi5lYWNoKGcsZnVuY3Rpb24odCxhKXtpZigiKiI9PWEuY2hhckF0KDApKWlmKCIqIj09YS5jaGFyQXQoYS5sZW5ndGgtMSkpe2lmKGE9YS5zdWJzdHIoMSxhLmxlbmd0aC0yKSwtMSE9Zi5pbmRleE9mKGEpKXJldHVybiBoPSEwLCExfWVsc2V7aWYoYT1hLnN1YnN0cigxKSxmLnN1YnN0cigtYS5sZW5ndGgpPT1hKXJldHVybiBoPSEwLCExfWVsc2UgaWYoIioiPT1hLmNoYXJBdChhLmxlbmd0aC0xKSl7aWYoYT1hLnN1YnN0cigwLGEubGVuZ3RoLTEpLDA9PWYuaW5kZXhPZihhKSlyZXR1cm4gaD0KITAsITF9ZWxzZSBpZigiIyI9PWEpe2lmKCIiPT1mKXJldHVybiBoPSEwLCExfWVsc2UgaWYoIkNGUCI9PWEudG9VcHBlckNhc2UoKSl7aWYocSlyZXR1cm4gaD0hMCwhMX1lbHNlIGlmKGE9PWYpcmV0dXJuIGg9ITAsITF9KTtzd2l0Y2gocil7Y2FzZSAiQiI6aCYmKGQ9ITEpO2JyZWFrO2Nhc2UgIlciOmh8fChkPSExKX19aWYoZCYmKGc9Yih0aGlzKS5hdHRyKCJjb3VudHJpZXMiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGcpKXN3aXRjaChnPWcuc3BsaXQoIiwiKSxyPWIodGhpcykuYXR0cigiY291bnRyeS1saXN0IiksaD0hMSxiLmVhY2goZyxmdW5jdGlvbih0LGEpe2E9YS50cmltKCkuc3BsaXQoIjoiKTtpZihudWxsPT1hWzFdfHwiIj09bSlhWzFdPSIiO2lmKG51bGw9PWFbMl18fCIiPT1uKWFbMl09IiI7dD1hLmpvaW4oIjoiKS50b1VwcGVyQ2FzZSgpO2E9KGwrIjoiKygiIj09YVsxXT8iIjptKSsiOiIrKCIiPT1hWzJdPyIiOm4pKS50b1VwcGVyQ2FzZSgpO2lmKHQ9PWEpcmV0dXJuIGg9CiEwLCExfSkscil7Y2FzZSAiQiI6aCYmKGQ9ITEpO2JyZWFrO2Nhc2UgIlciOmh8fChkPSExKX1iKHRoaXMpLmNzcyh7dmlzaWJpbGl0eToiIixwb3NpdGlvbjoiIix3aWR0aDoiIixoZWlnaHQ6IiIsInotaW5kZXgiOiIifSk7Zz1iKHRoaXMpLnByZXYoIi5haS1kZWJ1Zy1iYXIiKTtnLmZpbmQoIi5haS1kZWJ1Zy1uYW1lLmFpLWlwLWNvdW50cnkiKS50ZXh0KHApO2cuZmluZCgiLmFpLWRlYnVnLW5hbWUuYWktaXAtc3RhdHVzIikudGV4dChkP2FpX2Zyb250LnZpc2libGU6YWlfZnJvbnQuaGlkZGVuKTtkPyhlLmNzcyh7dmlzaWJpbGl0eToiIn0pLGUuaGFzQ2xhc3MoImFpLXJlbW92ZS1wb3NpdGlvbiIpJiZlLmNzcyh7cG9zaXRpb246IiJ9KSwidW5kZWZpbmVkIiE9dHlwZW9mIGIodGhpcykuZGF0YSgiY29kZSIpJiYoZz1iNjRkKGIodGhpcykuZGF0YSgiY29kZSIpKSwwIT1iKHRoaXMpLmNsb3Nlc3QoImhlYWQiKS5sZW5ndGg/KGIodGhpcykuYWZ0ZXIoZyksYih0aGlzKS5yZW1vdmUoKSk6CmIodGhpcykuYXBwZW5kKGcpLGIodGhpcykuYXR0cigiZGF0YS1jb2RlIiwiIiksYWlfcHJvY2Vzc19lbGVtZW50KHRoaXMpKSk6KGIodGhpcykuaGlkZSgpLGUubGVuZ3RoJiYoZS5yZW1vdmVBdHRyKCJkYXRhLWFpIikucmVtb3ZlQ2xhc3MoImFpLXRyYWNrIiksZS5maW5kKCIuYWktZGVidWctYmxvY2siKS5sZW5ndGg/KGUuY3NzKHt2aXNpYmlsaXR5OiIifSkucmVtb3ZlQ2xhc3MoImFpLWNsb3NlIiksZS5oYXNDbGFzcygiYWktcmVtb3ZlLXBvc2l0aW9uIikmJmUuY3NzKHtwb3NpdGlvbjoiIn0pLCJ1bmRlZmluZWQiIT10eXBlb2YgYih0aGlzKS5kYXRhKCJjb2RlIikmJihlLnJlbW92ZUNsYXNzKCJhaS1saXN0LWJsb2NrIiksZS5yZW1vdmVDbGFzcygiYWktbGlzdC1ibG9jay1maWx0ZXIiKSxlLnByZXYoKS5oYXNDbGFzcygiYWktZGVidWctaW5mbyIpJiZlLnByZXYoKS5yZW1vdmUoKSkpOmVbMF0uaGFzQXR0cmlidXRlKCJzdHlsZSIpJiYtMT09ZS5hdHRyKCJzdHlsZSIpLmluZGV4T2YoImhlaWdodDoiKSYmCmUuaGlkZSgpKSk7ZS5yZW1vdmVDbGFzcygiYWktbGlzdC1ibG9jay1pcCIpfSl9fWFpX3Byb2Nlc3NfaXBfYWRkcmVzc2VzPWZ1bmN0aW9uKGMpe2M9bnVsbD09Yz9iKCJkaXYuYWktaXAtZGF0YSwgbWV0YS5haS1pcC1kYXRhIik6YihjKS5maWx0ZXIoIi5haS1pcC1kYXRhIik7aWYoYy5sZW5ndGgpaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhaV9pcF9kYXRhKXYoYyk7ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIGFpX2lwX2RhdGFfcmVxdWVzdGVkKXthaV9pcF9kYXRhX3JlcXVlc3RlZD0hMDt2YXIgZD0iL2VuL3dwLWFkbWluL2FkbWluLWFqYXgucGhwP2FjdGlvbj1haV9hamF4JmlwLWRhdGE9aXAtYWRkcmVzcy1jb3VudHJ5LWNpdHkiLGs9dSgiYWktZGVidWctaXAtYWRkcmVzcyIpO251bGwhPWsmJihkKz0iJmFpLWRlYnVnLWlwLWFkZHJlc3M9IitrKTtrPXUoImFpLWRlYnVnLWNvdW50cnkiKTtudWxsIT1rJiYoZCs9IiZhaS1kZWJ1Zy1jb3VudHJ5PSIrayk7CmIuYWpheCh7dXJsOmQsdHlwZToicG9zdCIsZGF0YTp7YWlfY2hlY2s6IjJlMDcyMDlkYjIiLGFpX3ZlcnNpb246KG5ldyBEYXRlKS5nZXRUaW1lKCkrIi0iK01hdGgucm91bmQoMUU1Kk1hdGgucmFuZG9tKCkpfSxhc3luYzohMH0pLmRvbmUoZnVuY3Rpb24oZil7YWlfaXBfZGF0YT1mO2lmKCIiPT1mKXt2YXIgbD0iQWpheCByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEsIGdlby10YXJnZXRpbmcgZGlzYWJsZWQiO2NvbnNvbGUuZXJyb3IobCk7InVuZGVmaW5lZCIhPXR5cGVvZiBhaV9qc19lcnJvcnMmJmFpX2pzX2Vycm9ycy5wdXNoKFtsLGQsMF0pfWVsc2UgdHJ5e0pTT04ucGFyc2UoZil9Y2F0Y2gobSl7bD0iQWpheCBjYWxsIHJldHVybmVkIGludmFsaWQgZGF0YSwgZ2VvLXRhcmdldGluZyBkaXNhYmxlZCIsY29uc29sZS5lcnJvcihsLGYpLCJ1bmRlZmluZWQiIT10eXBlb2YgYWlfanNfZXJyb3JzJiZhaV9qc19lcnJvcnMucHVzaChbbCxkLDBdKX1jPWIoImRpdi5haS1pcC1kYXRhLCBtZXRhLmFpLWlwLWRhdGEiKTsKYy5sZW5ndGgmJnYoYyl9KS5mYWlsKGZ1bmN0aW9uKGYsbCxtKXtiKCJkaXYuYWktaXAtZGF0YSIpLmVhY2goZnVuY3Rpb24oKXtiKHRoaXMpLmNzcyh7ZGlzcGxheToibm9uZSIsdmlzaWJpbGl0eToiIixwb3NpdGlvbjoiIix3aWR0aDoiIixoZWlnaHQ6IiIsInotaW5kZXgiOiIifSkucmVtb3ZlQ2xhc3MoImFpLWlwLWRhdGEiKS5oaWRlKCl9KX0pfX07Yihkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oYyl7c2V0VGltZW91dChmdW5jdGlvbigpe2FpX3Byb2Nlc3NfaXBfYWRkcmVzc2VzKCl9LDUpfSl9KTsKZnVuY3Rpb24gYWlfcHJvY2Vzc19lbGVtZW50KGIpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19yb3RhdGlvbnNfaW5fZWxlbWVudCYmYWlfcHJvY2Vzc19yb3RhdGlvbnNfaW5fZWxlbWVudChiKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19saXN0cyYmYWlfcHJvY2Vzc19saXN0cyhqUXVlcnkoIi5haS1saXN0LWRhdGEiLGIpKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19pcF9hZGRyZXNzZXMmJmFpX3Byb2Nlc3NfaXBfYWRkcmVzc2VzKGpRdWVyeSgiLmFpLWlwLWRhdGEiLGIpKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19maWx0ZXJfaG9va3MmJmFpX3Byb2Nlc3NfZmlsdGVyX2hvb2tzKGpRdWVyeSgiLmFpLWZpbHRlci1jaGVjayIsYikpOyJmdW5jdGlvbiI9PXR5cGVvZiBhaV9hZGJfcHJvY2Vzc19ibG9ja3MmJmFpX2FkYl9wcm9jZXNzX2Jsb2NrcyhiKTsiZnVuY3Rpb24iPT10eXBlb2YgYWlfcHJvY2Vzc19pbXByZXNzaW9ucyYmCjE9PWFpX3RyYWNraW5nX2ZpbmlzaGVkJiZhaV9wcm9jZXNzX2ltcHJlc3Npb25zKCk7ImZ1bmN0aW9uIj09dHlwZW9mIGFpX2luc3RhbGxfY2xpY2tfdHJhY2tlcnMmJjE9PWFpX3RyYWNraW5nX2ZpbmlzaGVkJiZhaV9pbnN0YWxsX2NsaWNrX3RyYWNrZXJzKCk7ImZ1bmN0aW9uIj09dHlwZW9mIGFpX2luc3RhbGxfY2xvc2VfYnV0dG9ucyYmYWlfaW5zdGFsbF9jbG9zZV9idXR0b25zKGRvY3VtZW50KX0sNSl9Owp2YXIgYWlfaW50ZXJuYWxfdHJhY2tpbmc9MSxhaV9leHRlcm5hbF90cmFja2luZz0wLGFpX2V4dGVybmFsX3RyYWNraW5nX2NhdGVnb3J5PSJBZCBJbnNlcnRlciBQcm8iLGFpX2V4dGVybmFsX3RyYWNraW5nX2FjdGlvbj0iW0VWRU5UXSIsYWlfZXh0ZXJuYWxfdHJhY2tpbmdfbGFiZWw9IltCTE9DS19OVU1CRVJdIC0gW0JMT0NLX1ZFUlNJT05fTkFNRV0iLGFpX2V4dGVybmFsX3RyYWNraW5nX3VzZXJuYW1lPSIiLGFpX3RyYWNrX3BhZ2V2aWV3cz0xLGFpX2FkdmFuY2VkX2NsaWNrX2RldGVjdGlvbj0wLGFpX3ZpZXdwb3J0X3dpZHRocz1bOTgwLDc2OCwwXSxhaV92aWV3cG9ydF9pbmRleGVzPVsxLDIsM10sYWlfdmlld3BvcnRfbmFtZXNfc3RyaW5nPSJXeUpFWlhOcmRHOXdJaXdpVkdGaWJHVjBJaXdpVUdodmJtVWlYUT09IixhaV9kYXRhX2lkPSIyZTA3MjA5ZGIyIiwKYWlfYWpheF91cmw9Imh0dHBzOi8vaHR0bC5jb20udm4vZW4vd3AtYWRtaW4vYWRtaW4tYWpheC5waHAiLGFpX2RlYnVnX3RyYWNraW5nPTAsYWlfYWRiX2F0dHJpYnV0ZT0nWkdGMFlTMWtZWFJoTFcxaGMycz0nOwovKgogalF1ZXJ5IGlmcmFtZSBjbGljayB0cmFja2luZyBwbHVnaW4KCiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQXBhY2hlLTIuMAogQHZlcnNpb24gMi4xLjAKKi8KKGZ1bmN0aW9uKGUseil7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sZnVuY3Rpb24obSl7cmV0dXJuIHoobSl9KToib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXoocmVxdWlyZSgianF1ZXJ5IikpOnooZS5qUXVlcnkpfSkodGhpcyxmdW5jdGlvbihlKXtmdW5jdGlvbiB6KG0saCl7cmV0dXJuKG5ldyBSZWdFeHAoIl4iK2guc3BsaXQoIioiKS5tYXAocj0+ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFtcXVwvXFxdKS9nLCJcXCQxIikpLmpvaW4oIi4qIikrIiQiKSkudGVzdChtKX0oZnVuY3Rpb24obSl7bS5mbi5pZnJhbWVUcmFja2VyPWZ1bmN0aW9uKGgpeyJmdW5jdGlvbiI9PXR5cGVvZiBoJiYoaD17Ymx1ckNhbGxiYWNrOmh9KTt2YXIgcj10aGlzLmdldCgpO2lmKG51bGw9PT1ofHwhMT09PWgpbS5pZnJhbWVUcmFja2VyLnVudHJhY2socik7ZWxzZSBpZigib2JqZWN0Ij09CnR5cGVvZiBoKW0uaWZyYW1lVHJhY2tlci50cmFjayhyLGgpO2Vsc2UgdGhyb3cgRXJyb3IoIldyb25nIGhhbmRsZXIgdHlwZSAobXVzdCBiZSBhbiBvYmplY3QsIG9yIG51bGx8ZmFsc2UgdG8gdW50cmFjaykiKTtyZXR1cm4gdGhpc307bS5pZnJhbWVUcmFja2VyPXtmb2N1c1JldHJpZXZlcjpudWxsLGZvY3VzUmV0cmlldmVkOiExLGhhbmRsZXJzTGlzdDpbXSxpc0lFOEFuZE9sZGVyOiExLGluaXQ6ZnVuY3Rpb24oKXt0cnl7ITA9PT1tLmJyb3dzZXIubXNpZSYmOT5tLmJyb3dzZXIudmVyc2lvbiYmKHRoaXMuaXNJRThBbmRPbGRlcj0hMCl9Y2F0Y2goaCl7dHJ5ezk+bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChSZWdFeHAoIihtc2llKSAoW1xcdy5dKykiLCJpIikpWzJdJiYodGhpcy5pc0lFOEFuZE9sZGVyPSEwKX1jYXRjaChyKXt9fW0od2luZG93KS5mb2N1cygpO20od2luZG93KS5ibHVyKGZ1bmN0aW9uKGgpe20uaWZyYW1lVHJhY2tlci53aW5kb3dMb3NlRm9jdXMoaCl9KTsKbSgiYm9keSIpLmFwcGVuZCgnPGRpdiBzdHlsZT0icG9zaXRpb246Zml4ZWQ7IHRvcDowOyBsZWZ0OjA7IG92ZXJmbG93OmhpZGRlbjsiPjxpbnB1dCBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6LTMwMHB4OyIgdHlwZT0idGV4dCIgdmFsdWU9IiIgaWQ9ImZvY3VzX3JldHJpZXZlciIgcmVhZG9ubHk9InRydWUiIC8+PGxhYmVsIGZvcj0iZm9jdXNfcmV0cmlldmVyIj4mbmJzcDs8L2xhYmVsPjwvZGl2PicpO3RoaXMuZm9jdXNSZXRyaWV2ZXI9bSgiI2ZvY3VzX3JldHJpZXZlciIpO3RoaXMuZm9jdXNSZXRyaWV2ZWQ9ITE7aWYodGhpcy5pc0lFOEFuZE9sZGVyKXt0aGlzLmZvY3VzUmV0cmlldmVyLmJsdXIoZnVuY3Rpb24oaCl7aC5zdG9wUHJvcGFnYXRpb24oKTtoLnByZXZlbnREZWZhdWx0KCk7bS5pZnJhbWVUcmFja2VyLndpbmRvd0xvc2VGb2N1cyhoKX0pO20oImJvZHkiKS5jbGljayhmdW5jdGlvbihoKXttKHdpbmRvdykuZm9jdXMoKX0pO20oImZvcm0iKS5jbGljayhmdW5jdGlvbihoKXtoLnN0b3BQcm9wYWdhdGlvbigpfSk7CnRyeXttKCJib2R5Iikub24oImNsaWNrIiwiZm9ybSIsZnVuY3Rpb24oaCl7aC5zdG9wUHJvcGFnYXRpb24oKX0pfWNhdGNoKGgpe2NvbnNvbGUubG9nKCJbaWZyYW1lVHJhY2tlcl0gUGxlYXNlIHVwZGF0ZSBqUXVlcnkgdG8gMS43IG9yIG5ld2VyLiAoZXhjZXB0aW9uOiAiK2gubWVzc2FnZSsiKSIpfX19LHRyYWNrOmZ1bmN0aW9uKGgscil7ci50YXJnZXQ9aDttLmlmcmFtZVRyYWNrZXIuaGFuZGxlcnNMaXN0LnB1c2gocik7bShoKS5iaW5kKCJtb3VzZW92ZXIiLHtoYW5kbGVyOnJ9LG0uaWZyYW1lVHJhY2tlci5tb3VzZW92ZXJMaXN0ZW5lcikuYmluZCgibW91c2VvdXQiLHtoYW5kbGVyOnJ9LG0uaWZyYW1lVHJhY2tlci5tb3VzZW91dExpc3RlbmVyKX0sdW50cmFjazpmdW5jdGlvbihoKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQXJyYXkucHJvdG90eXBlLmZpbHRlciljb25zb2xlLmxvZygiWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBBcnJheSBmaWx0ZXIsIHVudHJhY2sgZGlzYWJsZWQiKTsKZWxzZXttKGgpLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS51bmJpbmQoIm1vdXNlb3ZlciIsbS5pZnJhbWVUcmFja2VyLm1vdXNlb3Zlckxpc3RlbmVyKS51bmJpbmQoIm1vdXNlb3V0IixtLmlmcmFtZVRyYWNrZXIubW91c2VvdXRMaXN0ZW5lcil9KTt2YXIgcj1mdW5jdGlvbihiKXtyZXR1cm4gbnVsbD09PWI/ITE6ITB9LHc7Zm9yKHcgaW4gdGhpcy5oYW5kbGVyc0xpc3Qpe2Zvcih2YXIgeCBpbiB0aGlzLmhhbmRsZXJzTGlzdFt3XS50YXJnZXQpLTEhPT1tLmluQXJyYXkodGhpcy5oYW5kbGVyc0xpc3Rbd10udGFyZ2V0W3hdLGgpJiYodGhpcy5oYW5kbGVyc0xpc3Rbd10udGFyZ2V0W3hdPW51bGwpO3RoaXMuaGFuZGxlcnNMaXN0W3ddLnRhcmdldD10aGlzLmhhbmRsZXJzTGlzdFt3XS50YXJnZXQuZmlsdGVyKHIpOzA9PT10aGlzLmhhbmRsZXJzTGlzdFt3XS50YXJnZXQubGVuZ3RoJiYodGhpcy5oYW5kbGVyc0xpc3Rbd109bnVsbCl9dGhpcy5oYW5kbGVyc0xpc3Q9dGhpcy5oYW5kbGVyc0xpc3QuZmlsdGVyKHIpfX0sCm1vdXNlb3Zlckxpc3RlbmVyOmZ1bmN0aW9uKGgpe2guZGF0YS5oYW5kbGVyLm92ZXI9ITA7bS5pZnJhbWVUcmFja2VyLnJldHJpZXZlRm9jdXMoKTt0cnl7aC5kYXRhLmhhbmRsZXIub3ZlckNhbGxiYWNrKHRoaXMsaCl9Y2F0Y2gocil7fX0sbW91c2VvdXRMaXN0ZW5lcjpmdW5jdGlvbihoKXtoLmRhdGEuaGFuZGxlci5vdmVyPSExO20uaWZyYW1lVHJhY2tlci5yZXRyaWV2ZUZvY3VzKCk7dHJ5e2guZGF0YS5oYW5kbGVyLm91dENhbGxiYWNrKHRoaXMsaCl9Y2F0Y2gocil7fX0scmV0cmlldmVGb2N1czpmdW5jdGlvbigpe2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJiJJRlJBTUUiPT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lKXt2YXIgaD0hMDtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiaWQiKSYmInVuZGVmaW5lZCIhPT10eXBlb2YgYWlfaWdub3JlX2lmcmFtZV9pZHMmJmFpX2lnbm9yZV9pZnJhbWVfaWRzLmNvbnN0cnVjdG9yPT09QXJyYXkpe3ZhciByPQpkb2N1bWVudC5hY3RpdmVFbGVtZW50LmlkO2FpX2lnbm9yZV9pZnJhbWVfaWRzLmZvckVhY2goZnVuY3Rpb24oeCl7eihyLHgpJiYoaD0hMSl9KX1pZihoJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiY2xhc3MiKSYmInVuZGVmaW5lZCIhPT10eXBlb2YgYWlfaWdub3JlX2lmcmFtZV9jbGFzc2VzJiZhaV9pZ25vcmVfaWZyYW1lX2NsYXNzZXMuY29uc3RydWN0b3I9PT1BcnJheSl7dmFyIHc9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbGFzc05hbWU7YWlfaWdub3JlX2lmcmFtZV9jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oeCl7eih3LHgpJiYoaD0hMSl9KX1oJiYobS5pZnJhbWVUcmFja2VyLmZvY3VzUmV0cmlldmVyLmZvY3VzKCksbS5pZnJhbWVUcmFja2VyLmZvY3VzUmV0cmlldmVkPSEwKX19LHdpbmRvd0xvc2VGb2N1czpmdW5jdGlvbihoKXtmb3IodmFyIHIgaW4gdGhpcy5oYW5kbGVyc0xpc3QpaWYoITA9PT10aGlzLmhhbmRsZXJzTGlzdFtyXS5vdmVyKXRyeXt0aGlzLmhhbmRsZXJzTGlzdFtyXS5ibHVyQ2FsbGJhY2soaCl9Y2F0Y2godyl7fX19OwptKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe20uaWZyYW1lVHJhY2tlci5pbml0KCl9KX0pKGUpfSk7YWlfdHJhY2tpbmdfZmluaXNoZWQ9ITE7YWlfdmlld3BvcnRfbmFtZXM9SlNPTi5wYXJzZShiNjRkKGFpX3ZpZXdwb3J0X25hbWVzX3N0cmluZykpOwpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHooYixrLGcsYSxjLG4sZil7Yj1iLnJlcGxhY2UoIltFVkVOVF0iLGspO2I9Yi5yZXBsYWNlKCJbQkxPQ0tfTlVNQkVSXSIsZyk7Yj1iLnJlcGxhY2UoIltCTE9DS19OQU1FXSIsYSk7Yj1iLnJlcGxhY2UoIltCTE9DS19DT1VOVEVSXSIsYyk7Yj1iLnJlcGxhY2UoIltWRVJTSU9OX05VTUJFUl0iLG4pO2I9Yi5yZXBsYWNlKCJbVkVSU0lPTl9OQU1FXSIsZik7Yj1iLnJlcGxhY2UoIltCTE9DS19WRVJTSU9OX05VTUJFUl0iLGcrKDA9PW4/IiI6IiAtICIrbikpO2I9Yi5yZXBsYWNlKCJbQkxPQ0tfVkVSU0lPTl9OQU1FXSIsYSsoIiI9PWY/IiI6IiAtICIrZikpO3JldHVybiBiPWIucmVwbGFjZSgiW1dQX1VTRVJOQU1FXSIsYWlfZXh0ZXJuYWxfdHJhY2tpbmdfdXNlcm5hbWUpfWZ1bmN0aW9uIG0oYixrLGcsYSxjLG4sZil7dmFyIGQ9eihhaV9leHRlcm5hbF90cmFja2luZ19jYXRlZ29yeSxiLGssZyxhLGMsCm4pLHA9eihhaV9leHRlcm5hbF90cmFja2luZ19hY3Rpb24sYixrLGcsYSxjLG4pLGw9eihhaV9leHRlcm5hbF90cmFja2luZ19sYWJlbCxiLGssZyxhLGMsbik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFpX2V4dGVybmFsX3RyYWNraW5nX2V2ZW50fHwwIT1haV9leHRlcm5hbF90cmFja2luZ19ldmVudCh7ZXZlbnQ6YixibG9jazprLGJsb2NrX25hbWU6ZyxibG9ja19jb3VudGVyOmEsdmVyc2lvbjpjLHZlcnNpb25fbmFtZTpufSxkLHAsbCxmKSkiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LmdhJiYoYj0ic2VuZCIsInN0cmluZyI9PXR5cGVvZiBhaV9nYV90cmFja2VyX25hbWU/Yj1haV9nYV90cmFja2VyX25hbWUrIi4iK2I6KGs9Z2EuZ2V0QWxsKCksMCE9ay5sZW5ndGgmJihrPWtbMF0uZ2V0KCJuYW1lIiksInQwIiE9ayYmKGI9aysiLiIrYikpKSxnYShiLCJldmVudCIse2V2ZW50Q2F0ZWdvcnk6ZCxldmVudEFjdGlvbjpwLGV2ZW50TGFiZWw6bCxub25JbnRlcmFjdGlvbjpmfSkpLAoiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Lmd0YWcmJmd0YWcoImV2ZW50IiwiaW1wcmVzc2lvbiIse2V2ZW50X2NhdGVnb3J5OmQsZXZlbnRfYWN0aW9uOnAsZXZlbnRfbGFiZWw6bCxub25faW50ZXJhY3Rpb246Zn0pLCJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuX19nYVRyYWNrZXImJl9fZ2FUcmFja2VyKCJzZW5kIiwiZXZlbnQiLHtldmVudENhdGVnb3J5OmQsZXZlbnRBY3Rpb246cCxldmVudExhYmVsOmwsbm9uSW50ZXJhY3Rpb246Zn0pLCJvYmplY3QiPT10eXBlb2YgX2dhcSYmX2dhcS5wdXNoKFsiX3RyYWNrRXZlbnQiLGQscCxsLHZvaWQgMCxmXSksIm9iamVjdCI9PXR5cGVvZiBfcGFxJiZfcGFxLnB1c2goWyJ0cmFja0V2ZW50IixkLHAsbF0pfWZ1bmN0aW9uIGgoYixrKXt2YXIgZz1iWzBdLGE9YlsxXTtpZihOdW1iZXIuaXNJbnRlZ2VyKGEpKWlmKCJ1bmRlZmluZWQiPT10eXBlb2YgYWlfY2hlY2tfZGF0YSYmInVuZGVmaW5lZCI9PXR5cGVvZiBhaV9jaGVja19kYXRhX3RpbWVvdXQpYWlfY2hlY2tfZGF0YV90aW1lb3V0PQohMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aChiLGspfSwyNTAwKTtlbHNle2FpX2Nvb2tpZT1haV9sb2FkX2Nvb2tpZSgpO2Zvcih2YXIgYyBpbiBhaV9jb29raWUpaWYocGFyc2VJbnQoZyk9PXBhcnNlSW50KGMpKWZvcih2YXIgbiBpbiBhaV9jb29raWVbY10paWYoImMiPT1uKXt2YXIgZj1haV9jb29raWVbY11bbl07aWYoMDxmKWlmKGFpX3NldF9jb29raWUoYywiYyIsZi0xKSwxPT1mKXtmPWUoInNwYW5bZGF0YS1haS1ibG9jaz0iK2crIl0iKS5kYXRhKCJhaS1jZnAtdGltZSIpO3ZhciBkPW5ldyBEYXRlO2Q9TWF0aC5yb3VuZChkLmdldFRpbWUoKS8xRTMpO3ZhciBwPWQrNjA0ODAwO2FpX3NldF9jb29raWUoYywiYyIsLXApO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKCJzcGFuW2RhdGEtYWktYmxvY2s9IitnKyJdIikuY2xvc2VzdCgiZGl2W2RhdGEtYWldIikucmVtb3ZlKCl9LDUwKX1lbHNlIGFpX3NldF9jb29raWUoYywiYyIsZi0xKX1lbHNlIGlmKCJjcHQiPT1uKWlmKGY9CmFpX2Nvb2tpZVtjXVtuXSwwPGYpe2lmKGFpX3NldF9jb29raWUoYywiY3B0IixmLTEpLDE9PWYpe2Y9ZSgic3BhbltkYXRhLWFpLWJsb2NrPSIrZysiXSIpLmRhdGEoImFpLWNmcC10aW1lIik7ZD1uZXcgRGF0ZTtkPU1hdGgucm91bmQoZC5nZXRUaW1lKCkvMUUzKTtwPWFpX2Nvb2tpZVtjXS5jdDthaV9zZXRfY29va2llKGMsIngiLHApO3ZhciBsPWUoInNwYW5bZGF0YS1haS1ibG9jaz0iK2crIl0iKS5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKS5yZW1vdmUoKX0sNzUpOyJ1bmRlZmluZWQiIT10eXBlb2YgZiYmKHA9ZCs4NjQwMCpmLGFpX3NldF9jb29raWUoZywieCIscCksZSgic3Bhbi5haS1jZnAiKS5lYWNoKGZ1bmN0aW9uKHEpe3E9ZSh0aGlzKS5kYXRhKCJhaS1ibG9jayIpO3ZhciB1PWUodGhpcyk7c2V0VGltZW91dChmdW5jdGlvbigpe3UuY2xvc2VzdCgiZGl2W2RhdGEtYWldIikucmVtb3ZlKCl9LAo1MCk7YWlfc2V0X2Nvb2tpZShxLCJ4IixwKX0pKX19ZWxzZSBhaV9jaGVja19kYXRhLmhhc093blByb3BlcnR5KGMpJiZhaV9jaGVja19kYXRhW2NdLmhhc093blByb3BlcnR5KCJjcHQiKSYmYWlfY2hlY2tfZGF0YVtjXS5oYXNPd25Qcm9wZXJ0eSgiY3QiKT9haV9jb29raWUuaGFzT3duUHJvcGVydHkoYykmJmFpX2Nvb2tpZVtjXS5oYXNPd25Qcm9wZXJ0eSgiY3QiKSYmKGQ9bmV3IERhdGUsZj1haV9jb29raWVbY10uY3QtTWF0aC5yb3VuZChkLmdldFRpbWUoKS8xRTMpLDA+PWYmJihkPU1hdGgucm91bmQoZC5nZXRUaW1lKCkvMUUzKSxhaV9zZXRfY29va2llKGMsImNwdCIsYWlfY2hlY2tfZGF0YVtjXS5jcHQtMSksYWlfc2V0X2Nvb2tpZShjLCJjdCIsTWF0aC5yb3VuZChkKzg2NDAwKmFpX2NoZWNrX2RhdGFbY10uY3QpKSkpOihhaV9jb29raWUuaGFzT3duUHJvcGVydHkoYykmJmFpX2Nvb2tpZVtjXS5oYXNPd25Qcm9wZXJ0eSgiY3B0IikmJmFpX3NldF9jb29raWUoYywiY3B0IiwKIiIpLGFpX2Nvb2tpZS5oYXNPd25Qcm9wZXJ0eShjKSYmYWlfY29va2llW2NdLmhhc093blByb3BlcnR5KCJjdCIpJiZhaV9zZXRfY29va2llKGMsImN0IiwiIikpO2FpX2Nvb2tpZS5oYXNPd25Qcm9wZXJ0eSgiRyIpJiZhaV9jb29raWUuRy5oYXNPd25Qcm9wZXJ0eSgiY3B0IikmJihmPWFpX2Nvb2tpZS5HLmNwdCwwPGY/KGFpX3NldF9jb29raWUoIkciLCJjcHQiLGYtMSksMT09ZiYmKGY9ZSgic3BhbltkYXRhLWFpLWJsb2NrPSIrZysiXSIpLmRhdGEoImFpLWNmcC10aW1lIiksZD1uZXcgRGF0ZSxkPU1hdGgucm91bmQoZC5nZXRUaW1lKCkvMUUzKSxwPWFpX2Nvb2tpZS5HLmN0LGFpX3NldF9jb29raWUoZywieCIscCksbD1lKCJzcGFuW2RhdGEtYWktYmxvY2s9IitnKyJdIikuY2xvc2VzdCgiZGl2W2RhdGEtYWldIiksc2V0VGltZW91dChmdW5jdGlvbigpe2wuY2xvc2VzdCgiZGl2W2RhdGEtYWldIikucmVtb3ZlKCl9LDc1KSwidW5kZWZpbmVkIiE9dHlwZW9mIGYmJihwPWQrCjg2NDAwKmYsYWlfc2V0X2Nvb2tpZShnLCJ4IixwKSxlKCJzcGFuLmFpLWNmcCIpLmVhY2goZnVuY3Rpb24ocSl7cT1lKHRoaXMpLmRhdGEoImFpLWJsb2NrIik7dmFyIHU9ZSh0aGlzKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dS5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKS5yZW1vdmUoKX0sNTApO2FpX3NldF9jb29raWUocSwieCIscCl9KSkpKTphaV9jaGVja19kYXRhLmhhc093blByb3BlcnR5KCJHIikmJmFpX2NoZWNrX2RhdGEuRy5oYXNPd25Qcm9wZXJ0eSgiY3B0IikmJmFpX2NoZWNrX2RhdGEuRy5oYXNPd25Qcm9wZXJ0eSgiY3QiKT9haV9jb29raWUuaGFzT3duUHJvcGVydHkoIkciKSYmYWlfY29va2llLkcuaGFzT3duUHJvcGVydHkoImN0IikmJihkPW5ldyBEYXRlLGY9YWlfY29va2llLkcuY3QtTWF0aC5yb3VuZChkLmdldFRpbWUoKS8xRTMpLDA+PWYmJihkPU1hdGgucm91bmQoZC5nZXRUaW1lKCkvMUUzKSxhaV9zZXRfY29va2llKCJHIiwiY3B0IixhaV9jaGVja19kYXRhLkcuY3B0LQoxKSxhaV9zZXRfY29va2llKCJHIiwiY3QiLE1hdGgucm91bmQoZCs4NjQwMCphaV9jaGVja19kYXRhLkcuY3QpKSkpOihhaV9jb29raWUuaGFzT3duUHJvcGVydHkoIkciKSYmYWlfY29va2llLkcuaGFzT3duUHJvcGVydHkoImNwdCIpJiZhaV9zZXRfY29va2llKCJHIiwiY3B0IiwiIiksYWlfY29va2llLmhhc093blByb3BlcnR5KCJHIikmJmFpX2Nvb2tpZS5HLmhhc093blByb3BlcnR5KCJjdCIpJiZhaV9zZXRfY29va2llKCJHIiwiY3QiLCIiKSkpO2FpX2ludGVybmFsX3RyYWNraW5nJiYidW5kZWZpbmVkIj09PXR5cGVvZiBhaV9pbnRlcm5hbF90cmFja2luZ19ub19jbGlja3MmJmUuYWpheCh7dXJsOmFpX2FqYXhfdXJsLHR5cGU6InBvc3QiLGRhdGE6e2FjdGlvbjoiYWlfYWpheCIsYWlfY2hlY2s6YWlfZGF0YV9pZCxjbGljazpnLHZlcnNpb246YSx0eXBlOmt9LGFzeW5jOiEwfSkuZG9uZShmdW5jdGlvbihxKXtxPXEudHJpbSgpOyIiIT1xJiYocT1KU09OLnBhcnNlKHEpLCJ1bmRlZmluZWQiIT0KdHlwZW9mIHFbIiMiXSYmcVsiIyJdPT1nJiYoYWlfY29va2llPWFpX2xvYWRfY29va2llKCksc2V0VGltZW91dChmdW5jdGlvbigpe2UoInNwYW5bZGF0YS1haS1ibG9jaz0iK2crIl0iKS5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKS5yZW1vdmUoKX0sNTApLHE9TWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKzQzMjAwLGFpX2Nvb2tpZS5oYXNPd25Qcm9wZXJ0eShnKSYmYWlfY29va2llW2ddLmhhc093blByb3BlcnR5KCJ4Iil8fGFpX3NldF9jb29raWUoZywieCIscSkpKX0pO2lmKGFpX2V4dGVybmFsX3RyYWNraW5nJiYidW5kZWZpbmVkIj09PXR5cGVvZiBhaV9leHRlcm5hbF90cmFja2luZ19ub19jbGlja3Mpe3ZhciB2PWJbMl0sdD1iWzNdO20oImNsaWNrIixnLHYsYls0XSxhLHQsITEpfSJmdW5jdGlvbiI9PXR5cGVvZiBhaV9jbGlja19hY3Rpb24mJmFpX2NsaWNrX2FjdGlvbihnLHYsYSx0KX19ZnVuY3Rpb24gcigpe2FpX2NoZWNrX2RhdGE9e307aWYoInVuZGVmaW5lZCI9PQp0eXBlb2YgYWlfaWZyYW1lKXthaV9jb29raWU9YWlfbG9hZF9jb29raWUoKTtlKCIuYWktY2hlY2stYmxvY2siKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9ZSh0aGlzKS5kYXRhKCJhaS1ibG9jayIpLGM9ZSh0aGlzKS5kYXRhKCJhaS1kZWxheS1wdiIpLG49ZSh0aGlzKS5kYXRhKCJhaS1ldmVyeS1wdiIpLGY9ZSh0aGlzKS5kYXRhKCJhaS1oYXNoIiksZD1lKHRoaXMpLmRhdGEoImFpLW1heC1pbXAiKSxwPWUodGhpcykuZGF0YSgiYWktbGltaXQtaW1wLXBlci10aW1lIiksbD1lKHRoaXMpLmRhdGEoImFpLWxpbWl0LWltcC10aW1lIiksdj1lKHRoaXMpLmRhdGEoImFpLW1heC1jbGlja3MiKSx0PWUodGhpcykuZGF0YSgiYWktbGltaXQtY2xpY2tzLXBlci10aW1lIikscT1lKHRoaXMpLmRhdGEoImFpLWxpbWl0LWNsaWNrcy10aW1lIiksdT1lKHRoaXMpLmRhdGEoImFpLWdsb2JhbC1saW1pdC1jbGlja3MtcGVyLXRpbWUiKSx5PWUodGhpcykuZGF0YSgiYWktZ2xvYmFsLWxpbWl0LWNsaWNrcy10aW1lIik7CmlmKCJ1bmRlZmluZWQiIT10eXBlb2YgYyYmMDxjKXthaV9jaGVja19kYXRhLmhhc093blByb3BlcnR5KGEpfHwoYWlfY2hlY2tfZGF0YVthXT17fSk7YWlfY2hlY2tfZGF0YVthXS5kPWM7dmFyIEE9IiI7YWlfY29va2llLmhhc093blByb3BlcnR5KGEpJiZhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImQiKSYmKEE9YWlfY29va2llW2FdLmQpOyIiPT09QSYmYWlfc2V0X2Nvb2tpZShhLCJkIixjLTEpfSJ1bmRlZmluZWQiIT10eXBlb2YgbiYmMjw9biYmKGFpX2NoZWNrX2RhdGEuaGFzT3duUHJvcGVydHkoYSl8fChhaV9jaGVja19kYXRhW2FdPXt9KSwidW5kZWZpbmVkIiE9PXR5cGVvZiBhaV9kZWxheV9zaG93aW5nX3BhZ2V2aWV3c3x8YWlfY29va2llLmhhc093blByb3BlcnR5KGEpJiZhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImQiKXx8KGFpX2Nvb2tpZS5oYXNPd25Qcm9wZXJ0eShhKXx8KGFpX2Nvb2tpZVthXT17fSksYWlfY29va2llW2FdLmQ9MCksYWlfY2hlY2tfZGF0YVthXS5lPQpuKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGQmJjA8ZCl7aWYoYWlfY2hlY2tfZGF0YS5oYXNPd25Qcm9wZXJ0eShhKXx8KGFpX2NoZWNrX2RhdGFbYV09e30pLGFpX2NoZWNrX2RhdGFbYV0uaT1kLGFpX2NoZWNrX2RhdGFbYV0uaD1mLG49Yz0iIixhaV9jb29raWUuaGFzT3duUHJvcGVydHkoYSkmJihhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImkiKSYmKG49YWlfY29va2llW2FdLmkpLGFpX2Nvb2tpZVthXS5oYXNPd25Qcm9wZXJ0eSgiaCIpJiYoYz1haV9jb29raWVbYV0uaCkpLCIiPT09bnx8YyE9ZilhaV9zZXRfY29va2llKGEsImkiLGQpLGFpX3NldF9jb29raWUoYSwiaCIsZil9ZWxzZSBhaV9jb29raWUuaGFzT3duUHJvcGVydHkoYSkmJmFpX2Nvb2tpZVthXS5oYXNPd25Qcm9wZXJ0eSgiaSIpJiYoYWlfc2V0X2Nvb2tpZShhLCJpIiwiIiksYWlfY29va2llW2FdLmhhc093blByb3BlcnR5KCJjIil8fGFpX2Nvb2tpZVthXS5oYXNPd25Qcm9wZXJ0eSgieCIpfHxhaV9zZXRfY29va2llKGEsCiJoIiwiIikpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgcCYmMDxwJiYidW5kZWZpbmVkIiE9dHlwZW9mIGwmJjA8bCl7YWlfY2hlY2tfZGF0YS5oYXNPd25Qcm9wZXJ0eShhKXx8KGFpX2NoZWNrX2RhdGFbYV09e30pO2FpX2NoZWNrX2RhdGFbYV0uaXB0PXA7YWlfY2hlY2tfZGF0YVthXS5pdD1sO2Q9Yz0iIjthaV9jb29raWUuaGFzT3duUHJvcGVydHkoYSkmJihhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImlwdCIpJiYoYz1haV9jb29raWVbYV0uaXB0KSxhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoIml0IikmJihkPWFpX2Nvb2tpZVthXS5pdCkpO2lmKCIiPT09Y3x8IiI9PT1kKWFpX3NldF9jb29raWUoYSwiaXB0IixwKSxjPW5ldyBEYXRlLGM9TWF0aC5yb3VuZChjLmdldFRpbWUoKS8xRTMpLGFpX3NldF9jb29raWUoYSwiaXQiLE1hdGgucm91bmQoYys4NjQwMCpsKSk7MDxkJiYoYz1uZXcgRGF0ZSxjPU1hdGgucm91bmQoYy5nZXRUaW1lKCkvMUUzKSxkPD1jJiYoYWlfc2V0X2Nvb2tpZShhLAoiaXB0IixwKSxhaV9zZXRfY29va2llKGEsIml0IixNYXRoLnJvdW5kKGMrODY0MDAqbCkpKSl9ZWxzZSBhaV9jb29raWUuaGFzT3duUHJvcGVydHkoYSkmJihhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImlwdCIpJiZhaV9zZXRfY29va2llKGEsImlwdCIsIiIpLGFpX2Nvb2tpZVthXS5oYXNPd25Qcm9wZXJ0eSgiaXQiKSYmYWlfc2V0X2Nvb2tpZShhLCJpdCIsIiIpKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHYmJjA8dil7aWYoYWlfY2hlY2tfZGF0YS5oYXNPd25Qcm9wZXJ0eShhKXx8KGFpX2NoZWNrX2RhdGFbYV09e30pLGFpX2NoZWNrX2RhdGFbYV0uYz12LGFpX2NoZWNrX2RhdGFbYV0uaD1mLHA9Yz0iIixhaV9jb29raWUuaGFzT3duUHJvcGVydHkoYSkmJihhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImMiKSYmKHA9YWlfY29va2llW2FdLmMpLGFpX2Nvb2tpZVthXS5oYXNPd25Qcm9wZXJ0eSgiaCIpJiYoYz1haV9jb29raWVbYV0uaCkpLCIiPT09cHx8YyE9ZilhaV9zZXRfY29va2llKGEsCiJjIix2KSxhaV9zZXRfY29va2llKGEsImgiLGYpfWVsc2UgYWlfY29va2llLmhhc093blByb3BlcnR5KGEpJiZhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImMiKSYmKGFpX3NldF9jb29raWUoYSwiYyIsIiIpLGFpX2Nvb2tpZVthXS5oYXNPd25Qcm9wZXJ0eSgiaSIpfHxhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoIngiKXx8YWlfc2V0X2Nvb2tpZShhLCJoIiwiIikpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdCYmMDx0JiYidW5kZWZpbmVkIiE9dHlwZW9mIHEmJjA8cSl7YWlfY2hlY2tfZGF0YS5oYXNPd25Qcm9wZXJ0eShhKXx8KGFpX2NoZWNrX2RhdGFbYV09e30pO2FpX2NoZWNrX2RhdGFbYV0uY3B0PXQ7YWlfY2hlY2tfZGF0YVthXS5jdD1xO2Y9dj0iIjthaV9jb29raWUuaGFzT3duUHJvcGVydHkoYSkmJihhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImNwdCIpJiYodj1haV9jb29raWVbYV0uY3B0KSxhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImN0IikmJgooZj1haV9jb29raWVbYV0uY3QpKTtpZigiIj09PXZ8fCIiPT09ZilhaV9zZXRfY29va2llKGEsImNwdCIsdCksYz1uZXcgRGF0ZSxjPU1hdGgucm91bmQoYy5nZXRUaW1lKCkvMUUzKSxhaV9zZXRfY29va2llKGEsImN0IixNYXRoLnJvdW5kKGMrODY0MDAqcSkpOzA8ZiYmKGM9bmV3IERhdGUsYz1NYXRoLnJvdW5kKGMuZ2V0VGltZSgpLzFFMyksZjw9YyYmKGFpX3NldF9jb29raWUoYSwiY3B0Iix0KSxhaV9zZXRfY29va2llKGEsImN0IixNYXRoLnJvdW5kKGMrODY0MDAqcSkpKSl9ZWxzZSBhaV9jb29raWUuaGFzT3duUHJvcGVydHkoYSkmJihhaV9jb29raWVbYV0uaGFzT3duUHJvcGVydHkoImNwdCIpJiZhaV9zZXRfY29va2llKGEsImNwdCIsIiIpLGFpX2Nvb2tpZVthXS5oYXNPd25Qcm9wZXJ0eSgiY3QiKSYmYWlfc2V0X2Nvb2tpZShhLCJjdCIsIiIpKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHUmJjA8dSYmInVuZGVmaW5lZCIhPXR5cGVvZiB5JiYwPHkpe2FpX2NoZWNrX2RhdGEuaGFzT3duUHJvcGVydHkoIkciKXx8CihhaV9jaGVja19kYXRhLkc9e30pO2FpX2NoZWNrX2RhdGEuRy5jcHQ9dTthaV9jaGVja19kYXRhLkcuY3Q9eTthPXQ9IiI7YWlfY29va2llLmhhc093blByb3BlcnR5KCJHIikmJihhaV9jb29raWUuRy5oYXNPd25Qcm9wZXJ0eSgiY3B0IikmJih0PWFpX2Nvb2tpZS5HLmNwdCksYWlfY29va2llLkcuaGFzT3duUHJvcGVydHkoImN0IikmJihhPWFpX2Nvb2tpZS5HLmN0KSk7aWYoIiI9PT10fHwiIj09PWEpYWlfc2V0X2Nvb2tpZSgiRyIsImNwdCIsdSksYz1uZXcgRGF0ZSxjPU1hdGgucm91bmQoYy5nZXRUaW1lKCkvMUUzKSxhaV9zZXRfY29va2llKCJHIiwiY3QiLE1hdGgucm91bmQoYys4NjQwMCp5KSk7MDxhJiYoYz1uZXcgRGF0ZSxjPU1hdGgucm91bmQoYy5nZXRUaW1lKCkvMUUzKSxhPD1jJiYoYWlfc2V0X2Nvb2tpZSgiRyIsImNwdCIsdSksYWlfc2V0X2Nvb2tpZSgiRyIsImN0IixNYXRoLnJvdW5kKGMrODY0MDAqeSkpKSl9ZWxzZSBhaV9jb29raWUuaGFzT3duUHJvcGVydHkoIkciKSYmCihhaV9jb29raWUuRy5oYXNPd25Qcm9wZXJ0eSgiY3B0IikmJmFpX3NldF9jb29raWUoIkciLCJjcHQiLCIiKSxhaV9jb29raWUuRy5oYXNPd25Qcm9wZXJ0eSgiY3QiKSYmYWlfc2V0X2Nvb2tpZSgiRyIsImN0IiwiIikpfSk7ZSgiLmFpLWNoZWNrLWJsb2NrIikucmVtb3ZlQ2xhc3MoImFpLWNoZWNrLWJsb2NrIik7Zm9yKHZhciBiIGluIGFpX2Nvb2tpZSlmb3IodmFyIGsgaW4gYWlfY29va2llW2JdKWlmKCJkIj09ayl7dmFyIGc9YWlfY29va2llW2JdW2tdOzA8Zz9haV9zZXRfY29va2llKGIsImQiLGctMSk6YWlfY2hlY2tfZGF0YS5oYXNPd25Qcm9wZXJ0eShiKSYmYWlfY2hlY2tfZGF0YVtiXS5oYXNPd25Qcm9wZXJ0eSgiZSIpP2FpX3NldF9jb29raWUoYiwiZCIsYWlfY2hlY2tfZGF0YVtiXS5lLTEpOmFpX2NoZWNrX2RhdGEuaGFzT3duUHJvcGVydHkoYikmJmFpX2NoZWNrX2RhdGFbYl0uaGFzT3duUHJvcGVydHkoImQiKXx8YWlfc2V0X2Nvb2tpZShiLCJkIiwiIil9fX1mdW5jdGlvbiB3KCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1haV0iKSwKZnVuY3Rpb24obil7Zm9yKHZhciBmPSIiLGQ9MTs5Pj1kO2QrKylpZihuLmhhc0F0dHJpYnV0ZSgiZGF0YS1haS0iK2QpKWY9bi5nZXRBdHRyaWJ1dGUoImRhdGEtYWktIitkKTtlbHNlIGJyZWFrOyIiIT1mJiZuLnNldEF0dHJpYnV0ZSgiZGF0YS1haSIsZil9KTtpZihhaV90cmFja19wYWdldmlld3Mpe3ZhciBiPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxrPXdpbmRvdy5pbm5lcldpZHRoLGc9YjxrP2s6YixhPTA7ZS5lYWNoKGFpX3ZpZXdwb3J0X3dpZHRocyxmdW5jdGlvbihuLGYpe2lmKGc+PWYpcmV0dXJuIGE9YWlfdmlld3BvcnRfaW5kZXhlc1tuXSwhMX0pO2I9alF1ZXJ5KGI2NGQoIlltOWtlUT09IikpLmF0dHIoYjY0ZChhaV9hZGJfYXR0cmlidXRlKSk7aWYoInN0cmluZyI9PT10eXBlb2YgYil2YXIgYz1iPT1iNjRkKCJiV0Z6YXc9PSIpOyJzdHJpbmciPT09dHlwZW9mIGImJiJib29sZWFuIj09PXR5cGVvZiBjJiZjJiYoYWlfZXh0ZXJuYWxfdHJhY2tpbmcmJgptKCJhZCBibG9ja2luZyIsMCxhaV92aWV3cG9ydF9uYW1lc1thLTFdLDAsMCwiIiwhMCksYXw9MTI4KTt4PVswLGFdfXIoKTthaV9wcm9jZXNzX2ltcHJlc3Npb25zKCk7MCE9eC5sZW5ndGgmJmFpX2ludGVybmFsX3RyYWNraW5nJiZlLmFqYXgoe3VybDphaV9hamF4X3VybCx0eXBlOiJwb3N0IixkYXRhOnthY3Rpb246ImFpX2FqYXgiLGFpX2NoZWNrOmFpX2RhdGFfaWQsdmlld3M6WzBdLHZlcnNpb25zOlthXX0sYXN5bmM6ITB9KS5kb25lKGZ1bmN0aW9uKG4pe30pO2FpX3RyYWNraW5nX2ZpbmlzaGVkPSEwfWFpX2RlYnVnX3RyYWNraW5nJiYoYWlfYWpheF91cmwrPSI/YWktZGVidWctdHJhY2tpbmc9MSIpO051bWJlci5pc0ludGVnZXI9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24oYil7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgYiYmaXNGaW5pdGUoYikmJk1hdGguZmxvb3IoYik9PT1ifTthaV9pbnN0YWxsX3N0YW5kYXJkX2NsaWNrX3RyYWNrZXJzPWZ1bmN0aW9uKGIpeyJ1bmRlZmluZWQiPT0KdHlwZW9mIGImJihiPWUoImJvZHkiKSk7Yj1lKCJkaXYuYWktdHJhY2tbZGF0YS1haV06dmlzaWJsZSIsYik7dmFyIGs9ZSgpO2IuZWFjaChmdW5jdGlvbigpezA9PWUodGhpcykuZmluZCgiZGl2LmFpLWxhenksIGRpdi5haS1tYW51YWwsIGRpdi5haS1saXN0LW1hbnVhbCwgZGl2LmFpLW1hbnVhbC1hdXRvLCBkaXYuYWktZGVsYXllZCIpLmxlbmd0aCYmKGs9ay5hZGQoZSh0aGlzKSkpfSk7Yj1rO2IucmVtb3ZlQ2xhc3MoImFpLXRyYWNrIik7Yj1iLmZpbmQoImEiKTswIT1iLmxlbmd0aCYmKGFpX2FkdmFuY2VkX2NsaWNrX2RldGVjdGlvbj9iLmNsaWNrKGZ1bmN0aW9uKCl7Zm9yKHZhciBnPWUodGhpcykuY2xvc2VzdCgiZGl2W2RhdGEtYWldIik7InVuZGVmaW5lZCIhPXR5cGVvZiBnLmF0dHIoImRhdGEtYWkiKTspe3ZhciBhPUpTT04ucGFyc2UoYjY0ZChnLmF0dHIoImRhdGEtYWkiKSkpOyJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1BcnJheSYmTnVtYmVyLmlzSW50ZWdlcihhWzFdKSYmCiFnLmhhc0NsYXNzKCJjbGlja2VkIikmJihnLmFkZENsYXNzKCJjbGlja2VkIiksaChhLCJhLmNsaWNrIikpO2c9Zy5wYXJlbnQoKS5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKX19KTpiLmNsaWNrKGZ1bmN0aW9uKCl7Zm9yKHZhciBnPWUodGhpcykuY2xvc2VzdCgiZGl2W2RhdGEtYWldIik7InVuZGVmaW5lZCIhPXR5cGVvZiBnLmF0dHIoImRhdGEtYWkiKTspe3ZhciBhPUpTT04ucGFyc2UoYjY0ZChnLmF0dHIoImRhdGEtYWkiKSkpOyJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1BcnJheSYmTnVtYmVyLmlzSW50ZWdlcihhWzFdKSYmKGgoYSwiYS5jbGljayIpLGNsaWNrZWQ9ITApO2c9Zy5wYXJlbnQoKS5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKX19KSl9O2FpX2luc3RhbGxfY2xpY2tfdHJhY2tlcnM9ZnVuY3Rpb24oYil7InVuZGVmaW5lZCI9PXR5cGVvZiBiJiYoYj1lKCJib2R5IikpO2lmKGFpX2FkdmFuY2VkX2NsaWNrX2RldGVjdGlvbil7dmFyIGs9ZSgiZGl2LmFpLXRyYWNrW2RhdGEtYWldOnZpc2libGUsIGRpdi5haS1yb3RhdGVbZGF0YS1pbmZvXTp2aXNpYmxlIGRpdi5haS10cmFja1tkYXRhLWFpXSIsCmIpOyJ1bmRlZmluZWQiIT10eXBlb2YgZShiKS5hdHRyKCJkYXRhLWFpIikmJmUoYikuaGFzQ2xhc3MoImFpLXRyYWNrIikmJmUoYikuaXMoIjp2aXNpYmxlIikmJihrPWsuYWRkKGIpKTt2YXIgZz1lKCk7ay5lYWNoKGZ1bmN0aW9uKCl7MD09ZSh0aGlzKS5maW5kKCJkaXYuYWktbGF6eSwgZGl2LmFpLW1hbnVhbCwgZGl2LmFpLWxpc3QtbWFudWFsLCBkaXYuYWktbWFudWFsLWF1dG8sIGRpdi5haS1kZWxheWVkIikubGVuZ3RoJiYoZz1nLmFkZChlKHRoaXMpKSl9KTtrPWc7MCE9ay5sZW5ndGgmJmsuaWZyYW1lVHJhY2tlcih7Ymx1ckNhbGxiYWNrOmZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5haV9kYXRhJiZudWxsIT13cmFwcGVyJiYhd3JhcHBlci5oYXNDbGFzcygiY2xpY2tlZCIpKXt3cmFwcGVyLmFkZENsYXNzKCJjbGlja2VkIik7aCh0aGlzLmFpX2RhdGEsImJsdXJDYWxsYmFjayIpO2Zvcih2YXIgYT13cmFwcGVyLmZpbmQoImRpdltkYXRhLWFpXTp2aXNpYmxlIik7InVuZGVmaW5lZCIhPQp0eXBlb2YgYS5hdHRyKCJkYXRhLWFpIik7KXt2YXIgYz1KU09OLnBhcnNlKGI2NGQoYS5hdHRyKCJkYXRhLWFpIikpKTsidW5kZWZpbmVkIiE9PXR5cGVvZiBjJiZjLmNvbnN0cnVjdG9yPT09QXJyYXkmJk51bWJlci5pc0ludGVnZXIoY1sxXSkmJmgoYywiYmx1ckNhbGxiYWNrIElOTkVSIik7YT1hLmZpbmQoImRpdltkYXRhLWFpXTp2aXNpYmxlIil9fX0sb3ZlckNhbGxiYWNrOmZ1bmN0aW9uKGEpe2E9ZShhKS5jbG9zZXN0KCJkaXZbZGF0YS1haV0iKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGEuYXR0cigiZGF0YS1haSIpKXt2YXIgYz1KU09OLnBhcnNlKGI2NGQoYS5hdHRyKCJkYXRhLWFpIikpKTsidW5kZWZpbmVkIiE9PXR5cGVvZiBjJiZjLmNvbnN0cnVjdG9yPT09QXJyYXkmJk51bWJlci5pc0ludGVnZXIoY1sxXSk/KHdyYXBwZXI9YSx0aGlzLmFpX2RhdGE9Yyk6KG51bGwhPXdyYXBwZXImJndyYXBwZXIucmVtb3ZlQ2xhc3MoImNsaWNrZWQiKSx0aGlzLmFpX2RhdGE9d3JhcHBlcj0KbnVsbCl9fSxvdXRDYWxsYmFjazpmdW5jdGlvbihhKXtudWxsIT13cmFwcGVyJiZ3cmFwcGVyLnJlbW92ZUNsYXNzKCJjbGlja2VkIik7dGhpcy5haV9kYXRhPXdyYXBwZXI9bnVsbH0sZm9jdXNDYWxsYmFjazpmdW5jdGlvbihhKXtpZihudWxsIT10aGlzLmFpX2RhdGEmJm51bGwhPXdyYXBwZXImJiF3cmFwcGVyLmhhc0NsYXNzKCJjbGlja2VkIikpZm9yKHdyYXBwZXIuYWRkQ2xhc3MoImNsaWNrZWQiKSxoKHRoaXMuYWlfZGF0YSwiZm9jdXNDYWxsYmFjayIpLGE9d3JhcHBlci5maW5kKCJkaXZbZGF0YS1haV06dmlzaWJsZSIpOyJ1bmRlZmluZWQiIT10eXBlb2YgYS5hdHRyKCJkYXRhLWFpIik7KXt2YXIgYz1KU09OLnBhcnNlKGI2NGQoYS5hdHRyKCJkYXRhLWFpIikpKTsidW5kZWZpbmVkIiE9PXR5cGVvZiBjJiZjLmNvbnN0cnVjdG9yPT09QXJyYXkmJk51bWJlci5pc0ludGVnZXIoY1sxXSkmJmgoYywiZm9jdXNDYWxsYmFjayBJTk5FUiIpO2E9YS5maW5kKCJkaXZbZGF0YS1haV06dmlzaWJsZSIpfX0sCndyYXBwZXI6bnVsbCxhaV9kYXRhOm51bGwsYmxvY2s6bnVsbCx2ZXJzaW9uOm51bGx9KX1haV9pbnN0YWxsX3N0YW5kYXJkX2NsaWNrX3RyYWNrZXJzKGIpfTt2YXIgeD1bXTthaV9wcm9jZXNzX2ltcHJlc3Npb25zPWZ1bmN0aW9uKGIpeyJ1bmRlZmluZWQiPT10eXBlb2YgYiYmKGI9ZSgiYm9keSIpKTt2YXIgaz1bXSxnPVtdLGE9W10sYz1bXSxuPVtdOzAhPXgubGVuZ3RoJiYoay5wdXNoKHhbMF0pLGcucHVzaCh4WzFdKSxhLnB1c2goIlBhZ2V2aWV3cyIpLG4ucHVzaCgwKSxjLnB1c2goIiIpKTt2YXIgZj1lKCJkaXYuYWktdHJhY2tbZGF0YS1haV06dmlzaWJsZTpub3QoLmFpLW5vLXBhZ2V2aWV3KSwgZGl2LmFpLXJvdGF0ZVtkYXRhLWluZm9dOnZpc2libGUgZGl2LmFpLXRyYWNrW2RhdGEtYWldOm5vdCguYWktbm8tcGFnZXZpZXcpIixiKTsidW5kZWZpbmVkIiE9dHlwZW9mIGUoYikuYXR0cigiZGF0YS1haSIpJiZlKGIpLmhhc0NsYXNzKCJhaS10cmFjayIpJiZlKGIpLmlzKCI6dmlzaWJsZSIpJiYKIWUoYikuaGFzQ2xhc3MoImFpLW5vLXBhZ2V2aWV3IikmJihmPWYuYWRkKGIpKTswIT1mLmxlbmd0aCYmZShmKS5lYWNoKGZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBlKHRoaXMpLmF0dHIoImRhdGEtYWkiKSl7dmFyIGw9SlNPTi5wYXJzZShiNjRkKGUodGhpcykuYXR0cigiZGF0YS1haSIpKSk7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgbCYmbC5jb25zdHJ1Y3Rvcj09PUFycmF5KXt2YXIgdj0wLHQ9ZSh0aGlzKS5maW5kKCJkaXYuYWktcm90YXRlW2RhdGEtaW5mb10iKTsxPT10Lmxlbmd0aCYmKHY9SlNPTi5wYXJzZShiNjRkKHQuZGF0YSgiaW5mbyIpKSlbMV0pO2lmKE51bWJlci5pc0ludGVnZXIobFswXSkmJjAhPWxbMF0mJk51bWJlci5pc0ludGVnZXIobFsxXSkpe3Q9MDt2YXIgcT1lKHRoaXMpLmhhc0NsYXNzKCJhaS1uby10cmFja2luZyIpLHU9alF1ZXJ5KGI2NGQoIlltOWtlUT09IikpLmF0dHIoYjY0ZChhaV9hZGJfYXR0cmlidXRlKSk7aWYoInN0cmluZyI9PT0KdHlwZW9mIHUpdmFyIHk9dT09YjY0ZCgiYldGemF3PT0iKTtpZigic3RyaW5nIj09PXR5cGVvZiB1JiYiYm9vbGVhbiI9PT10eXBlb2YgeSl7dmFyIEE9ZSh0aGlzKS5vdXRlckhlaWdodCgpO3U9ZSh0aGlzKS5maW5kKCIuYWktYXR0cmlidXRlcyIpO3UubGVuZ3RoJiZ1LmVhY2goZnVuY3Rpb24oKXtBPj1lKHRoaXMpLm91dGVySGVpZ2h0KCkmJihBLT1lKHRoaXMpLm91dGVySGVpZ2h0KCkpfSk7dT1lKHRoaXMpLmZpbmQoIi5haS1jb2RlIik7dS5sZW5ndGgmJihBPTAsdS5lYWNoKGZ1bmN0aW9uKCl7QSs9ZSh0aGlzKS5vdXRlckhlaWdodCgpfSkpO3kmJjA9PT1BJiYodD0xMjgpfTAhPWUodGhpcykuZmluZCgiZGl2LmFpLWxhenksIGRpdi5haS1tYW51YWwsIGRpdi5haS1saXN0LW1hbnVhbCwgZGl2LmFpLW1hbnVhbC1hdXRvLCBkaXYuYWktZGVsYXllZCIpLmxlbmd0aCYmKHE9ITApO2lmKCFxKWlmKDA9PXYpay5wdXNoKGxbMF0pLGcucHVzaChsWzFdfHQpLGEucHVzaChsWzJdKSwKYy5wdXNoKGxbM10pLG4ucHVzaChsWzRdKTtlbHNlIGZvcih5PTE7eTw9djt5Kyspay5wdXNoKGxbMF0pLGcucHVzaCh5fHQpLGEucHVzaChsWzJdKSxjLnB1c2gobFszXSksbi5wdXNoKGxbNF0pfX19fSk7YWlfY29va2llPWFpX2xvYWRfY29va2llKCk7Zm9yKHZhciBkIGluIGFpX2Nvb2tpZSlpZihrLmluY2x1ZGVzKHBhcnNlSW50KGQpKSlmb3IodmFyIHAgaW4gYWlfY29va2llW2RdKSJpIj09cD8oYj1haV9jb29raWVbZF1bcF0sMDxiJiYoMT09Yj8oYj1uZXcgRGF0ZSxiPU1hdGgucm91bmQoYi5nZXRUaW1lKCkvMUUzKSs2MDQ4MDAsYWlfc2V0X2Nvb2tpZShkLCJpIiwtYikpOmFpX3NldF9jb29raWUoZCwiaSIsYi0xKSkpOiJpcHQiPT1wJiYoYj1haV9jb29raWVbZF1bcF0sMDxiP2FpX3NldF9jb29raWUoZCwiaXB0IixiLTEpOmFpX2NoZWNrX2RhdGEuaGFzT3duUHJvcGVydHkoZCkmJmFpX2NoZWNrX2RhdGFbZF0uaGFzT3duUHJvcGVydHkoImlwdCIpJiZhaV9jaGVja19kYXRhW2RdLmhhc093blByb3BlcnR5KCJpdCIpPwphaV9jb29raWUuaGFzT3duUHJvcGVydHkoZCkmJmFpX2Nvb2tpZVtkXS5oYXNPd25Qcm9wZXJ0eSgiaXQiKSYmKGI9bmV3IERhdGUsMD49YWlfY29va2llW2RdLml0LU1hdGgucm91bmQoYi5nZXRUaW1lKCkvMUUzKSYmKGI9TWF0aC5yb3VuZChiLmdldFRpbWUoKS8xRTMpLGFpX3NldF9jb29raWUoZCwiaXB0IixhaV9jaGVja19kYXRhW2RdLmlwdCksYWlfc2V0X2Nvb2tpZShkLCJpdCIsTWF0aC5yb3VuZChiKzg2NDAwKmFpX2NoZWNrX2RhdGFbZF0uaXQpKSkpOihhaV9jb29raWUuaGFzT3duUHJvcGVydHkoZCkmJmFpX2Nvb2tpZVtkXS5oYXNPd25Qcm9wZXJ0eSgiaXB0IikmJmFpX3NldF9jb29raWUoZCwiaXB0IiwiIiksYWlfY29va2llLmhhc093blByb3BlcnR5KGQpJiZhaV9jb29raWVbZF0uaGFzT3duUHJvcGVydHkoIml0IikmJmFpX3NldF9jb29raWUoZCwiaXQiLCIiKSkpO2lmKGsubGVuZ3RoJiYoYWlfaW50ZXJuYWxfdHJhY2tpbmcmJiJ1bmRlZmluZWQiPT09dHlwZW9mIGFpX2ludGVybmFsX3RyYWNraW5nX25vX2ltcHJlc3Npb25zJiYKKHg9W10sZS5hamF4KHt1cmw6YWlfYWpheF91cmwsdHlwZToicG9zdCIsZGF0YTp7YWN0aW9uOiJhaV9hamF4IixhaV9jaGVjazphaV9kYXRhX2lkLHZpZXdzOmssdmVyc2lvbnM6Z30sYXN5bmM6ITB9KS5kb25lKGZ1bmN0aW9uKGwpe2w9bC50cmltKCk7aWYoIiIhPWwmJihsPUpTT04ucGFyc2UobCksInVuZGVmaW5lZCIhPXR5cGVvZiBsWyIjIl0pKXthaV9jb29raWU9YWlfbG9hZF9jb29raWUoKTt2YXIgdj1NYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFFMykrNDMyMDAsdD1bXSxxO2ZvcihxIGluIGxbIiMiXSlhaV9jb29raWUuaGFzT3duUHJvcGVydHkobFsiIyJdW3FdKSYmYWlfY29va2llW2xbIiMiXVtxXV0uaGFzT3duUHJvcGVydHkoIngiKXx8YWlfc2V0X2Nvb2tpZShsWyIjIl1bcV0sIngiLHYpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmb3IoaW5kZXg9MDtpbmRleDx0Lmxlbmd0aDsrK2luZGV4KWUoInNwYW5bZGF0YS1haS1ibG9jaz0iK3RbaW5kZXhdKyJdIikuY2xvc2VzdCgiZGl2W2RhdGEtYWldIikucmVtb3ZlKCl9LAo1MCl9fSkpLGFpX2V4dGVybmFsX3RyYWNraW5nJiYidW5kZWZpbmVkIj09PXR5cGVvZiBhaV9leHRlcm5hbF90cmFja2luZ19ub19pbXByZXNzaW9ucykpZm9yKGQ9MDtkPGsubGVuZ3RoO2QrKykwIT1rW2RdJiZtKCJpbXByZXNzaW9uIixrW2RdLGFbZF0sbltkXSxnW2RdLGNbZF0sITApfTtqUXVlcnkod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXsidW5kZWZpbmVkIj09dHlwZW9mIGFpX2RlbGF5X3RyYWNraW5nJiYoYWlfZGVsYXlfdHJhY2tpbmc9MCk7c2V0VGltZW91dCh3LGFpX2RlbGF5X3RyYWNraW5nKzE0MDApO3NldFRpbWVvdXQoYWlfaW5zdGFsbF9jbGlja190cmFja2VycyxhaV9kZWxheV90cmFja2luZysxNTAwKX0pfSk7CmFpX3J1bl81ODI2NDQyMjAzMzAgPSBmdW5jdGlvbigpewphaV9kb2N1bWVudF93cml0ZT1kb2N1bWVudC53cml0ZTtkb2N1bWVudC53cml0ZT1mdW5jdGlvbihhKXsiaW50ZXJhY3RpdmUiPT1kb2N1bWVudC5yZWFkeVN0YXRlPyhjb25zb2xlLmVycm9yKCJkb2N1bWVudC53cml0ZSBjYWxsZWQgYWZ0ZXIgcGFnZSBsb2FkOiAiLGEpLCJ1bmRlZmluZWQiIT10eXBlb2YgYWlfanNfZXJyb3JzJiZhaV9qc19lcnJvcnMucHVzaChbImRvY3VtZW50LndyaXRlIGNhbGxlZCBhZnRlciBwYWdlIGxvYWQiLGEsMF0pKTphaV9kb2N1bWVudF93cml0ZS5jYWxsKGRvY3VtZW50LGEpfTsNCmFpX2luc2VydF92aWV3cG9ydF9jb2RlICgnYWktaW5zZXJ0LTQtOTEwMzE2NDYnKTsKYWlfaW5zZXJ0X3ZpZXdwb3J0X2NvZGUgKCdhaS1pbnNlcnQtMS03NTczNzYxNicpOwphaV9pbnNlcnRfdmlld3BvcnRfY29kZSAoJ2FpLWluc2VydC04LTI3NjE0MzYwJyk7CmFpX2luc2VydF92aWV3cG9ydF9jb2RlICgnYWktaW5zZXJ0LTctMTcxNDYwNzUnKTsKYWlfaW5zZXJ0X3ZpZXdwb3J0X2NvZGUgKCdhaS1pbnNlcnQtNi00NzY0NzIzNycpOwphaV9pbnNlcnRfdmlld3BvcnRfY29kZSAoJ2FpLWluc2VydC01LTM4NzQyMzUxJyk7Cn07CmlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnIHx8IChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCkpIGFpX3J1bl81ODI2NDQyMjAzMzAgKCk7IGVsc2UgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAoJ0RPTUNvbnRlbnRMb2FkZWQnLCBhaV9ydW5fNTgyNjQ0MjIwMzMwKTsKYWlfanNfY29kZSA9IHRydWU7fQ0KZnVuY3Rpb24gYWlfd2FpdF9mb3JfanF1ZXJ5KCl7ZnVuY3Rpb24gYihmLGMpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Euc3JjPWY7dmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxlPSExO2Eub25sb2FkPWEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ZXx8dGhpcy5yZWFkeVN0YXRlJiYibG9hZGVkIiE9dGhpcy5yZWFkeVN0YXRlJiYiY29tcGxldGUiIT10aGlzLnJlYWR5U3RhdGV8fChlPSEwLGMmJmMoKSxhLm9ubG9hZD1hLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGQucmVtb3ZlQ2hpbGQoYSkpfTtkLmFwcGVuZENoaWxkKGEpfXdpbmRvdy5qUXVlcnkmJndpbmRvdy5qUXVlcnkuZm4/YWlfcnVuX3NjcmlwdHMoKTooYWlfanF1ZXJ5X3dhaXRpbmdfY291bnRlcisrLDQ9PWFpX2pxdWVyeV93YWl0aW5nX2NvdW50ZXImJmIoImh0dHBzOi8vaHR0bC5jb20udm4vZW4vd3AtaW5jbHVkZXMvanMvanF1ZXJ5L2pxdWVyeS5taW4uanM/dmVyPTMuNy4xIixmdW5jdGlvbigpe2IoImh0dHBzOi8vaHR0bC5jb20udm4vZW4vd3AtaW5jbHVkZXMvanMvanF1ZXJ5L2pxdWVyeS1taWdyYXRlLm1pbi5qcz92ZXI9Ni41LjIiLA0KbnVsbCl9KSwzMD5haV9qcXVlcnlfd2FpdGluZ19jb3VudGVyJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWlfd2FpdF9mb3JfanF1ZXJ5KCl9LDUwKSl9YWlfanF1ZXJ5X3dhaXRpbmdfY291bnRlcj0wO2FpX3dhaXRfZm9yX2pxdWVyeSgpOw0KCg==' ></script> </body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me -->