{"id":122309,"date":"2026-03-24T21:18:25","date_gmt":"2026-03-24T21:18:25","guid":{"rendered":"https:\/\/make.wordpress.org\/core\/?p=122309"},"modified":"2026-03-24T21:18:25","modified_gmt":"2026-03-24T21:18:25","slug":"introducing-the-ai-client-in-wordpress-7-0","status":"publish","type":"post","link":"https:\/\/make.wordpress.org\/core\/2026\/03\/24\/introducing-the-ai-client-in-wordpress-7-0\/","title":{"rendered":"Introducing the AI Client in WordPress 7.0"},"content":{"rendered":"<p class=\"wp-block-paragraph\">WordPress 7.0 includes a built-in AI Client \u2014 a provider-agnostic <span tabindex='0' class='glossary-item-container'>PHP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>PHP<\/span> <span class='glossary-item-description'>The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher<\/span><\/span><\/span> <span tabindex='0' class='glossary-item-container'>API<span class='glossary-item-hidden-content'><span class='glossary-item-header'>API<\/span> <span class='glossary-item-description'>An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.<\/span><\/span><\/span> that lets plugins send prompts to AI models and receive results through a consistent interface. Your <span tabindex='0' class='glossary-item-container'>plugin<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Plugin<\/span> <span class='glossary-item-description'>A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory <a href=\"https:\/\/wordpress.org\/plugins\/\">https:\/\/wordpress.org\/plugins\/<\/a> or can be cost-based plugin from a third-party.<\/span><\/span><\/span> describes <em>what<\/em> it needs and <em>how<\/em> it needs it. WordPress handles routing the request to a suitable model from a provider the site owner has configured.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This post explains the API surface, walks through code examples, and covers what plugin developers need to know.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The entry point: <code>wp_ai_client_prompt()<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every interaction starts with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$builder = wp_ai_client_prompt();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This returns a <code>WP_AI_Client_Prompt_Builder<\/code> object, a fluent builder that offers a myriad of ways to customize your prompt. You chain configuration methods and then call a generation method to receive a result:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$text = wp_ai_client_prompt( 'Summarize the benefits of caching in WordPress.' )\n    -&gt;using_temperature( 0.7 )\n    -&gt;generate_text();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can pass the prompt text directly as a parameter to <code>wp_ai_client_prompt()<\/code> for convenience, though alternatively the <code>with_text()<\/code> method is available for building the prompt incrementally.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Text generation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s a basic text generation example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$text = wp_ai_client_prompt( 'Write a haiku about WordPress.' )\n    -&gt;generate_text();\n\nif ( is_wp_error( $text ) ) {\n    \/\/ Handle error.\n    return;\n}\n\necho wp_kses_post( $text );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can pass a <span tabindex='0' class='glossary-item-container'>JSON<span class='glossary-item-hidden-content'><span class='glossary-item-header'>JSON<\/span> <span class='glossary-item-description'>JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.<\/span><\/span><\/span> schema so that the model returns structured data as a JSON string:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$schema = array(\n    'type'  =&gt; 'array',\n    'items' =&gt; array(\n        'type'       =&gt; 'object',\n        'properties' =&gt; array(\n            'plugin_name' =&gt; array( 'type' =&gt; 'string' ),\n            'category'    =&gt; array( 'type' =&gt; 'string' ),\n        ),\n        'required' =&gt; array( 'plugin_name', 'category' ),\n    ),\n);\n\n$json = wp_ai_client_prompt( 'List 5 popular WordPress plugins with their primary category.' )\n    -&gt;as_json_response( $schema )\n    -&gt;generate_text();\n\nif ( is_wp_error( $json ) ) {\n    \/\/ Handle error.\n    return;\n}\n\n$data = json_decode( $json, true );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can request multiple response candidates as variations for the same prompt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$texts = wp_ai_client_prompt( 'Write a tagline for a photography blog.' )\n    -&gt;generate_texts( 4 );<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Image generation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s a basic image generation example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">use WordPress\\AiClient\\Files\\DTO\\File;\n\n$image_file = wp_ai_client_prompt( 'A futuristic WordPress logo in neon style' )\n    -&gt;generate_image();\n\nif ( is_wp_error( $image_file ) ) {\n    \/\/ Handle error.\n    return;\n}\n\necho '&lt;img src=\"' . esc_url( $image_file-&gt;getDataUri() ) . '\" alt=\"\"&gt;';<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>generate_image()<\/code> returns a <code>File<\/code> DTO with access to the image data via <code>getDataUri()<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Similar to text generation, you can request multiple variations of the same image:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$images = wp_ai_client_prompt( 'Aerial shot of snowy plains, cinematic.' )\n    -&gt;generate_images( 4 );\n\nif ( is_wp_error( $images ) ) {\n    \/\/ Handle error.\n    return;\n}\n\nforeach ( $images as $image_file ) {\n    echo '&lt;img src=\"' . esc_url( $image_file-&gt;getDataUri() ) . '\"&gt;';\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Getting the full result object<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For richer metadata, e.g. covering provider and model information, use <code>generate_*_result()<\/code> instead. For example, for image generation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$result = wp_ai_client_prompt( 'A serene mountain landscape.' )\n    -&gt;generate_image_result();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This returns a <code>GenerativeAiResult<\/code> object that provides several pieces of additional information, including token usage and which provider and which model responded to the prompt. The most relevant methods for this additional metadata are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>getTokenUsage()<\/code>: Returns the token usage, broken down by input, output, and optionally thinking.<\/li>\n\n\n\n<li><code>getProviderMetadata()<\/code>: Returns metadata about the provider that handled the request.<\/li>\n\n\n\n<li><code>getModelMetadata()<\/code>: Returns metadata about the model that handled the request (through the provider).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>GenerativeAiResult<\/code> object is serializable and can be passed directly to <code>rest_ensure_response()<\/code>, making it straightforward to expose AI features through the <span tabindex='0' class='glossary-item-container'>REST API<span class='glossary-item-hidden-content'><span class='glossary-item-header'>REST API<\/span> <span class='glossary-item-description'>The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think \u201cphone app\u201d or \u201cwebsite\u201d) can communicate with the data store (think \u201cdatabase\u201d or \u201cfile system\u201d)\r<a href=\"https:\/\/developer.wordpress.org\/rest-api\/\">https:\/\/developer.wordpress.org\/rest-api\/<\/a><\/span><\/span><\/span>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Available <code>generate_*_result()<\/code> methods:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>generate_text_result()<\/code><\/li>\n\n\n\n<li><code>generate_image_result()<\/code><\/li>\n\n\n\n<li><code>convert_text_to_speech_result()<\/code><\/li>\n\n\n\n<li><code>generate_speech_result()<\/code><\/li>\n\n\n\n<li><code>generate_video_result()<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Use the appropriate method for the modality you are working with. Each returns a <code>GenerativeAiResult<\/code> object with rich metadata.<\/p>\n\n\n\n<h3 id=\"ai-model-preferences\" class=\"wp-block-heading\">Model preferences<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The models available on each WordPress site depends on which AI providers the administrators of that site have configured in the <strong>Settings &gt; Connectors<\/strong> screen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since your plugin doesn\u2019t control which providers are available on each site, use <code>using_model_preference()<\/code> to indicate which models would be ideal. The AI Client will use the first model from that list that is available, falling back to any compatible model if none are available:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$text_result = wp_ai_client_prompt( 'Summarize the history of the printing press.' )\n    -&gt;using_temperature( 0.1 )\n    -&gt;using_model_preference(\n        'claude-sonnet-4-6',\n        'gemini-3.1-pro-preview',\n        'gpt-5.4'\n    )\n    -&gt;generate_text_result();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is a preference, not a requirement. Your plugin should function without it. Keep in mind that you can test or verify which model was used by looking at the full result object, under the <code>providerMetadata<\/code> and <code>modelMetadata<\/code> properties.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you don\u2019t specify a model preference, the first model encountered across the configured providers that is suitable will be used. It is up to the individual provider implementations to sort the provider\u2019s models in a reasonable manner, e.g. so that more recent models appear before older models of the same model family. The three initial <a href=\"#official-provider-plugins\">official provider plugins<\/a> (see below) organize models in that way, as recommended.<\/p>\n\n\n\n<h2 id=\"ai-feature-detection\" class=\"wp-block-heading\">Feature detection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Not every WordPress site will have an AI provider configured, and not every provider supports every <span tabindex='0' class='glossary-item-container'>capability<span class='glossary-item-hidden-content'><span class='glossary-item-header'>capability<\/span> <span class='glossary-item-description'>A\u00a0<strong>capability<\/strong>\u00a0is permission to perform one or more types of task. Checking if a user has a capability is performed by the <code>current_user_can<\/code> function. Each user of a WordPress site might have some permissions but not others, depending on their\u00a0role. For example, users who have the Author role usually have permission to edit their own posts (the \u201cedit_posts\u201d capability), but not permission to edit other users\u2019 posts (the \u201cedit_others_posts\u201d capability).<\/span><\/span><\/span> and every option. Before showing AI-powered <span tabindex='0' class='glossary-item-container'>UI<span class='glossary-item-hidden-content'><span class='glossary-item-header'>UI<\/span> <span class='glossary-item-description'>User interface<\/span><\/span><\/span>, check whether the feature can work:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$builder = wp_ai_client_prompt( 'test' )\n    -&gt;using_temperature( 0.7 );\n\nif ( $builder-&gt;is_supported_for_text_generation() ) {\n    \/\/ Safe to show text generation UI.\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These checks do not make API calls. They use deterministic logic to match the builder\u2019s configuration against the <span tabindex='0' class='glossary-item-container'>capabilities<span class='glossary-item-hidden-content'><span class='glossary-item-header'>capability<\/span> <span class='glossary-item-description'>A\u00a0<strong>capability<\/strong>\u00a0is permission to perform one or more types of task. Checking if a user has a capability is performed by the <code>current_user_can<\/code> function. Each user of a WordPress site might have some permissions but not others, depending on their\u00a0role. For example, users who have the Author role usually have permission to edit their own posts (the \u201cedit_posts\u201d capability), but not permission to edit other users\u2019 posts (the \u201cedit_others_posts\u201d capability).<\/span><\/span><\/span> of available models. As such, they are fast to run and there is no cost incurred by calling them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Available support check methods:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>is_supported_for_text_generation()<\/code><\/li>\n\n\n\n<li><code>is_supported_for_image_generation()<\/code><\/li>\n\n\n\n<li><code>is_supported_for_text_to_speech_conversion()<\/code><\/li>\n\n\n\n<li><code>is_supported_for_speech_generation()<\/code><\/li>\n\n\n\n<li><code>is_supported_for_video_generation()<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Use these to conditionally load your UI, show a helpful notice when the feature is unavailable, or skip registering UI altogether. Never assume that AI features will be available just because WordPress 7.0 is installed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Advanced configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">System instructions<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$text = wp_ai_client_prompt( 'Explain caching.' )\n    -&gt;using_system_instruction( 'You are a WordPress developer writing documentation.' )\n    -&gt;generate_text();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Max tokens<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$text = wp_ai_client_prompt( 'Explain quantum computing in complicated terms.' )\n    -&gt;using_max_tokens( 8000 )\n    -&gt;generate_text();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Output file type and orientation for images<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">use WordPress\\AiClient\\Files\\Enums\\FileTypeEnum;\nuse WordPress\\AiClient\\Files\\Enums\\MediaOrientationEnum;\n\n$result = wp_ai_client_prompt()\n    -&gt;with_text( 'A vibrant sunset over the ocean.' )\n    -&gt;as_output_file_type( FileTypeEnum::inline() )\n    -&gt;as_output_media_orientation( MediaOrientationEnum::from( 'landscape' ) )\n    -&gt;generate_image_result();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Multimodal output<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">use WordPress\\AiClient\\Messages\\Enums\\ModalityEnum;\n\n$result = wp_ai_client_prompt( 'Create a recipe for a chocolate cake and include photos for the steps.' )\n    -&gt;as_output_modalities( ModalityEnum::text(), ModalityEnum::image() )\n    -&gt;generate_result();\n\nif ( is_wp_error( $result ) ) {\n    \/\/ Handle error.\n    return;\n}\n\nforeach ( $result-&gt;toMessage()-&gt;getParts() as $part ) {\n    if ( $part-&gt;isText() ) {\n        echo wp_kses_post( $part-&gt;getText() );\n    } elseif ( $part-&gt;isFile() &amp;&amp; $part-&gt;getFile()-&gt;isImage() ) {\n        echo '&lt;img src=\"' . esc_url( $part-&gt;getFile()-&gt;getDataUri() ) . '\"&gt;';\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Additional builder methods<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The full list of configuration methods is available via the <code>WP_AI_Client_Prompt_Builder<\/code> class. Key methods include:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Configuration<\/strong><\/th><th><strong>Method<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Prompt text<\/td><td><code>with_text()<\/code><\/td><\/tr><tr><td>File input<\/td><td><code>with_file()<\/code><\/td><\/tr><tr><td>Conversation history (relevant for multi-turn \/ chats)<\/td><td><code>with_history()<\/code><\/td><\/tr><tr><td>System instruction<\/td><td><code>using_system_instruction()<\/code><\/td><\/tr><tr><td>Temperature<\/td><td><code>using_temperature()<\/code><\/td><\/tr><tr><td>Max tokens<\/td><td><code>using_max_tokens()<\/code><\/td><\/tr><tr><td>Top-p \/ Top-k<\/td><td><code>using_top_p(), using_top_k()<\/code><\/td><\/tr><tr><td>Stop sequences<\/td><td><code>using_stop_sequences()<\/code><\/td><\/tr><tr><td>Model preference<\/td><td><code>using_model_preference()<\/code><\/td><\/tr><tr><td>Output modalities<\/td><td><code>as_output_modalities()<\/code><\/td><\/tr><tr><td>Output file type<\/td><td><code>as_output_file_type()<\/code><\/td><\/tr><tr><td>JSON response<\/td><td><code>as_json_response()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Error handling<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>wp_ai_client_prompt()<\/code> generator methods return <code>WP_Error<\/code> on failure, following WordPress conventions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">$text = wp_ai_client_prompt( 'Hello' )\n    -&gt;generate_text();\n\nif ( is_wp_error( $text ) ) {\n    \/\/ Handle the error.\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When used in a REST API callback, both <code>GenerativeAiResult<\/code> and <code>WP_Error<\/code> can be passed to <code>rest_ensure_response()<\/code> directly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">function my_rest_callback( WP_REST_Request $request ) {\n    $result = wp_ai_client_prompt( $request-&gt;get_param( 'prompt' ) )\n        -&gt;generate_text_result();\n\n    return rest_ensure_response( $result );\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If an error occurs, it will automatically have a semantically meaningful <span tabindex='0' class='glossary-item-container'>HTTP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>HTTP<\/span> <span class='glossary-item-description'>HTTP is an acronym for Hyper Text Transfer Protocol. HTTP  is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands.<\/span><\/span><\/span> response code attached to it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Controlling AI availability<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For granular control, the <code>wp_ai_client_prevent_prompt<\/code> <span tabindex='0' class='glossary-item-container'>filter<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Filter<\/span> <span class='glossary-item-description'>Filters are one of the two types of Hooks <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\">https:\/\/codex.wordpress.org\/Plugin_API\/Hooks<\/a>. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.<\/span><\/span><\/span> allows preventing specific prompts from executing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">add_filter(\n    'wp_ai_client_prevent_prompt',\n    function ( bool $prevent, WP_AI_Client_Prompt_Builder $builder ): bool {\n        \/\/ Example: Block all prompts for non-admin users.\n        if ( ! current_user_can( 'manage_options' ) ) {\n            return true;\n        }\n        return $prevent;\n    },\n    10,\n    2\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When a prompt is prevented:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No AI call is attempted.<\/li>\n\n\n\n<li><code>is_supported_*()<\/code> methods return <code>false<\/code>, allowing plugins to gracefully hide their UI.<\/li>\n\n\n\n<li><code>generate_*()<\/code> methods return a <code>WP_Error<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Architecture<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The AI Client in WordPress 7.0 consists of two layers:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>PHP AI Client<\/strong> (<a href=\"https:\/\/github.com\/WordPress\/php-ai-client\">wordpress\/php-ai-client<\/a>) \u2014 A provider-agnostic PHP SDK bundled in <span tabindex='0' class='glossary-item-container'>Core<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Core<\/span> <span class='glossary-item-description'>Core is the set of software required to run WordPress. The Core Development Team builds WordPress.<\/span><\/span><\/span> as an external library. This is the engine that handles provider communication, model selection, and response normalization. Since it is technically a WordPress agnostic PHP SDK which other PHP projects can use too, it uses camelCase method naming and makes use of exceptions.<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>WordPress wrapper<\/strong> \u2014 Core\u2019s <code>WP_AI_Client_Prompt_Builder<\/code> class wraps the PHP AI Client with WordPress conventions: snake_case methods, <code>WP_Error<\/code> returns, and integration with WordPress HTTP transport, the Abilities API, the Connectors\/Settings infrastructure, and the WordPress <span tabindex='0' class='glossary-item-container'>hooks<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Hooks<\/span> <span class='glossary-item-description'>In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same.<\/span><\/span><\/span> system.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>wp_ai_client_prompt()<\/code> function is the recommended entry point. It returns a <code>WP_AI_Client_Prompt_Builder<\/code> instance that catches exceptions from the underlying SDK and converts them to <code>WP_Error<\/code> objects.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Credential management<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">API keys are managed through the <a href=\"https:\/\/make.wordpress.org\/core\/2026\/03\/18\/introducing-the-connectors-api-in-wordpress-7-0\/\">Connectors API<\/a>. AI provider plugins that register with the PHP AI Client\u2019s provider registry get automatic connector integration \u2014 including the <strong>Settings &gt; Connectors<\/strong> <span tabindex='0' class='glossary-item-container'>admin<span class='glossary-item-hidden-content'><span class='glossary-item-header'>admin<\/span> <span class='glossary-item-description'>(and super admin)<\/span><\/span><\/span> UI for API key management. Plugin developers using the AI Client to build features do not need to handle credentials at all.<\/p>\n\n\n\n<h3 id=\"official-provider-plugins\" class=\"wp-block-heading\">Official provider plugins<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress Core does not bundle any AI providers directly. Instead, they are developed and maintained as plugins, which allows for more flexible and rapid iteration speed, in accordance with how fast AI evolves. The AI Client in WordPress Core provides the stable foundation, and as an abstraction layer is sufficiently detached from provider specific requirements that may change overnight.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While anyone is able to implement new provider plugins, the WordPress project itself has developed three initial flagship implementations, to integrate with the most popular AI providers. These plugins are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wordpress.org\/plugins\/ai-provider-for-anthropic\/\">AI Provider for Anthropic<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wordpress.org\/plugins\/ai-provider-for-google\/\">AI Provider for Google<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wordpress.org\/plugins\/ai-provider-for-openai\/\">AI Provider for OpenAI<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Separately available: Client-side <span tabindex='0' class='glossary-item-container'>JavaScript<span class='glossary-item-hidden-content'><span class='glossary-item-header'>JavaScript<\/span> <span class='glossary-item-description'>JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user\u2019s browser.\r<a href=\"https:\/\/www.javascript.com\/\">https:\/\/www.javascript.com<\/a><\/span><\/span><\/span> API<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A JavaScript API with a similar fluent prompt builder is available via the <a href=\"https:\/\/github.com\/WordPress\/wp-ai-client\">wp-ai-client<\/a> package. It uses REST endpoints under the hood to connect to the server-side infrastructure. This API is not part of Core, and it is still being evaluated whether this approach is scalable for general use. Because the API allows arbitrary prompt execution from the client-side, it requires a high-privilege capability check, which by default is only granted to administrators. This restriction is necessary to prevent untrusted users from sending any prompt to any configured AI provider. As such, using this approach in a distributed plugin is not recommended.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For now, the recommended approach is to implement individual REST API endpoints for each specific AI feature your plugin provides, and have your JavaScript functionality call those endpoints. This allows you to enforce granular permission checks and limit the scope of what can be executed from the client-side. It also keeps the actual AI prompt handling and configuration fully scoped to be server-side only.<\/p>\n\n\n\n<h2 id=\"ai-migration-wp70\" class=\"wp-block-heading\"><span tabindex='0' class='glossary-item-container'>Migration<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Migration<\/span> <span class='glossary-item-description'>Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies.<\/span><\/span><\/span> from php-ai-client and wp-ai-client<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you have been using these packages in your plugin(s) before, here\u2019s what to know.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Recommended: require WordPress 7.0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The simplest path is to update your plugin\u2019s Requires at least <span tabindex='0' class='glossary-item-container'>header<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Header<\/span> <span class='glossary-item-description'>The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor\u2019s opinion about your content and you\/ your organization\u2019s brand. It may also look different on different screen sizes.<\/span><\/span><\/span> to 7.0 and remove the Composer dependencies on <code>wordpress\/php-ai-client<\/code> and its transitive dependencies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Replace any <code>AI_Client::prompt()<\/code> calls with <code>wp_ai_client_prompt()<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the <code>wordpress\/wp-ai-client<\/code> package, if you are not using the package\u2019s REST API endpoints or JavaScript API, you can simply remove it as a dependency, since everything else it does is now part of WordPress Core.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">If you must support WordPress &lt; 7.0<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">PHP AI Client (<code>wordpress\/php-ai-client<\/code>)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">If your plugin still needs to run on WordPress versions before 7.0 while also bundling wordpress\/php-ai-client, you will need a conditional autoloader workaround. The PHP AI Client and its dependencies are now loaded by Core on 7.0+, so loading them again via Composer will cause conflicts (duplicate class definitions).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The solution: only register your Composer autoloader for these dependencies when running on WordPress versions before 7.0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">if ( ! function_exists( 'wp_get_wp_version' ) || version_compare( wp_get_wp_version(), '7.0', '&lt;' ) ) {\n    require_once __DIR__ . '\/vendor\/autoload.php';\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Due to how Composer\u2019s autoloader works \u2014 loading all dependencies at once rather than selectively \u2014 a more granular approach was not feasible. This means the conditional check needs to wrap the entire autoloader. Alternatively, break your PHP dependencies apart in two separate Composer setups, one that can always be autoloaded, and another one for the <code>wordpress\/php-ai-client<\/code> package and its dependencies only, which would be conditionally autoloaded.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">WP AI Client (<code>wordpress\/wp-ai-client<\/code>)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>wordpress\/wp-ai-client<\/code> package handles the WordPress 7.0 transition automatically. On 7.0+, it disables its own PHP SDK infrastructure (since Core handles it natively) but keeps the REST API endpoints and JavaScript API active, as those aren\u2019t in Core yet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can continue loading this package unconditionally. It detects the WordPress version and only activates the parts that aren\u2019t already provided by Core. No conditional loading needed. However, make sure to stay up to date on this package, because it will likely be discontinued soon, in favor of moving the REST API endpoints and JavaScript API into <span tabindex='0' class='glossary-item-container'>Gutenberg<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Gutenberg<\/span> <span class='glossary-item-description'>The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses \u2018blocks\u2019 to add richness rather than shortcodes, custom HTML etc.\r<a href=\"https:\/\/wordpress.org\/gutenberg\/\">https:\/\/wordpress.org\/gutenberg\/<\/a><\/span><\/span><\/span>. There are ongoing discussions on whether these should be merged into Core too, see <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/64872\">#64872<\/a> and <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/64873\">#64873<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See the <a href=\"https:\/\/github.com\/WordPress\/wp-ai-client\/blob\/trunk\/UPGRADE.md\">WP AI Client upgrade guide<\/a> for additional migration details.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Additional resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span tabindex='0' class='glossary-item-container'>Trac<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Trac<\/span> <span class='glossary-item-description'>An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.<\/span><\/span><\/span> <span tabindex='0' class='glossary-item-container'>ticket<span class='glossary-item-hidden-content'><span class='glossary-item-header'>ticket<\/span> <span class='glossary-item-description'>Created for both bug reports and feature development on the bug tracker.<\/span><\/span><\/span>: <a href=\"https:\/\/core.trac.wordpress.org\/ticket\/64591\">#64591<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/php-ai-client\">PHP AI Client<\/a> (bundled library)<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/WordPress\/wp-ai-client\">WP AI Client<\/a> (original package, now mostly merged into Core)<\/li>\n\n\n\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2026\/02\/03\/proposal-for-merging-wp-ai-client-into-wordpress-7-0\/\">Original merge proposal<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\"><em>Props to <a href=\"https:\/\/profiles.wordpress.org\/gziolo\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>gziolo<\/a> <a href=\"https:\/\/profiles.wordpress.org\/nilambar\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>nilambar<\/a> <a href=\"https:\/\/profiles.wordpress.org\/laurisaarni\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>laurisaarni<\/a> <a href=\"https:\/\/profiles.wordpress.org\/justlevine\/\" class=\"mention\"><span class=\"mentions-prefix\">@<\/span>justlevine<\/a> for reviewing this post.<\/em><\/p>\n<p class=\"o2-appended-tags\"><a href=\"https:\/\/make.wordpress.org\/core\/tag\/core-ai\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>core-ai<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/7-0\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>7-0<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes-7-0\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes-7-0<\/a><\/p><nav class='o2-post-footer-actions'><ul class='o2-post-footer-action-row'><li class='o2-post-footer-action'><a href=\"https:\/\/login.wordpress.org\/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F03%2F24%2Fintroducing-the-ai-client-in-wordpress-7-0%2F%23respond&#038;locale=en_US\" title=\"Login to Reply\"  class=\"genericon  genericon-reply\"  data-action=\"login-to-reply\"  data-actionstate=\"default\" >Login to Reply<\/a><\/li><\/ul><div class='o2-post-footer-action-likes'><\/div><ul class='o2-post-footer-action-row'><\/ul><\/nav>","protected":false},"excerpt":{"rendered":"<p>WordPress 7.0 includes a built-in AI Client \u2014 a provider-agnostic PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. that [&hellip;]<\/p>\n","protected":false},"author":10972453,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"{\"document\":\"AADiBtGzksIZnzmY687eFdGzksIZ1wWY687eFbSPyYIBkbOSwhn0j8mCARnRs5LCGQD0j8mCAZ4B0bOSwhkA9I\/JggEVkbOSwhmY687eFZGzksIZmOvO3hWRs5LCGZjrzt4VkbOSwhmY687eFZGzksIZ9I\/JggEG0bOSwhkytI\/JggHRs5LCGQe0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIB0bOSwhkAmOvO3hWRs5LCGZjrzt4VkbOSwhmY687eFZGzksIZmOvO3hXRs5LCGQK0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhm0j8mCAZjrzt4V0bOSwhkB2OvO3hUA0bOSwhkItI\/JggGRs5LCGbSPyYIBkbOSwhm0j8mCAZGzksIZ9I\/JggEAkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhn0j8mCAQCRs5LCGfSPyYIBAJGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhm0j8mCAZGzksIZ9I\/JggEAkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhn0j8mCAQCRs5LCGfSPyYIBCZGzksIZ9I\/JggEOmOvO3hXRs5LCGQD0j8mCAeMBkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGfSPyYIBAJGzksIZ9I\/JggEUkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhn0j8mCAQCRs5LCGbSPyYIBkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGfSPyYIBAJGzksIZ9I\/JggEAkbOSwhn0j8mCAQWRs5LCGbSPyYIBkbOSwhm0j8mCAZGzksIZtI\/JggHRs5LCGQX0j8mCAQrRs5LCGQO0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhm0j8mCAdGzksIZDrSPyYIBkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBkbOSwhn0j8mCAQCRs5LCGfSPyYIBANGzksIZALSPyYIBkbOSwhm0j8mCAZGzksIZtI\/JggGRs5LCGbSPyYIBu0AaAQtUNpYBAQEIAEgCCEqcDLADrgOMARySARaYBhywAooBOooBoAEShgEWrAWWAZABHI4COhasARwwOjg8ggG2AbABFLgBFQCMA4oBkAE6igGgARKWARaqARyiAoIBFoQCmAGoARycAbACPJYBrAESsAIWggO+ARykAoQBjgGkARKYAaICEha0AbIDHI4CigEWvAW8BKABhAGGAZYBiAGGAZAEnAGAB4QJHLgCigGIATiCASISiAEWsgeaAZQGHKABjAGAAqgBEhaMBpABnAGeAbABoAGeAYYHpAGgARyyAb4COhaQAhywAYAClgK4AbQBqgKKARacARy2AaIDoAI+jgGkARKKAoYBogGsArICEwAWjgEcsAKKAToWrgG6A4QBIo4BjAGmAboBngGaAbgBqgGyAbABrAGgAZQBvgIcnAE6iwEAEhaMBBy+AZYCiAGeARIWpgOuAbIDHCaMAaAChgKuASgSMBQWEhQWhgGEA6oBlgGKASqUA5IEpASQAbwBlAyGC7IGpAGoDa4BnBaEDYgGuAK+AbYFmgKCB4oDlgSUCoQEHJgCrAESFooOkgScCKQLngSgAZoCrgKsA4oEwrQEigzaDJ7GBAEBCAJCSACwAwEBCAIiZEgAnAEBAQgCQkgAjAEBAQgCQkgAkgEBAQgCHjIEAqgEwAZIAJAGsAK6AaoBigGQAhKGAQEBCAIOCqIBKh4UFgMA8gNIAKQFAQEIAkJIAC4mAQEIAkJIAI4CqgGCATC2AagBhgOiAoYEmgS0AZgDhAEUjAO6AYACqgGKAZACEpYBAQEIAkJIAIABogKyAbwBMAEBCAJCSAA+nAGwAqwBlgGcAhKwArYCAQEIAkJIAJQBpAK0AY4BlAISmAGSAxKMAQEBCAImFAQaCCbIAkgArgOOAroBAQEIAh4aJBoKAwAEAwYEBgMCBgIEAgQCDAQIBAYFAAMCBAMBDAMABQACBAMDBAMBBwAFAAIGChDkBUgAtAW8BAEBCAIUJnxIAJwBAQEIAEgOAgEBCAJKADoBAQgCSgA8AQEIAgROAIwBAQEIAkoAPgEBCAJK0ASMBQEBCAKiAiTIA0gAjAQBAQgCQkgAMgEBCAJCSAC0BQEBCAKkAjDWA0gAgAm4AroBuAGYAqICggKCAbgBAQEIAr4FIAoaxAdIAKoHAQEIAk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\/G6QeEBIAEtgSs3AfyzQesBJbJB9a9B569B\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\/QeM\/QcDAfDeB7LeBwLOyweQywfMwAeOwAfuvwewvwcC7LcHrrcHAtazB5izBwLErgeGrgfqrQesrQcC7OcGrucGzNMGjtMGys8GjM8G\/vUDhAEEgggSBLotigGuBNQDCt4qIhQiEDQWNBA+Iho+IhocMIoBFAyMAxI4EgQerhwwzBsKqgcSBJoEsAISBCCWAZgN8gsKqAEEMpoTEgQojgGyBdQECpgBqAEEJAaIBhIEqBASMhIwgAGKASoTAASqAxI0LI4BlgGGBRKmAhIEsFsSMhIE9BC0AZYCEpQBEpoBEpICEgT6H5QDEogCEgQijgEwHgo0BBYELCYaigEEFjI2BBIcpAEEEgQkBhKqGBIEHooBOIgCoAEELBoELKYBqAKMAaACvAG2ATgaOBQWErgfhCisAfTCEhqAATo+AB6QxQXiwwUgRowBACSIAhpejgIsABg2ADIAHAAcACwAHgAcAByYASYAGDYANAAoAB4AHAAcADQsoucF2PEFCwGywgqKAQMBBAMFBAMBhlcDBgAFAAMAAQHsqAsJAaLYD96PDwMBqsoL2scLCQEiAwGaxgvWxgsJAQwDAazFC9iJDIhGAQy8AvwCjgfQB9YCCQGgCgMBqroL\/LELzhoBAZIYCQG+BgMBnKwL7rILEJoCpooKFAL+iQoQIugcAwCc3woC\/sAKCQGO3A0UAwCgKQMADND9DQMBtKIL\/J4LCQHZSygAIQEnAigGJwAoDSEBJwAEAAcAIQAoAScBKAAnAKEAAQCBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAoQCEAMcAIQAoAScBBAAoACcAxwAhACgBJwEEAIQAKAAnAMcAIQAoAScBBAAoACcAxwAhACgAIQAnAQQAIQAnAMcAIQAoAScBBACEAIEChAAoACcAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMcAIQAoAScBBACBAIQCgQCEAYEAhAAoACcAxwAhACgBJwEEACgAJwDBAAAAxwAhACgAIQAnAQEAIQAnAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMcAIQAoAScBAQAhACcAwQAAAMEAAADBAAAAwQAAAMcAIQAoACEAJwEBACEAJwDBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMcAIQAoAScBAQAhACcAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAxwAhACgBJwEEAIEAhACBAIQCKAAnAMEAAADBAAAAxwAhACgBJwEEAIEAhAGBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQBgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAKAAnAMEAAADHACEAKAEnAQQAhAEoACcAxwAhACgBJwAoAScABwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEAIQAJwCHACEAKAEnAQQAJwCHACEAKAEnAQQAJwDHACEAKAEnAQQAhAEoACcAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBACEASgAJwDBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMcAIQAoAScBBACEAygAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBACEACgAJwDBAAAAwQAAAMEAAADBAAAAwQAAAMcAIQAoAScBBACBAIQAKAAnAMcAIQAoAScBBAAoACcAxwAhACgBJwAoAScABwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEACcAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBAAoACcAxwAhACgAIQAnAQEAIQAnAMEAAADBAAAAxwAhACgBJwEBAIQAgQCEAIEAhACBAIQAgQCEASgAJwDHACEAKAAhACcBAQAhACcAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAxwAhACgAIQAnAQQAgQCEAIEAhACBAIQAgQAhACcAxwAhACgAIQAnAQEAIQAnAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADHACEAKAAhACcBBACEAIEAhAUhACcAwQAAAMEAAADBAAAAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAhAEoACcAxwAhACgBJwAoACcAIQEoACcAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAhAGBAIQCKAAnAMcAIQAoACEAJwEBACEAJwDBAAAAwQAAAMEAAADBAAAAxwAhACgBJwEEAIQFKAAnAMcAIQAoACEAJwEBACEAJwDBAAAAwQAAAMEAAADBAAAAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBACEASgAJwDBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADHACEAKAEnAQQAKAAnAMcAIQAoAScAKAEnAAcAIQAoAScBBACEAicAhwAhACgBJwEEAIQCJwDBAAAAwQAAAMcAIQAoAScBBAAoACcAxwAhACgBJwEEACgAJwDHACEAKAEnACgBJwAHACEAKAEnAQQAgQCEAIECJwDHACEAKAEnACgCJwAHACEAKAEnAQQAhAOBAYQBJwDHACEAKAEnAQQAhAUoACcAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAhACBAIQBKAAnAMcAIQAoAScBBAAoACcAxwAhACgBJwEEAIEAhAAoACcAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBAAoACcAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAhAEoACcAxwAhACgBJwEEAIQDKAAnAMcAIQAoAScBBACEASgAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBACEASgAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBAAoACcAwQAAAMEAAADBAAAAxwAhACgBJwEEAIQBKAAnAMcAIQAoAScBBACEASgAJwDHACEAKAEnAQQAhAEoACcAxwAhACgBJwEEACgAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBAAoACcAxwAhACgBJwAoAScABwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEAIEAhAAnAIcAIQAoAScBBAAnAMQAhADEAMEAoQCoACgAxwAhACgAIQAnACEBJwAAAKEBIQAAAAQAgQCEAIEAhACBAIQBgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQCgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQBgQWEAIEAhAWBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAoEAhAGBAIQAgQCEAoEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhASBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQBgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAYQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQBgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAYEAhAGBAIQBgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQBgQCEAYEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAYEAhACBAIQAgQCEAYEAhACBAIQAgQCEAoEAhAGBAIQAgQCEAoEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAoEAhAaBAIQAgQCEAYEAhACBAIQAgQCEAYEAhACBAIQAgQCEA4EAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQBgQCEAIEAhAKBAIQCgQCEAIEAhACBAIQAgQCEAIEAhACBAYQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhAGBAIQDgQCEAYEAhACBAIQCgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQGEAIEAhAKBAIQAgQCEAIEAhAGBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQBgQCEAIEAhACBAIQBgQCEAIEAhACBAIQVgQCEAIEAhACBAIQBgQCEA4EAhACBAIQDgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEA4EAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhAKBAIQVgQCEAYEAhACBAIQCgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQGEAIEAhACBAIQAgQCEAIEAhACBAIQAgQGEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQGEAIEAhAKBAIQUgQCEAYEAhACBAIQCgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQGEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEDoEAhAGBAIQAgQCEAoEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEBhAWBAIQBgQCEA4EAhAGBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEA4EAhAGBAIQBgQCEAIEAhAKBAIQCgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQCgQCEAYEAhAGBAIQAgQCEAoEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEBhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhCCBAIQDgQCEAYEAhACBAIQCgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQGEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQHgQCEAYEAhACBAIQCgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAYQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAoEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAOBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQJgQCECIEAhBGBAIQPgQCEAYEAhACBAIQCgQCEBYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCECIEAhACBAIQAgQCEAKEAqADBBKEAIQHBAqEAwQShBSEEpwChAKgBBACBAIQAgQCEAIEAhACBAIQBgQDBA8QAwQShAMEEoQGBAKEAqACEAIEAhACBAIQBKADHACEAKAEnASgAJwAEAMcAIQAoAScBKAAnAAQAgQCEAIEAhADHACEAKAAhACcBIQAnAAEAoQCoAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEBhACBAIQAgQCEAMcAIQAoAScBKAAnAAQAgQCEAIEAhACBAIQAgQCEAMcAIQAoACEAJwEhACcAAQChAKgAhACBAIQAgQCEASgBoQCEAKgAxwAhACgBJwEoACcABACBAIQAxwAhACgAIQAnASEAJwABAKEAqACEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAMEAxADBAMQAwQDEBMEAxATBAcQAwQHEAMEAxAHBAMQHwQDEAIQFoQCoACgAxAXHACEAKAEnASgAJwABAIQAgQCEAIEAhACBAIQAxwAhACgAIQAnASEAJwABAKEAqACEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAKADEAsEAxAAoAIQAqADEAscAIQAoACEAJwEhACcAAQChAKgAhACBAIQAgQCEASgAoQDEAccAIQAoAScBKAAnAAQAgQCEAIEAhACBAMQBhACBAMQAgQCEAsQbRACEAEQAhABEAMQAhABEAIQARACEAMQBxwAhACgAIQAnASEAJwABAKEAqACEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAEoAMQFxwAhACgAIQAnASEAJwABAKEAqACEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEACgARACEAKEAxAFEAIQARACEAEQAhABEAIQAgQChAKgAhACBAIQAgQCEAIEAhACBAIQBKACBAKEBgQGEAIEAhACBAIQAgQCEAIEAhACBAIQAgQAhAIEAoQGBAIQAgQCEAIEAhACBAIQAgQMhAMEVoQCoAMEAKAChAKgARADEAcEAxAWEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQBgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAYEAhACBAIQAgQCEAYEAhAGBAIQAgQCEAIEAhAAoAKEAxAHBAMQCoQDEAqEAqADBACgAoQCoAEQAwQDEAsEAxALBAMQAwQDEBsEAxADBAMQAhACBAIQAgQCEAIEAhACBAIQBKAChAEQAxAKhAMQExwAhACgAIQAnASEAJwABAKEAqACEAIEAhACBAIQAgQCEAIEAhAEoAMQBoQDEAEQAxAKBAKEAqACEAIEAhACBAIQBgQCEAIEAhACBAIQAKACBAKEAqACEAIEAhACBAIQBgQCEAIEAhAGBAIQAgQCEACgAxAfHACEAKAAhACcBIQAnAAEAoQCoAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAAoAEQAxAJEAMQCgQAAAKEAwQAAAMEAAABHACEAKAEnAgQAgQCEAMECxADBA8QAwQHEAMEDxADBB8QAwQnEBMEAgQDEAMEAgQDEAIQAgQCEAMEExAnBAMQARADHACEAKAAhACcBIQAnAAEAoQCoACgAhACBAMEAxwAhACgBJwEoACcAAQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAMEAAADHACEAKAEnASgAJwAEAIEAhACBAIQAgQCEAIEAhAGBAMEBAACEAMcAIQAoACEAJwAhAScAAAChAKgAKAEHACEAKAEnAgQAhwAhACgBJwIEAIcAIQAoAScCBACEAEQAhABEAIQAwQCBAEQAhADEB8cAIQAoACEAJwEhACcAAQChAKgAhAOBAIQAgQCEAIEAhACBAIQAKADEA8EAxAOhAMQKwQDEAcECxADBAMQAwQDEAMEAxAHBAMQBwQDEAMEBxADBAcQAwQDEAcEAxA7BAMQAwQDERcEBxAHBAMQAwQDEAMEBxAHBAcQBwQDEUMEBxCnBAcR8wQDEGcEAxBfBAMQCwQDEGcECxADBA8QAwQLEO8EAxGPBAMQuoQDBSaEDwTKoAMFJqAChAcEyIQDESagAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKADEAqgAKACoACgAqAAoAKgAKADEB6gAKACoACgAxB2oACgAqAAoAMQCqAAoAKgAKACoACgAxAuoACgAqAAoAKgAKADEDKgAKACoACgAqAAoAMQCqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKADECqgAKACoACgAqAAoAKgAKADEBagAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAMQEqAAoAKgAKADEBKgAKACoACgAxAqoACgAqAAoAMQgqAAoAKgAKACoACgAqAIoAKgAKACoACgAxAWoACgAqAAoAMQHqAAoAKgAKACoACgAqAAoAMQKqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKADEAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAMQBqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKAChAKgAIQCEBcQAhADEAIQBxACEAcQAhADEAYQAxACEAMcAKAMnASgAJwAEAKgBKAEHACgCJwIEAIQCRADEAIQAxACEAcQBhADEAIQExACEAMQAhADEAIQAhwAoAicCBACEAUQAxAGEAMQAhADEAYQAxAWEAMQBhADEBIQAhwAoAicCBACEAUQAxAGEAMQAhADEAYQAxAGEAMQBhADEBYQDxAHHACgDJwEoACcABACEDcQDhAjEJqgAxAShAagBKAjEA6gAxAShAcQDqADEBKEBqAiHACgDJwKoCccAKAInASgAJwCoEQQAhAGoCMQAqAjEAKgIxACoCMQAqAjEAKgIxACoCMQAqAjEAKgIxACoCMQAqAjEAKgIxACoCMQAqAjEAKgIxACoCMQBqAiEBcQAhAHEAIQAKADEA4QAqADEBKEBhAnECKgAxAShASgAqADEAigAqAAoAKgAKACoAIQAxBaoAMQEqALEvccD1KoDc3RhdGV2ZXJzaW9uZG9jdW1lbnRkYXRlZG9jdW1lbnRzdGF0dXNkb2N1bWVudHRpdGxlZG9jdW1lbnRjb250ZW50ZG9jdW1lbnRleGNlcnB0ZG9jdW1lbnRhdXRob3Jkb2N1bWVudGZlYXR1cmVkX21lZGlhZG9jdW1lbnRjb21tZW50X3N0YXR1c2RvY3VtZW50cGluZ19zdGF0dXNkb2N1bWVudHN0aWNreWRvY3VtZW50dGVtcGxhdGVkb2N1bWVudGZvcm1hdGRvY3VtZW50bWV0YWFkdmFuY2VkX3Nlb19kZXNjcmlwdGlvbmpldHBhY2tfc2VvX2h0bWxfdGl0bGVqZXRwYWNrX3Nlb19ub2luZGV4amV0cGFja19wb3N0X3dhc19ldmVyX3B1Ymxpc2hlZF9qZXRwYWNrX25ld3NsZXR0ZXJfYWNjZXNzX2pldHBhY2tfZG9udF9lbWFpbF9wb3N0X3RvX3N1YnNfamV0cGFja19uZXdzbGV0dGVyX3RpZXJfaWRfamV0cGFja19tZW1iZXJzaGlwc19jb250YWluc19wYXl3YWxsZWRfY29udGVudF9qZXRwYWNrX21lbWJlcnNoaXBzX2NvbnRhaW5zX3BhaWRfY29udGVudGZvb3Rub3Rlc2pldHBhY2tfcHVibGljaXplX21lc3NhZ2VqZXRwYWNrX3B1YmxpY2l6ZV9mZWF0dXJlX2VuYWJsZWRqZXRwYWNrX3NvY2lhbF9wb3N0X2FscmVhZHlfc2hhcmVkamV0cGFja19zb2NpYWxfb3B0aW9uc2RvY3VtZW50Y2F0ZWdvcmllc2RvY3VtZW50dGFnc2RvY3VtZW50YmxvY2tzSW50cm9kdWNpbmcgdGhlIEFJIENsaWVudCBpbiBXb3JkUHJlc3MgNy4wY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzV29yZFByZXNzIDcuMCBpbmNsdWRlcyBhIGJ1aWx0LWluIEFJIENsaWVudCDigJQgYSBwcm92aWRlci1hZ25vc3RpYyBQSFAgQVBJIHRoYXQgbGV0cyBwbHVnaW5zIHNlbmQgcHJvbXB0cyB0byBBSSBtb2RlbHMgYW5kIHJlY2VpdmUgcmVzdWx0cyB0aHJvdWdoIGEgY29uc2lzdGVudCBpbnRlcmZhY2UuIFlvdXIgcGx1Z2luIGRlc2NyaWJlcyA8ZW0+d2hhdDwvZW0+IGl0IG5lZWRzIGFuZCA8ZW0+aG93PC9lbT4gaXQgbmVlZHMgaXQuIFdvcmRQcmVzcyBoYW5kbGVzIHJvdXRpbmcgdGhlIHJlcXVlc3QgdG8gYSBzdWl0YWJsZSBtb2RlbCBmcm9tIGEgcHJvdmlkZXIgdGhlIHNpdGUgb3duZXIgaGFzIGNvbmZpZ3VyZWQuY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhpcyBwb3N0IGV4cGxhaW5zIHRoZSBBUEkgc3VyZmFjZSwgd2Fsa3MgdGhyb3VnaCBjb2RlIGV4YW1wbGVzLCBhbmQgY292ZXJzIHdoYXQgcGx1Z2luIGRldmVsb3BlcnMgbmVlZCB0byBrbm93LmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBlbnRyeSBwb2ludDogd3BfYWlfY2xpZW50X3Byb21wdCgpbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEV2ZXJ5IGludGVyYWN0aW9uIHN0YXJ0cyB3aXRoOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudCRidWlsZGVyID0gd3BfYWlfY2xpZW50X3Byb21wdCgpO2Ryb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoaXMgcmV0dXJucyBhIFdQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGQ6ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50WW91IGNhbiBwYXNzIHRoZSBwcm9tcHQgdGV4dCBkaXJlY3RseSBhcyBhIHBhcmFtZXRlciB0byB3cF9haV9jbGllbnRfcHJvbXB0KCkgZm9yIGNvbnZlbmllbmN3aXRoX3RleHQoKSBzIGF2YWlsYWJsZSBmb3IgYnVpbGRpbmcgdGhlIHByb21wdCBpbmNyZW1lbnRhbGx5LmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRleHQgZ2VuZXJhdGlvbmxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50bGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRGb3IgcmljaGVyIG1ldGFkYXRhLCB1c2UgZ2VuZXJhdGVfKl9yZXN1bHQoKSBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgZm9yIGltYWdlIGdlbmVyYXRpb246ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhpcyByZXR1cm5zIGEgR2VuZXJhdGl2ZUFpUmVzdWx0IG9iamVjdCB0aGF0IGUgc2UgaWVjIG8gdG5yb24sIGluZyB0IHNhZ2FkICBwb2UgIGVyZXMgdG8gdGhlIC5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRBdmFpbGFibGUgZ2VuZXJhdGVfKl9yZXN1bHQoKSBtZXRob2RzOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc2lubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50Z2VuZXJhdGVfdGV4dF9yZXN1bHQoKWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50Z2VuZXJhdGVfaW1hZ2VfcmVzdWx0KClpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGNvbnZlcnRfdGV4dF90b19zcGVlY2hfcmVzdWx0KClpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGdlbmVyYXRlX3NwZWVjaF9yZXN1bHQoKWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50Z2VuZXJhdGVfdmlkZW9fcmVzdWx0KClpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFVzZSB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIGZvciB0aGUgbW9kYWxpdHkgeW91IGFyZSB3b3JraW5nIHdpdGguIEVhY2ggcmV0dXJucyBhIEdlbmVyYXRpdmVBaVJlc3VsdCBvYmplY3Qgd2l0aCByaWNoIG1ldGFkYXRhLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudE1vZGVsIHByZWZlcmVuY2VzbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBtb2RlbHMgYXZhaWxhYmxlIG9uIGVhY2ggV29yZFByZXNzIHNpdGUgZGVwZW5kcyBvbiB3aGljaCBBSSBwcm92aWRlcnMgdGhlIGFkbWluaXN0cmF0b3JzIG9mIHRoYXQgc2l0ZSBoYXZlIGNvbmZpZ3VyZWQgaW4gdGhlIDxzdHJvbmc+U2V0dGluZ3MgJmd0OyBDb25uZWN0b3JzPC9zdHJvbmc+IHNjcmVlbi5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRTaW5jZSB5b3VyIHBsdWdpbiBkb2Vzbid0IGNvbnRyb2wgd2hpY2ggcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgb24gZWFjaCBzaXRlLCB1c2UgdXNpbmdfbW9kZWxfcHJlZmVyZW5jZSgpIHRvIGluZGljYXRlIHdoaWNoIG1vZGVscyB3b3VsZCBiZSBpZGVhbC4gVGhlIEFJIENsaWVudCB3aWxsIHVzZSB0aGUgZmlyc3QgbW9kZWwgZnJvbSB0aGF0IGxpc3QgdGhhdCBpcyBhdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBhbnkgY29tcGF0aWJsZSBtb2RlbCBpZiBub25lIGFyZSBhdmFpbGFibGU6ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhpcyBpcyBhIHByZWZlcmVuY2UsIG5vdCBhIHJlcXVpcmVtZW50LiBZb3VyIHBsdWdpbiBzaG91bGQgZnVuY3Rpb24gd2l0aG91dCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgeW91IGNhbiB0ZXN0IG9yIHZlcmlmeSB3aGljaCBtb2RlbCB3YXMgdXNlZCBieSBsb29raW5nIGF0IHRoZSBmdWxsIHJlc3VsdCBvYmplY3QsIHVuZGVyIHRoZSBwcm92aWRlck1ldGFkYXRhIGFuZCBtb2RlbE1ldGFkYXRhIHByb3BlcnRpZXMuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50RmVhdHVyZSBkZXRlY3Rpb25sZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50Tm90IGV2ZXJ5IFdvcmRQcmVzcyBzaXRlIHdpbGwgaGF2ZSBhbiBBSSBwcm92aWRlciBjb25maWd1cmVkLCBhbmQgbm90IGV2ZXJ5IHByb3ZpZGVyIHN1cHBvcnRzIGV2ZXJ5IGNhcGFiaWxpdHkgYW5kIGV2ZXJ5IG9wdGlvbi4gQmVmb3JlIHNob3dpbmcgQUktcG93ZXJlZCBVSSwgY2hlY2sgd2hldGhlciB0aGUgZmVhdHVyZSBjYW4gd29yazpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGVzZSBjaGVja3MgZG8gbm90IG1ha2UgQVBJIGNhbGxzLiBUaGV5IHVzZSBkZXRlcm1pbmlzdGljIGxvZ2ljIHRvIG1hdGNoIHRoZSBidWlsZGVyJ3MgY29uZmlndXJhdGlvbiBhZ2FpbnN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgYXZhaWxhYmxlIG1vZGVscy4gaGVyZSBpcyBubyBjb3N0IGluY3VycmVkIGJ5IGNhbGxpbmcgdGhlbS5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRBdmFpbGFibGUgc3VwcG9ydCBjaGVjayBtZXRob2RzOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc2lubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aXNfc3VwcG9ydGVkX2Zvcl90ZXh0X2dlbmVyYXRpb24oKWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aXNfc3VwcG9ydGVkX2Zvcl9pbWFnZV9nZW5lcmF0aW9uKClpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGlzX3N1cHBvcnRlZF9mb3JfdGV4dF90b19zcGVlY2hfY29udmVyc2lvbigpaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRpc19zdXBwb3J0ZWRfZm9yX3NwZWVjaF9nZW5lcmF0aW9uKClpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGlzX3N1cHBvcnRlZF9mb3JfdmlkZW9fZ2VuZXJhdGlvbigpaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRVc2UgdGhlc2UgdG8gY29uZGl0aW9uYWxseSBsb2FkIHlvdXIgVUksIHNob3cgYSBoZWxwZnVsIG5vdGljZSB3aGVuIHRoZSBmZWF0dXJlIGlzIHVuYXZhaWxhYmxlLCBvciBza2lwIHJlZ2lzdGVyaW5nIFVJIGFsdG9nZXRoZXIuIE5ldmVyIGFzc3VtZSB0aGF0IEFJIGZlYXR1cmVzIHdpbGwgYmUgYXZhaWxhYmxlIGp1c3QgYmVjYXVzZSBXb3JkUHJlc3MgNy4wIGlzIGluc3RhbGxlZC5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRBZHZhbmNlZCBjb25maWd1cmF0aW9ubGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFN5c3RlbSBpbnN0cnVjdGlvbnNsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50YSB0b2VzbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudE1hIHRsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50TWEgdG9rZW5zbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEFkZGl0aW9uYWwgYnVpbGRlciBtZXRob2RzbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBmdWxsIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBtZXRob2RzIGlzIGF2YWlsYWJsZSB2aWEgdGhlIFdQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlciBjbGFzcy4gS2V5IG1ldGhvZHMgaW5jbHVkZTpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2hhc0ZpeGVkTGF5b3V0Y2FwdGlvbmhlYWRib2R5Zm9vdGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50RXJyb3IgaGFuZGxpbmdsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50d3BfYWlfY2xpZW50X3Byb21wdCgpIHJldHVybiBXUF9FcnJvciBvbiBmYWlsdXJlLCBmb2xsb3dpbmcgV29yZFByZXNzIGNvbnZlbnRpb25zOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFdoZW4gdXNlZCBpbiBhIFJFU1QgQVBJIGNhbGxiYWNrLCBib3RoIEdlbmVyYXRpdmVBaVJlc3VsdCBhbmQgV1BfRXJyb3IgY2FuIGJlIHBhc3NlZCB0byByZXN0X2Vuc3VyZV9yZXNwb25zZSgpIGRpcmVjdGx5OmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudElmIGFuIGVycm9yIG9jY3VycywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGhhdmUgYSBzZW1hbnRpY2FsbHkgbWVhbmluZ2Z1bCBIVFRQIHJlc3BvbnNlIGNvZGUgYXR0YWNoZWQgdG8gaXQuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50Q29udHJvbGxpbmcgQUkgYXZhaWxhYmlsaXR5bGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEZvciBncmFudWxhciBjb250cm9sLCB0aGUgd3BfYWlfY2xpZW50X3ByZXZlbnRfcHJvbXB0IGZpbHRlciBhbGxvd3MgcHJldmVudGluZyBzcGVjaWZpYyBwcm9tcHRzIGZyb20gZXhlY3V0aW5nOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFdoZW4gYSBwcm9tcHQgaXMgcHJldmVudGVkOmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc2lubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aXNfc3VwcG9ydGVkXyooKSBtZXRob2RzIHJldHVybiBmYWxzZSwgYWxsb3dpbmcgcGx1Z2lucyB0byBncmFjZWZ1bGx5IGhpZGUgdGhlaXIgVUkuaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRnZW5lcmF0ZV8qKCkgbWV0aG9kcyByZXR1cm4gYSBXUF9FcnJvci5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEFyY2hpdGVjdHVyZWxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGUgQUkgQ2xpZW50IGluIFdvcmRQcmVzcyA3LjAgY29uc2lzdHMgb2YgdHdvIGxheWVyczpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc29yZGVyZWR2YWx1ZXNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudDxzdHJvbmc+UEhQIEFJIENsaWVudDwvc3Ryb25nPiAoPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy9waHAtYWktY2xpZW50Ij53b3JkcHJlc3MvcGhwLWFpLWNsaWVudDwvYT4pIOKAlCBBIHByb3ZpZGVyLWFnbm9zdGljIFBIUCBTREsgYnVuZGxlZCBpbiBDb3JlIGFzIGFuIGV4dGVybmFsIGxpYnJhcnkuIFRoaXMgaXMgdGhlIGVuZ2luZSB0aGF0IGhhbmRsZXMgcHJvdmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzc3RhcnRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudDxzdHJvbmc+V29yZFByZXNzIHdyYXBwZXI8L3N0cm9uZz4g4oCUIENvcmUncyBXUF9BSV9DbGllbnRfUHJvbXB0X0J1aWxkZXIgY2xhc3Mgd3JhcHMgdGhlIFBIUCBBSSBDbGllbnQgd2l0aCBXb3JkUHJlc3MgY29udmVudGlvbnM6IHNuYWtlX2Nhc2UgbWV0aG9kcywgV1BfRXJyb3IgcmV0dXJucywgYW5kIGludGVncmF0aW9uIHdpdGggV29yZFByZXNzIEhUVFAgdHJhbnNwb3J0LCB0aGUgQWJpbGl0aWVzIEFQSSwgdGhlIENvbm5lY3RvciBzeXN0ZW0uaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGUgd3BfYWlfY2xpZW50X3Byb21wdCgpIGZ1bmN0aW9uIGlzIHRoZSByZWNvbW1lbmRlZCBlbnRyeSBwb2ludC4gSXQgcmV0dXJucyBhIFdQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlciBpbnN0YW5jZSB0aGF0IGNhdGNoZXMgZXhjZXB0aW9ucyBmcm9tIHRoZSB1bmRlcmx5aW5nIFNESyBhbmQgY29udmVydHMgdGhlbSB0byBXUF9FcnJvciBvYmplY3RzLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudENyZWRlbnRpYWwgbWFuYWdlbWVudGxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRBUEkga2V5cyBhcmUgbWFuYWdlZCB0aHJvdWdoIHRoZSA8YSBocmVmPSJodHRwczovL21ha2Uud29yZHByZXNzLm9yZy9jb3JlLzIwMjYvMDMvMTgvaW50cm9kdWNpbmctdGhlLWNvbm5lY3RvcnMtYXBpLWluLXdvcmRwcmVzcy03LTAvIj5Db25uZWN0b3JzIEFQSTwvYT4uIEFJIHByb3ZpZGVyIHBsdWdpbnMgdGhhdCByZWdpc3RlciB3aXRoIHRoZSBQSFAgQUkgQ2xpZW50J3MgcHJvdmlkZXIgcmVnaXN0cnkgZ2V0IGF1dG9tYXRpYyBjb25uZWN0b3IgaW50ZWdyYXRpb24g4oCUIGluY2x1ZGluZyB0aGUgU2V0dGluZ3MgIENvbm5lY3RvcnMgYWRtaW4gVUkgZm9yIEFQSSBrZXkgbWFuYWdlbWVudC4gUGx1Z2luIGRldmVsb3BlcnMgdXNpbmcgdGhlIEFJIENsaWVudCB0byBidWlsZCBmZWF0dXJlcyBkbyBub3QgbmVlZCB0byBoYW5kbGUgY3JlZGVudGlhbHMgYXQgYWxsLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudENsaWVudC1zaWRlIEphdmFTY3JpcHQgQVBJbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEEgSmF2YVNjcmlwdCBBUEkgd2l0aCBhIHNpbWlsYXIgZmx1ZW50IHByb21wdCBidWlsZGVyIGlzIGF2YWlsYWJsZSB2aWEgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3Mvd3AtYWktY2xpZW50Ij53cC1haS1jbGllbnQ8L2E+IHBhY2thZ2UuIEl0IHVzZXMgUkVTVCBlbmRwb2ludHMgdW5kZXIgdGhlIGhvb2QgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLXNpZGUgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgQVBJIGlzIG5vdCBwYXJ0IG9mIENvcmUsIGFuZCBpdCBpcyBzdGlsbCBiZWluZyBldmFsdWF0ZWQgd2hldGhlciB0aGlzIGFwcHJvYWNoIGlzIHNjYWxhYmxlIGZvciBnZW5lcmFsIHVzZS4gQmVjYXVzZSB0aGUgQVBJIGFsbG93cyBhcmJpdHJhcnkgcHJvbXB0IGV4ZWN1dGlvbiBmcm9tIHRoZSBjbGllbnQtc2lkZSwgaXQgcmVxdWlyZXMgYSBoaWdoLXByaXZpbGVnZSBjYXBhYmlsaXR5IGNoZWNrLCB3aGljaCBieSBkZWZhdWx0IGlzIG9ubHkgZ3JhbnRlZCB0byBhZG1pbmlzdHJhdG9ycy4gVGhpcyByZXN0cmljdGlvbiBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCB1bnRydXN0ZWQgdXNlcnMgZnJvbSBzZW5kaW5nIGFueSBwcm9tcHQgdG8gYW55IGNvbmZpZ3VyZWQgQUkgcHJvdmlkZXIuIEFzIHN1Y2gsIHVzaW5nIHRoaXMgYXBwcm9hY2ggaW4gYSBkaXN0cmlidXRlZCBwbHVnaW4gaXMgbm90IHJlY29tbWVuZGVkLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEZvciBub3csIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBpcyB0byBpbXBsZW1lbnQgaW5kaXZpZHVhbCBSRVNUIEFQSSBlbmRwb2ludHMgZm9yIGVhY2ggc3BlY2lmaWMgQUkgZmVhdHVyZSB5b3VyIHBsdWdpbiBwcm92aWRlcywgYW5kIGhhdmUgeW91ciBKYXZhU2NyaXB0IGZ1bmN0aW9uYWxpdHkgY2FsbCB0aG9zZSBlbmRwb2ludHMuIFRoaXMgYWxsb3dzIHlvdSB0byBlbmZvcmNlIGdyYW51bGFyIHBlcm1pc3Npb24gY2hlY2tzIGFuZCBsaW1pdCB0aGUgc2NvcGUgb2Ygd2hhdCBjYW4gYmUgZXhlY3V0ZWQgZnJvbSB0aGUgY2xpZW50LXNpZGUuIEl0IGFsc28ga2VlcHMgdGhlIGFjdHVhbCBBSSBwcm9tcHQgaGFuZGxpbmcgYW5kIGNvbmZpZ3VyYXRpb24gZnVsbHkgc2NvcGVkIHRvIGJlIHNlcnZlci1zaWRlIG9ubHkuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50TWlncmF0aW9uIGZyb20gcGhwLWFpLWNsaWVudCBhbmQgd3AtYWktY2xpZW50bGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudElmIHlvdSBoYXZlIGJlZW4gdXNpbmcgdGhlc2UgcGFja2FnZXMgaW4geW91ciBwbHVnaW4ocykgYmVmb3JlLCBoZXJlJ3Mgd2hhdCB0byBrbm93LmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFJlY29tbWVuZGVkOiByZXF1aXJlIFdvcmRQcmVzcyA3LjBsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIHNpbXBsZXN0IHBhdGggaXMgdG8gdXBkYXRlIHlvdXIgcGx1Z2luJ3MgUmVxdWlyZXMgYXQgbGVhc3QgaGVhZGVyIHRvIDcuMCBhbmQgcmVtb3ZlIHRoZSBDb21wb3NlciBkZXBlbmRlbmNpZXMgb24gd29yZHByZXNzL3BocC1haS1jbGllbnQgYW5kIGl0cyB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcy5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRSZXBsYWNlIGFueSBBSV9DbGllbnQ6OnByb21wdCgpIGNhbGxzIHdpdGggd3BfYWlfY2xpZW50X3Byb21wdCgpLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEZvciB0aGUgd29yZHByZXNzL3dwLWFpLWNsaWVudCBwYWNrYWdlLCBpZiB5b3UgYXJlIG5vdCB1c2luZyB0aGUgcGFja2FnZSdzIFJFU1QgQVBJIGVuZHBvaW50cyBvciBKYXZhU2NyaXB0IEFQSSwgeW91IGNhbiBzaW1wbHkgcmVtb3ZlIGl0IGFzIGEgZGVwZW5kZW5jeSwgc2luY2UgZXZlcnl0aGluZyBlbHNlIGl0IGRvZXMgaXMgbm93IHBhcnQgb2YgV29yZFByZXNzIENvcmUuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50SWYgeW91IG11c3Qgc3VwcG9ydCBXb3JkUHJlc3MgJmx0OyA3LjBsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50UEhQIEFJIENsaWVudCAod29yZHByZXNzL3BocC1haS1jbGllbnQpbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudElmIHlvdXIgcGx1Z2luIHN0aWxsIG5lZWRzIHRvIHJ1biBvbiBXb3JkUHJlc3MgdmVyc2lvbnMgYmVmb3JlIDcuMCB3aGlsZSBhbHNvIGJ1bmRsaW5nIHdvcmRwcmVzcy9waHAtYWktY2xpZW50LCB5b3Ugd2lsbCBuZWVkIGEgY29uZGl0aW9uYWwgYXV0b2xvYWRlciB3b3JrYXJvdW5kLiBUaGUgUEhQIEFJIENsaWVudCBhbmQgaXRzIGRlcGVuZGVuY2llcyBhcmUgbm93IGxvYWRlZCBieSBDb3JlIG9uIDcuMCssIHNvIGxvYWRpbmcgdGhlbSBhZ2FpbiB2aWEgQ29tcG9zZXIgd2lsbCBjYXVzZSBjb25mbGljdHMgKGR1cGxpY2F0ZSBjbGFzcyBkZWZpbml0aW9ucykuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIHNvbHV0aW9uOiBvbmx5IHJlZ2lzdGVyIHlvdXIgQ29tcG9zZXIgYXV0b2xvYWRlciBmb3IgdGhlc2UgZGVwZW5kZW5jaWVzIHdoZW4gcnVubmluZyBvbiBXb3JkUHJlc3MgdmVyc2lvbnMgYmVmb3JlIDcuMDpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnREdWUgdG8gaG93IENvbXBvc2VyJ3MgYXV0b2xvYWRlciB3b3JrcyDigJQgbG9hZGluZyBhbGwgZGVwZW5kZW5jaWVzIGF0IG9uY2UgcmF0aGVyIHRoYW4gc2VsZWN0aXZlbHkg4oCUIGEgbW9yZSBncmFudWxhciBhcHByb2FjaCB3YXMgbm90IGZlYXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBjb25kaXRpb25hbCBjaGVjayBuZWVkcyB0byB3cmFwIHRoZSBlbnRpcmUgYXV0b2xvYWRlci4gQWx0ZXJuYXRpdmVseSwgYnJlYWsgeW91ciBQSFAgZGVwZW5kZW5jaWVzIGFwYXJ0IGluIHR3byBzZXBhcmF0ZSBDb21wb3NlciBzZXR1cHMsIG9uZSB0aGF0IGNhbiBhbHdheXMgYmUgYXV0b2xvYWRlZCwgYW5kIGFub3RoZXIgb25lIGZvciB0aGUgcGhwLWFpLWNsaWVudCBwYWNrYWdlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIG9ubHksIHdoaWNoIHdvdWxkIGJlIGNvbmRpdGlvbmFsbHkgYXV0b2xvYWRlZC5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRXUCBBSSBDbGllbnQgKHdvcmRwcmVzcy93cC1haS1jbGllbnQpbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSB3b3JkcHJlc3Mvd3AtYWktY2xpZW50IHBhY2thZ2UgaGFuZGxlcyB0aGUgV29yZFByZXNzIDcuMCB0cmFuc2l0aW9uIGF1dG9tYXRpY2FsbHkuIE9uIDcuMCssIGl0IGRpc2FibGVzIGl0cyBvd24gUEhQIFNESyBpbmZyYXN0cnVjdHVyZSAoc2luY2UgQ29yZSBoYW5kbGVzIGl0IG5hdGl2ZWx5KSBidXQga2VlcHMgdGhlIFJFU1QgQVBJIGVuZHBvaW50cyBhbmQgSmF2YVNjcmlwdCBBUEkgYWN0aXZlLCBhcyB0aG9zZSBhcmVuJ3QgaW4gQ29yZSB5ZXQuZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50WW91IGNhbiBjb250aW51ZSBsb2FkaW5nIHRoaXMgcGFja2FnZSB1bmNvbmRpdGlvbmFsbHkuIEl0IGRldGVjdHMgdGhlIFdvcmRQcmVzcyB2ZXJzaW9uIGFuZCBvbmx5IGFjdGl2YXRlcyB0aGUgcGFydHMgdGhhdCBhcmVuJ3QgYWxyZWFkeSBwcm92aWRlZCBieSBDb3JlLiBObyBjb25kaXRpb25hbCBsb2FkaW5nIG5lZWRlZC4gSG93ZXZlciwgbWFrZSBzdXJlIHRvIHN0YXkgdXAgdG8gZGF0ZSBvbiB0aGlzIHBhY2thZ2UsIGJlY2F1c2UgaXQgd2lsbCBsaWtlbHkgYmUgZGlzY29udGludWVkIHNvb24sIGluIGZhdm9yIG9mIG1vdmluZyB0aGUgUkVTVCBBUEkgZW5kcG9pbnRzIGFuZCBKYXZhU2NyaXB0IEFQSSBpbnRvIEd1dGVuYmVyZy5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRTZWUgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3Mvd3AtYWktY2xpZW50L2Jsb2IvdHJ1bmsvVVBHUkFERS5tZCI+V1AgQUkgQ2xpZW50IHVwZ3JhZGUgZ3VpZGU8L2E+IGZvciBhZGRpdGlvbmFsIG1pZ3JhdGlvbiBkZXRhaWxzLmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudEFkZGl0aW9uYWwgcmVzb3VyY2VzbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc2lubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VHJhYyB0aWNrZXQ6IDxhIGhyZWY9Imh0dHBzOi8vY29yZS50cmFjLndvcmRwcmVzcy5vcmcvdGlja2V0LzY0NTkxIj4jNjQ1OTE8L2E+aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL3BocC1haS1jbGllbnQiPlBIUCBBSSBDbGllbnQ8L2E+IChidW5kbGVkIGxpYnJhcnkpaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnQ8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL3dwLWFpLWNsaWVudCI+V1AgQUkgQ2xpZW50PC9hPiAob3JpZ2luYWwgcGFja2FnZSwgbm93ICBtZXJnZWQgaW50byBDb3JlKWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50PGEgaHJlZj0iaHR0cHM6Ly9tYWtlLndvcmRwcmVzcy5vcmcvY29yZS8yMDI2LzAyLzAzL3Byb3Bvc2FsLWZvci1tZXJnaW5nLXdwLWFpLWNsaWVudC1pbnRvLXdvcmRwcmVzcy03LTAvIj5PcmlnaW5hbCBtZXJnZSBwcm9wb3NhbDwvYT5pbm5lckJsb2Nrczxjb2RlPjwvY29kZT48Y29kZT5sYW5ndWFnZWNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc2xhbmd1YWdlPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPldvcmRQcmVzcyA3LjAgaW5jbHVkZXMgYSBidWlsdC1pbiBBSSBDbGllbnQg4oCUIGEgcHJvdmlkZXItYWdub3N0aWMgUEhQIEFQSSB0aGF0IGxldHMgcGx1Z2lucyBzZW5kIHByb21wdHMgdG8gQUkgbW9kZWxzIGFuZCByZWNlaXZlIHJlc3VsdHMgdGhyb3VnaCBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlLiBZb3VyIHBsdWdpbiBkZXNjcmliZXMgPGVtPndoYXQ8L2VtPiBpdCBuZWVkcyBhbmQgPGVtPmhvdzwvZW0+IGl0IG5lZWRzIGl0LiBXb3JkUHJlc3MgaGFuZGxlcyByb3V0aW5nIHRoZSByZXF1ZXN0IHRvIGEgc3VpdGFibGUgbW9kZWwgZnJvbSBhIHByb3ZpZGVyIHRoZSBzaXRlIG93bmVyIGhhcyBjb25maWd1cmVkLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRoaXMgcG9zdCBleHBsYWlucyB0aGUgQVBJIHN1cmZhY2UsIHdhbGtzIHRocm91Z2ggY29kZSBleGFtcGxlcywgYW5kIGNvdmVycyB3aGF0IHBsdWdpbiBkZXZlbG9wZXJzIG5lZWQgdG8ga25vdy48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5UaGUgZW50cnkgcG9pbnQ6IDxjb2RlPndwX2FpX2NsaWVudF9wcm9tcHQoKTwvY29kZT48L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkV2ZXJ5IGludGVyYWN0aW9uIHN0YXJ0cyB3aXRoOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpjb2RlIC0tPgo8cHJlIGNsYXNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZSBsYW5nPSJwaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiPiRidWlsZGVyID0gd3BfYWlfY2xpZW50X3Byb21wdCgpOzwvY29kZT48L3ByZT4KPCEtLSAvd3A6Y29kZSAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGlzIHJldHVybnMgYSA8Y29kZT5XUF9BSV9DbGllbnRfUHJvbXB0X0J1aWxkZXI8L2NvZGU+ICBhIGZsdWVudCBidWlsZGVyIHRoYXQgb2VzIGFtaSBvdG8gY3NlIG10LiBZb3UgY2hhaW4gY29uZmlndXJhdGlvbiBtZXRob2RzIGFuZCB0aGVuIGNhbGwgYSBnZW5lcmF0aW9uIG1ldGhvZDo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6Y29kZSAtLT4KPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGUgbGFuZz0icGhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIj4kdGV4dCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdTdW1tYXJpemUgdGhlIGJlbmVmaXRzIG9mIGNhY2hpbmcgaW4gV29yZFByZXNzLicgKSAgICAtdXNpbmdfdGVtcGVyYXR1cmUoIDAuNyApICAgIC1nZW5lcmF0ZV90ZXh0KCk7L2NvZGU+PC9wcmU+CjwhLS0gL3dwOmNvZGUgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+WW91IGNhbiBwYXNzIHRoZSBwcm9tcHQgdGV4dCBkaXJlY3RseSBhcyBhIHBhcmFtZXRlciB0byB3cF9haV9jbGllbnRfcHJvbXB0KCkgZm9yIGNvbnZlbmllbmNlLCB0aG91Z2ggd2l0aF90ZXh0KCkgaXMgYXZhaWxhYmxlIGZvciBidWlsZGluZyB0aGUgcHJvbXB0IGluY3JlbWVudGFsbHkuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+VGV4dCBnZW5lcmF0aW9uPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6YWcgLS0+CjwgYWJjZWFpbm1wbGU8Lz4KPCEtLSAvd3A6YWcgLS0+Cgo8IS0tIHdwOnByYXAtLT48cD4kdGV4dCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdXcml0ZSBhIGhhaWt1IGFib3V0IFdvcmRQcmVzcy4nICkKICAgIC1nZW5lcmF0ZV90ZXh0KCk7CiB3cHJyIAogYW5sZWUgCmggd3BrZW90IHQgY2U8Lz4KPCEtLSAvd3A6ZCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5zY2hlbWEgIGFycmE8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6IC0tPgo8cHNzcGJuc3AndHlwZScgPSAnYXJyYXknLAogICAgJ2l0ZW1zJyA9IGFycmF5KAogICAgJ3R5cGUnICAgID0gJ29iamVjdCcsCiAgICAncHJvcGVydGllcycgPSBhcnJheSgKICAgICdwbHVnaW5fbmFtZScgPSBhcnJheSggJ3R5cGUnID0gJ3N0cmluZycgKSwKICAgICdjYXRlZ29yeScgID0gYXJyYXkoICd0eXBlJyA9ICdzdHJpbmcnICksCiAgICApLAogICAgJ3JlcXVpcmVkJyA9IGFycmF5KCAncGx1Z2luX25hbWUnLCAnY2F0ZWdvcnknICksCiAgICApLAopOwoKJGpzb24gPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnTGlzdCA1IHBvcHVsYXIgV29yZFByZXNzIHBsdWdpbnMgd2l0aCB0aGVpciBwcmltYXJ5IGNhdGVnb3J5LicgKQogICAgLWFzX2pzb25fcmVzcG9uc2UoICRzY2hlbWEgKQogICAgLWdlbmVyYXRlX3RleHQoKTsKCmlmICggaXNfd3BfZXJyb3IoICRqc29uICkgKSB7CiAvYXJyCiBycmEgc25fZGUoICRqc29udHJlICk7PC8+PC9wcj4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPmF0ICBzb25lY2RlIHNvbiByZSA8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6ZGUgLS0+CjwgY2xhc3M9IndwLWJsb2NrLWQiPmNkZSBhbmdwcGFhZ2FwaHA+JHRleHRzID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ1dyaXRlIGEgdGFnbGluZSBmb3IgYSBwaG90b2dyYXBoeSBibG9nLicgKQogICAgLWdlbmVyYXRlX3RleHRzKCA0ICk7PC8+PC9wcj4KPCEtLSB3cDpvZSAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5JbWFnZSBnZW5lcmF0aW9uPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6YWcgLS0+CjwgYWJhaWdlbmVyYXRpbiBhZTwvPgo8IS0tIC93cDphZyAtLT4KCjwhLS0gd3A6cHJhcC0tPjxwPnVzZSBXb3JkUHJlc3NcQWlDbGllbnRcRmlsZXNcRFRPXEZpbGU7CgokaW1hZ2VfZmlsZSA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdBIGZ1dHVyaXN0aWMgV29yZFByZXNzIGxvZ28gaW4gbmVvbiBzdHlsZScgKQogICAgLWdlbmVyYXRlX2ltYWdlKCk7CgppZiAoIGlzX3dwX2Vycm9yKCAkaW1hZ2VfZmlsZSApICkgewogICAgbmRlIGVycm9yCiAgIHJyCn0KCmVjaG8gJyZsdDtpbWcgc3JjPSInIC4gZXNjX3VybCggJGltYWdlX2ZpbGUtZ2V0RGF0YVVyaSgpICkgLiAnIiBhbHQ9IiInOzwvcD4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPmdlbmVyYXRlX2ltYWdlKCkgcmV0dXJucyBhIEZpbGUgRFRPIHdpdGggYWNjZXNzIHRvIHRoZSBpbWFnZSBkYXRhIHZpYSBnZXREYXRhVXJpKCkuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmFnIC0tPgo8cGxvZWdlbmVyYXRlIG11bHRpcGxlIGlhZSBhaWFlPC8+CjwhLS0gL3dwOmFnIC0tPgoKPCEtLSB3cDpwcmFwLS0+PHA+JGltYWdlcyA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdBZXJpYWwgc2hvdCBvZiBzbm93eSBwbGFpbnMsIGNpbmVtYXRpYy4nICkKICAgIC1nZW5lcmF0ZV9pbWFnZXMoIDQgKTsKCmlmICggaXNfd3BfZXJyb3IoICRpbWFnZXMgKSApIHsKICAgIG5kZSBlcnJvcgogICBycgp9Cgpmb3JlYWNoICggJGltYWdlcyBhcyAkaW1hZ2VfZmlsZSApIHsKICAgIGVjaG8gJyZsdDtpbWcgc3JjPSInIC4gZXNjX3VybCggJGltYWdlX2ZpbGUtZ2V0RGF0YVVyaSgpICkgLiAnIic7PC8+PC9wcj4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkdldHRpbmcgdGhlIGZ1bGwgcmVzdWx0IG9iamVjdDwvaDI+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+Rm9yIHJpY2hlciBtZXRhZGF0YSBwcm92aWRlciBtb2RlbCBpbmZvLCB1c2UgZ2VuZXJhdGVfKl9yZXN1bHQoKSBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgZm9yIGltYWdlIGdlbmVyYXRpb246PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnByYXAtLT48cD4kcmVzdWx0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0Egc2VyZW5lIG1vdW50YWluIGxhbmRzY2FwZS4nICkKICAgIC1nZW5lcmF0ZV9pbWFnZV9yZXN1bHQoKTs8L3A+CjwhLS0gL3dwOiAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGlzIHJldHVybnMgYSBlR2VuZXJhdGl2ZUFpUmVzdWx0IG9iamVjdCB0aGF0IGUgc2UgaWVjIG8gdG5yb24sIGluZyB0IHNhZ2FkICBwb2UgIGVyZXMgdG8gdGhlIC48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGUgcmVzdWx0IG9iamVjdCBpcyBzZXJhbGllY2UgYWRkaXRsIHRvIGNkdGVudXNlIGFuIGkgcmlyYWQgIG9lIHJlcyB0byB0aGUgLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkF2YWlsYWJsZSBnZW5lcmF0ZV8qX3Jlc3VsdCgpIG1ldGhvZHM6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmxpc3QgLS0+Cjx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5nZW5lcmF0ZV90ZXh0X3Jlc3VsdCgpPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5nZW5lcmF0ZV9pbWFnZV9yZXN1bHQoKTwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+Y29udmVydF90ZXh0X3RvX3NwZWVjaF9yZXN1bHQoKTwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+Z2VuZXJhdGVfc3BlZWNoX3Jlc3VsdCgpPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5nZW5lcmF0ZV92aWRlb19yZXN1bHQoKTwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlVzZSB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIGZvciB0aGUgbW9kYWxpdHkgeW91IGFyZSB3b3JraW5nIHdpdGguIEVhY2ggcmV0dXJucyBhIEdlbmVyYXRpdmVBaVJlc3VsdCBvYmplY3Qgd2l0aCByaWNoIG1ldGFkYXRhLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjN9IC0tPgo8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk1vZGVsIHByZWZlcmVuY2VzPC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGUgbW9kZWxzIGF2YWlsYWJsZSBvbiBlYWNoIFdvcmRQcmVzcyBzaXRlIGRlcGVuZHMgb24gd2hpY2ggQUkgcHJvdmlkZXJzIHRoZSBhZG1pbmlzdHJhdG9ycyBvZiB0aGF0IHNpdGUgaGF2ZSBjb25maWd1cmVkIGluIHRoZSA8c3Ryb25nPlNldHRpbmdzICZndDsgQ29ubmVjdG9yczwvc3Ryb25nPiBzY3JlZW4uPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+U2luY2UgeW91ciBwbHVnaW4gZG9lc24ndCBjb250cm9sIHdoaWNoIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIG9uIGVhY2ggc2l0ZSwgdXNlIHVzaW5nX21vZGVsX3ByZWZlcmVuY2UoKSB0byBpbmRpY2F0ZSB3aGljaCBtb2RlbHMgd291bGQgYmUgaWRlYWwuIFRoZSBBSSBDbGllbnQgd2lsbCB1c2UgdGhlIGZpcnN0IG1vZGVsIGZyb20gdGhhdCBsaXN0IHRoYXQgaXMgYXZhaWxhYmxlLCBmYWxsaW5nIGJhY2sgdG8gYW55IGNvbXBhdGlibGUgbW9kZWwgaWYgbm9uZSBhcmUgYXZhaWxhYmxlOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwcmFwLS0+PHA+JHRleHRfcmVzdWx0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ1N1bW1hcml6ZSB0aGUgaGlzdG9yeSBvZiB0aGUgcHJpbnRpbmcgcHJlc3MuJyApCiAgICAtdXNpbmdfdGVtcGVyYXR1cmUoIDAuMSApCiAgICAtdXNpbmdfbW9kZWxfcHJlZmVyZW5jZSgKICAgICdjbGF1ZGUtc29ubmV0LTQtNicsCiAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsCiAgICAnZ3B0LTUuNCcKICAgICkKICAgIC1nZW5lcmF0ZV90ZXh0X3Jlc3VsdCgpOzwvcD4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRoaXMgaXMgYSBwcmVmZXJlbmNlLCBub3QgYSByZXF1aXJlbWVudC4gWW91ciBwbHVnaW4gc2hvdWxkIGZ1bmN0aW9uIHdpdGhvdXQgaXQuIEtlZXAgaW4gbWluZCB0aGF0IHlvdSBjYW4gdGVzdCBvciB2ZXJpZnkgd2hpY2ggbW9kZWwgd2FzIHVzZWQgYnkgbG9va2luZyBhdCB0aGUgZnVsbCByZXN1bHQgb2JqZWN0LCB1bmRlciB0aGUgcHJvdmlkZXJNZXRhZGF0YSBhbmQgbW9kZWxNZXRhZGF0YSBwcm9wZXJ0aWVzLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkZlYXR1cmUgZGV0ZWN0aW9uPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5Ob3QgZXZlcnkgV29yZFByZXNzIHNpdGUgd2lsbCBoYXZlIGFuIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQsIGFuZCBub3QgZXZlcnkgcHJvdmlkZXIgc3VwcG9ydHMgZXZlcnkgY2FwYWJpbGl0eSBhbmQgZXZlcnkgb3B0aW9uLiBCZWZvcmUgc2hvd2luZyBBSS1wb3dlcmVkIFVJLCBjaGVjayB3aGV0aGVyIHRoZSBmZWF0dXJlIGNhbiB3b3JrOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwcmFwLS0+PHA+JGJ1aWxkZXIgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAndGVzdCcgKQogICAgLXVzaW5nX3RlbXBlcmF0dXJlKCAwLjcgKTsKCmlmICggJGJ1aWxkZXItaXNfc3VwcG9ydGVkX2Zvcl90ZXh0X2dlbmVyYXRpb24oKSApIHsKICAgIC8vIFNhZmUgdG8gc2hvdyB0ZXh0IGdlbmVyYXRpb24gVUkuPC8+PC9wcj4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRoZXNlIGNoZWNrcyBkbyBub3QgbWFrZSBBUEkgY2FsbHMuIFRoZXkgdXNlIGRldGVybWluaXN0aWMgbG9naWMgdG8gbWF0Y2ggdGhlIGJ1aWxkZXIncyBjb25maWd1cmF0aW9uIGFnYWluc3QgdGhlIGNhcGFiaWxpdGllcyBvZiBhdmFpbGFibGUgbW9kZWxzLiBoZXJlIGlzIG5vIGNvc3QgaW5jdXJyZWQgYnkgY2FsbGluZyB0aGVtLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkF2YWlsYWJsZSBzdXBwb3J0IGNoZWNrIG1ldGhvZHM6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmxpc3QgLS0+Cjx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5pc19zdXBwb3J0ZWRfZm9yX3RleHRfZ2VuZXJhdGlvbigpPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5pc19zdXBwb3J0ZWRfZm9yX2ltYWdlX2dlbmVyYXRpb24oKTwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+aXNfc3VwcG9ydGVkX2Zvcl90ZXh0X3RvX3NwZWVjaF9jb252ZXJzaW9uKCk8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPmlzX3N1cHBvcnRlZF9mb3Jfc3BlZWNoX2dlbmVyYXRpb24oKTwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+aXNfc3VwcG9ydGVkX2Zvcl92aWRlb19nZW5lcmF0aW9uKCk8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+PC91bD4KPCEtLSAvd3A6bGlzdCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5Vc2UgdGhlc2UgdG8gY29uZGl0aW9uYWxseSBsb2FkIHlvdXIgVUksIHNob3cgYSBoZWxwZnVsIG5vdGljZSB3aGVuIHRoZSBmZWF0dXJlIGlzIHVuYXZhaWxhYmxlLCBvciBza2lwIHJlZ2lzdGVyaW5nIFVJIGFsdG9nZXRoZXIuIE5ldmVyIGFzc3VtZSB0aGF0IEFJIGZlYXR1cmVzIHdpbGwgYmUgYXZhaWxhYmxlIGp1c3QgYmVjYXVzZSBXb3JkUHJlc3MgNy4wIGlzIGluc3RhbGxlZC48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5BZHZhbmNlZCBjb25maWd1cmF0aW9uPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5TeXN0ZW0gaW5zdHJ1Y3Rpb25zPC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cHJhcC0tPjxwPiR0ZXh0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0V4cGxhaW4gY2FjaGluZy4nICkKICAgIC11c2luZ19zeXN0ZW1faW5zdHJ1Y3Rpb24oICdZb3UgYXJlIGEgV29yZFByZXNzIGRldmVsb3BlciB3cml0aW5nIGRvY3VtZW50YXRpb24uJyApPC9wPgo8IS0tIC93cDpwYWFnYXBoIC0tPgoKPCEtLSB3cDogLS0+CjxwPm5zcG5wbnBucC1ndGdlbmVyYXRlX3RleHQoKTs8L3A+CjwhLS0gL3dwOiAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5PdXRwdXQgZmlsZSB0eXBlIGFuZCBvcmllbnRhdGlvbiBmb3IgaW1hZ2VzPC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cHJhcC0tPjxwPnVzZSBXb3JkUHJlc3NcQWlDbGllbnRcRmlsZXNcRW51bXNcRmlsZVR5cGVFbnVtOwp1c2UgV29yZFByZXNzXEFpQ2xpZW50XEZpbGVzXEVudW1zXE1lZGlhT3JpZW50YXRpb25FbnVtOwoKJHJlc3VsdCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdBIHZpYnJhbnQgc3Vuc2V0IG92ZXIgdGhlIG9jZWFuLicgKQogICAgLXdpdGhfdGV4dCggJ0EgdmlicmFudCBzdW5zZXQgb3ZlciB0aGUgb2NlYW4uJyApCiAgICAtYXNfb3V0cHV0X2ZpbGVfdHlwZSggRmlsZVR5cGVFbnVtOjppbmxpbmUoKSApCiAgICAtYXNfb3V0cHV0X21lZGlhX29yaWVudGF0aW9uKCBNZWRpYU9yaWVudGF0aW9uRW51bTo6ZnJvbSggJ2xhbmRzY2FwZScgKSApCiAgICAtZ2VuZXJhdGVfaW1hZ2VfcmVzdWx0KCk7PC9wPgo8IS0tIC93cDogLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+TXVsdGltb2RhbCBvdXRwdXQ8L2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwcmFwLS0+PHA+dXNlIFdvcmRQcmVzc1xBaUNsaWVudFxNZXNzYWdlc1xFbnVtc1xNb2RhbGl0eUVudW07CgokcmVzdWx0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0NyZWF0ZSBhIHJlY2lwZSBmb3IgYSBjaG9jb2xhdGUgY2FrZSBhbmQgaW5jbHVkZSBwaG90b3MgZm9yIHRoZSBzdGVwcy4nICkKICAgIC1hc19vdXRwdXRfbW9kYWxpdGllcyggTW9kYWxpdHlFbnVtOjp0ZXh0KCksIE1vZGFsaXR5RW51bTo6aW1hZ2UoKSApCiAgICAtZ2VuZXJhdGVfcmVzdWx0KCk7CgppZiAoIGlzX3dwX2Vycm9yKCAkcmVzdWx0ICkgKSB7CiAgICBuZGUgZXJyb3IKICAgcnIKfQoKZm9yZWFjaCAoICRyZXN1bHQtdG9NZXNzYWdlKCktZ2V0UGFydHMoKSBhcyAkcGFydCApIHsKICAgIGlmICggJHBhcnQtaXNUZXh0KCkgKSB7CiAgICBlY2hvIHdwX2tzZXNfcG9zdCggJHBhcnQtZ2V0VGV4dCgpICk7CiAgICB9IGVsc2VpZiAoICRwYXJ0LWlzRmlsZSgpICZhbXA7JmFtcDsgJHBhcnQtZ2V0RmlsZSgpLWlzSW1hZ2UoKSApIHsKICAgIGVjaG8gJyZsdDtpbWcgc3JjPSInIC4gZXNjX3VybCggJHBhcnQtZ2V0RmlsZSgpLWdldERhdGFVcmkoKSApIC4gJyInOwogICAgfQp9PC9jb2RlPjwvcGU+CjwhLS0gd3A6Y29kZSAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5BZGRpdGlvbmFsIGJ1aWxkZXIgbWV0aG9kczwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VGhlIGZ1bGwgbGlzdCBvZiBjb25maWd1cmF0aW9uIG1ldGhvZHMgaXMgYXZhaWxhYmxlIHZpYSB0aGUgV1BfQUlfQ2xpZW50X1Byb21wdF9CdWlsZGVyIGNsYXNzLiBLZXkgbWV0aG9kcyBpbmNsdWRlOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDp0YWJsZSAtLT4KPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2stdGFibGUiPjx0YWJsZSBjbGFzcz0iaGFzLWZpeGVkLWxheW91dCI+PHRoZWFkPjx0cj48dGg+PHN0cm9uZz5Db25maWd1cmF0aW9uPC9zdHJvbmc+PC90aD48dGg+PHN0cm9uZz5NZXRob2Q8L3N0cm9uZz48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD5Qcm9tcHQgdGV4dDwvdGQ+PHRkPndpdGhfdGV4dCgpPC90ZD48L3RyPjx0cj48dGQ+RmlsZSBpbnB1dDwvdGQ+PHRkPndpdGhfZmlsZSgpPC90ZD48L3RyPjx0cj48dGQ+Q29udmVyc2F0aW9uIGhpc3Rvcnk8L3RkPjx0ZD53aXRoX2hpc3RvcnkoKTwvdGQ+PC90cj48dHI+PHRkPlN5c3RlbSBpbnN0cnVjdGlvbjwvdGQ+PHRkPnVzaW5nX3N5c3RlbV9pbnN0cnVjdGlvbigpPC90ZD48L3RyPjx0cj48dGQ+VGVtcGVyYXR1cmU8L3RkPjx0ZD51c2luZ190ZW1wZXJhdHVyZSgpPC90ZD48L3RyPjx0cj48dGQ+TWF4IHRva2VuczwvdGQ+PHRkPnVzaW5nX21heF90b2tlbnMoKTwvdGQ+PC90cj48dHI+PHRkPlRvcC1wIC8gVG9wLWs8L3RkPjx0ZD51c2luZ190b3BfcCgpLCB1c2luZ190b3BfaygpPC90ZD48L3RyPjx0cj48dGQ+U3RvcCBzZXF1ZW5jZXM8L3RkPjx0ZD51c2luZ19zdG9wX3NlcXVlbmNlcygpPC90ZD48L3RyPjx0cj48dGQ+TW9kZWwgcHJlZmVyZW5jZTwvdGQ+PHRkPnVzaW5nX21vZGVsX3ByZWZlcmVuY2UoKTwvdGQ+PC90cj48dHI+PHRkPk91dHB1dCBtb2RhbGl0aWVzPC90ZD48dGQ+YXNfb3V0cHV0X21vZGFsaXRpZXMoKTwvdGQ+PC90cj48dHI+PHRkPk91dHB1dCBmaWxlIHR5cGU8L3RkPjx0ZD5hc19vdXRwdXRfZmlsZV90eXBlKCk8L3RkPjwvdHI+PHRyPjx0ZD5KU09OIHJlc3BvbnNlPC90ZD48dGQ+YXNfanNvbl9yZXNwb25zZSgpPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2ZpZ3VyZT4KPCEtLSAvd3A6dGFibGUgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+RXJyb3IgaGFuZGxpbmc8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPndwX2FpX2NsaWVudF9wcm9tcHQoKSByZXR1cm4gV1BfRXJyb3Igb24gZmFpbHVyZSwgZm9sbG93aW5nIFdvcmRQcmVzcyBjb252ZW50aW9uczo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cHJhcC0tPjxwPiR0ZXh0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0hlbGxvJyApCiAgICAtZ2VuZXJhdGVfdGV4dCgpOwoKaWYgKCBpc193cF9lcnJvciggJHRleHQgKSApIHsKICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IuPC8+PC9wcj4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPldoZW4gdXNlZCBpbiBhIFJFU1QgQVBJIGNhbGxiYWNrLCBib3RoIEdlbmVyYXRpdmVBaVJlc3VsdCBhbmQgV1BfRXJyb3IgY2FuIGJlIHBhc3NlZCB0byByZXN0X2Vuc3VyZV9yZXNwb25zZSgpIGRpcmVjdGx5OjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwcmFwLS0+PHA+ZnVuY3Rpb24gbXlfcmVzdF9jYWxsYmFjayggV1BfUkVTVF9SZXF1ZXN0ICRyZXF1ZXN0ICkgewogICAgJHJlc3VsdCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICRyZXF1ZXN0LWdldF9wYXJhbSggJ3Byb21wdCcgKSApCiAgICAtZ2VuZXJhdGVfdGV4dF9yZXN1bHQoKTsKICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZSggJHJlc3VsdCApOzwvPjwvcHI+CjwhLS0gL3dwOiAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5JZiBhbiBlcnJvciBvY2N1cnMsIGl0IHdpbGwgYXV0b21hdGljYWxseSBoYXZlIGEgc2VtYW50aWNhbGx5IG1lYW5pbmdmdWwgSFRUUCByZXNwb25zZSBjb2RlIGF0dGFjaGVkIHRvIGl0LjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkNvbnRyb2xsaW5nIEFJIGF2YWlsYWJpbGl0eTwvaDI+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+Rm9yIGdyYW51bGFyIGNvbnRyb2wsIHRoZSB3cF9haV9jbGllbnRfcHJldmVudF9wcm9tcHQgZmlsdGVyIGFsbG93cyBwcmV2ZW50aW5nIHNwZWNpZmljIHByb21wdHMgZnJvbSBleGVjdXRpbmc6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOiAtLT4KPHByIHdwLS0+PCBhZ3BocHNzbnBwJ3dwX2FpX2NsaWVudF9wcmV2ZW50X3Byb21wdCcsCiAgICBmdW5jdGlvbiAoIGJvb2wgJHByZXZlbnQsIFdQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlciAkYnVpbGRlciApOiBib29sIHsKICAgIC8vIEV4YW1wbGU6IEJsb2NrIGFsbCBwcm9tcHRzIGZvciBub24tYWRtaW4gdXNlcnMuCiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgewogICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gJHByZXZlbnQ7CiAgICB9LAogICAgMTAsCiAgICAKOzwvPjwvcHI+CjwhLS0gL3dwOiAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5XaGVuIGEgcHJvbXB0IGlzIHByZXZlbnRlZDo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6bGlzdCAtLT4KPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPm8gIGFsbCBpcyBhZXRlLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+ZXJ0ZV8qKCkgbWV0aG9kcyByZXR1cm4gPD5sc2U8Lz4gbHdpbmcgcGxpbnMgcmVmZWU8Lz4KPCEtLSAvd3A6aSAtLT4KCjwhLS0gd3A6bC1pZSAtLT48bGk+PG9lPmdlbmVyYXRlPC9kPiBldGggZXR1cm4gYSA8Y29kZT5QcnJvcmNvZGUuPC8+PC93cGxpc3RpdGVtID48L2w+CjwhLS0gL3dwOmwgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+QXJjaGl0ZWN0dXJlPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGUgQUkgQ2xpZW50IGluIFdvcmRQcmVzcyA3LjAgY29uc2lzdHMgb2YgdHdvIGxheWVyczo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6bGlzdCB7Im9yZGVyZWQiOnRydWV9IC0tPgo8b2wgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PHN0cm9uZz5QSFAgQUkgQ2xpZW50PC9zdHJvbmc+ICg8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL3BocC1haS1jbGllbnQiPndvcmRwcmVzcy9waHAtYWktY2xpZW50PC9hPikg4oCUIEEgcHJvdmlkZXItYWdub3N0aWMgUEhQIFNESyBidW5kbGVkIGluIENvcmUgYXMgYW4gZXh0ZXJuYWwgbGlicmFyeS4gVGhpcyBpcyB0aGUgZW5naW5lIHRoYXQgaGFuZGxlcyBwcm92aWRlciBjb21tdW5pY2F0aW9uLCBtb2RlbCBzZWxlY3Rpb24sIGFuZCByZXNwb25zZSBub3JtYWxpemF0aW9uLiB0IHVzZXMgY2FtZWxDYXNlIG1ldGhvZCBuYW1pbmcuPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPjwvb2w+CjwhLS0gL3dwOmxpc3QgLS0+Cgo8IS0tIHdwOmxpc3QgeyJvcmRlcmVkIjp0cnVlLCJzdGFydCI6Mn0gLS0+CjxvbCBzdGFydD0iMiIgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PHN0cm9uZz5Xb3JkUHJlc3Mgd3JhcHBlcjwvc3Ryb25nPiDigJQgQ29yZSdzIFdQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlciBjbGFzcyB3cmFwcyB0aGUgUEhQIEFJIENsaWVudCB3aXRoIFdvcmRQcmVzcyBjb252ZW50aW9uczogc25ha2VfY2FzZSBtZXRob2RzLCBXUF9FcnJvciByZXR1cm5zLCBhbmQgaW50ZWdyYXRpb24gd2l0aCBXb3JkUHJlc3MgSFRUUCB0cmFuc3BvcnQsIHRoZSBBYmlsaXRpZXMgQVBJLCB0aGUgQ29ubmVjdG9ycy9TZXR0aW5ncyBpbmZyYXN0cnVjdHVyZSwgYW5kIHRoZSBlaG9vayBzeXN0ZW0uPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPjwvb2w+CjwhLS0gL3dwOmxpc3QgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VGhlIHdwX2FpX2NsaWVudF9wcm9tcHQoKSBmdW5jdGlvbiBpcyB0aGUgcmVjb21tZW5kZWQgZW50cnkgcG9pbnQuIEl0IHJldHVybnMgYSBXUF9BSV9DbGllbnRfUHJvbXB0X0J1aWxkZXIgaW5zdGFuY2UgdGhhdCBjYXRjaGVzIGV4Y2VwdGlvbnMgZnJvbSB0aGUgdW5kZXJseWluZyBTREsgYW5kIGNvbnZlcnRzIHRoZW0gdG8gV1BfRXJyb3Igb2JqZWN0cy48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5DcmVkZW50aWFsIG1hbmFnZW1lbnQ8L2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkFQSSBrZXlzIGFyZSBtYW5hZ2VkIHRocm91Z2ggdGhlIDxhIGhyZWY9Imh0dHBzOi8vbWFrZS53b3JkcHJlc3Mub3JnL2NvcmUvMjAyNi8wMy8xOC9pbnRyb2R1Y2luZy10aGUtY29ubmVjdG9ycy1hcGktaW4td29yZHByZXNzLTctMC8iPkNvbm5lY3RvcnMgQVBJPC9hPi4gQUkgcHJvdmlkZXIgcGx1Z2lucyB0aGF0IHJlZ2lzdGVyIHdpdGggdGhlIFBIUCBBSSBDbGllbnQncyBwcm92aWRlciByZWdpc3RyeSBnZXQgYXV0b21hdGljIGNvbm5lY3RvciBpbnRlZ3JhdGlvbiDigJQgaW5jbHVkaW5nIHRoZSBTZXR0aW5ncyAgQ29ubmVjdG9ycyBhZG1pbiBVSSBmb3IgQVBJIGtleSBtYW5hZ2VtZW50LiBQbHVnaW4gZGV2ZWxvcGVycyB1c2luZyB0aGUgQUkgQ2xpZW50IHRvIGJ1aWxkIGZlYXR1cmVzIGRvIG5vdCBuZWVkIHRvIGhhbmRsZSBjcmVkZW50aWFscyBhdCBhbGwuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+Q2xpZW50LXNpZGUgSmF2YVNjcmlwdCBBUEk8L2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkEgSmF2YVNjcmlwdCBBUEkgd2l0aCBhIHNpbWlsYXIgZmx1ZW50IHByb21wdCBidWlsZGVyIGlzIGF2YWlsYWJsZSB2aWEgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3Mvd3AtYWktY2xpZW50Ij53cC1haS1jbGllbnQ8L2E+IHBhY2thZ2UuIEl0IHVzZXMgUkVTVCBlbmRwb2ludHMgdW5kZXIgdGhlIGhvb2QgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLXNpZGUgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgQVBJIGlzIG5vdCBwYXJ0IG9mIENvcmUsIGFuZCBpdCBpcyBzdGlsbCBiZWluZyBldmFsdWF0ZWQgd2hldGhlciB0aGlzIGFwcHJvYWNoIGlzIHNjYWxhYmxlIGZvciBnZW5lcmFsIHVzZS4gQmVjYXVzZSB0aGUgQVBJIGFsbG93cyBhcmJpdHJhcnkgcHJvbXB0IGV4ZWN1dGlvbiBmcm9tIHRoZSBjbGllbnQtc2lkZSwgaXQgcmVxdWlyZXMgYSBoaWdoLXByaXZpbGVnZSBjYXBhYmlsaXR5IGNoZWNrLCB3aGljaCBieSBkZWZhdWx0IGlzIG9ubHkgZ3JhbnRlZCB0byBhZG1pbmlzdHJhdG9ycy4gVGhpcyByZXN0cmljdGlvbiBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCB1bnRydXN0ZWQgdXNlcnMgZnJvbSBzZW5kaW5nIGFueSBwcm9tcHQgdG8gYW55IGNvbmZpZ3VyZWQgQUkgcHJvdmlkZXIuIEFzIHN1Y2gsIHVzaW5nIHRoaXMgYXBwcm9hY2ggaW4gYSBkaXN0cmlidXRlZCBwbHVnaW4gaXMgbm90IHJlY29tbWVuZGVkLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkZvciBub3csIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBpcyB0byBpbXBsZW1lbnQgaW5kaXZpZHVhbCBSRVNUIEFQSSBlbmRwb2ludHMgZm9yIGVhY2ggc3BlY2lmaWMgQUkgZmVhdHVyZSB5b3VyIHBsdWdpbiBwcm92aWRlcywgYW5kIGhhdmUgeW91ciBKYXZhU2NyaXB0IGZ1bmN0aW9uYWxpdHkgY2FsbCB0aG9zZSBlbmRwb2ludHMuIFRoaXMgYWxsb3dzIHlvdSB0byBlbmZvcmNlIGdyYW51bGFyIHBlcm1pc3Npb24gY2hlY2tzIGFuZCBsaW1pdCB0aGUgc2NvcGUgb2Ygd2hhdCBjYW4gYmUgZXhlY3V0ZWQgZnJvbSB0aGUgY2xpZW50LXNpZGUuIEl0IGFsc28ga2VlcHMgdGhlIGFjdHVhbCBBSSBwcm9tcHQgaGFuZGxpbmcgYW5kIGNvbmZpZ3VyYXRpb24gZnVsbHkgc2NvcGVkIHRvIGJlIHNlcnZlci1zaWRlIG9ubHkuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+TWlncmF0aW9uIGZyb20gcGhwLWFpLWNsaWVudCBhbmQgd3AtYWktY2xpZW50PC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5JZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIHRoZXNlIHBhY2thZ2VzIGluIHlvdXIgcGx1Z2luKHMpIGJlZm9yZSwgaGVyZSdzIHdoYXQgdG8ga25vdy48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5SZWNvbW1lbmRlZDogcmVxdWlyZSBXb3JkUHJlc3MgNy4wPC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5UaGUgc2ltcGxlc3QgcGF0aCBpcyB0byB1cGRhdGUgeW91ciBwbHVnaW4ncyBSZXF1aXJlcyBhdCBsZWFzdCBoZWFkZXIgdG8gNy4wIGFuZCByZW1vdmUgdGhlIENvbXBvc2VyIGRlcGVuZGVuY2llcyBvbiB3b3JkcHJlc3MvcGhwLWFpLWNsaWVudCBhbmQgaXRzIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlJlcGxhY2UgYW55IEFJX0NsaWVudDo6cHJvbXB0KCkgY2FsbHMgd2l0aCB3cF9haV9jbGllbnRfcHJvbXB0KCkuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+Rm9yIHRoZSB3b3JkcHJlc3Mvd3AtYWktY2xpZW50IHBhY2thZ2UsIGlmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBwYWNrYWdlJ3MgUkVTVCBBUEkgZW5kcG9pbnRzIG9yIEphdmFTY3JpcHQgQVBJLCB5b3UgY2FuIHNpbXBseSByZW1vdmUgaXQgYXMgYSBkZXBlbmRlbmN5LCBzaW5jZSBldmVyeXRoaW5nIGVsc2UgaXQgZG9lcyBpcyBub3cgcGFydCBvZiBXb3JkUHJlc3MgQ29yZS48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5JZiB5b3UgbXVzdCBzdXBwb3J0IFdvcmRQcmVzcyAmbHQ7IDcuMDwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6NH0gLS0+CjxoNCBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UEhQIEFJIENsaWVudCAod29yZHByZXNzL3BocC1haS1jbGllbnQpPC9oND4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5JZiB5b3VyIHBsdWdpbiBzdGlsbCBuZWVkcyB0byBydW4gb24gV29yZFByZXNzIHZlcnNpb25zIGJlZm9yZSA3LjAgd2hpbGUgYWxzbyBidW5kbGluZyB3b3JkcHJlc3MvcGhwLWFpLWNsaWVudCwgeW91IHdpbGwgbmVlZCBhIGNvbmRpdGlvbmFsIGF1dG9sb2FkZXIgd29ya2Fyb3VuZC4gVGhlIFBIUCBBSSBDbGllbnQgYW5kIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG5vdyBsb2FkZWQgYnkgQ29yZSBvbiA3LjArLCBzbyBsb2FkaW5nIHRoZW0gYWdhaW4gdmlhIENvbXBvc2VyIHdpbGwgY2F1c2UgY29uZmxpY3RzIChkdXBsaWNhdGUgY2xhc3MgZGVmaW5pdGlvbnMpLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRoZSBzb2x1dGlvbjogb25seSByZWdpc3RlciB5b3VyIENvbXBvc2VyIGF1dG9sb2FkZXIgZm9yIHRoZXNlIGRlcGVuZGVuY2llcyB3aGVuIHJ1bm5pbmcgb24gV29yZFByZXNzIHZlcnNpb25zIGJlZm9yZSA3LjA6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnByYXAtLT48cD5pZiAoIHZlcnNpb25fY29tcGFyZSggZ2V0X3ZlcnNpb24pLCAnNy4wJywgJyZsdDsnICkgKSB7CiAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL2F1dG9sb2FkLnBocCc7PC8+PC9wcj4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkR1ZSB0byBob3cgQ29tcG9zZXIncyBhdXRvbG9hZGVyIHdvcmtzIOKAlCBsb2FkaW5nIGFsbCBkZXBlbmRlbmNpZXMgYXQgb25jZSByYXRoZXIgdGhhbiBzZWxlY3RpdmVseSDigJQgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoIHdhcyBub3QgZmVhc2libGUuIFRoaXMgbWVhbnMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIG5lZWRzIHRvIHdyYXAgdGhlIGVudGlyZSBhdXRvbG9hZGVyLiBBbHRlcm5hdGl2ZWx5LCBicmVhayB5b3VyIFBIUCBkZXBlbmRlbmNpZXMgYXBhcnQgaW4gdHdvIHNlcGFyYXRlIENvbXBvc2VyIHNldHVwcywgb25lIHRoYXQgY2FuIGFsd2F5cyBiZSBhdXRvbG9hZGVkLCBhbmQgYW5vdGhlciBvbmUgZm9yIHRoZSBwaHAtYWktY2xpZW50IHBhY2thZ2UgYW5kIGl0cyBkZXBlbmRlbmNpZXMgb25seSwgd2hpY2ggd291bGQgYmUgY29uZGl0aW9uYWxseSBhdXRvbG9hZGVkLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjR9IC0tPgo8aDQgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPldQIEFJIENsaWVudCAod29yZHByZXNzL3dwLWFpLWNsaWVudCk8L2g0Pgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRoZSB3b3JkcHJlc3Mvd3AtYWktY2xpZW50IHBhY2thZ2UgaGFuZGxlcyB0aGUgV29yZFByZXNzIDcuMCB0cmFuc2l0aW9uIGF1dG9tYXRpY2FsbHkuIE9uIDcuMCssIGl0IGRpc2FibGVzIGl0cyBvd24gUEhQIFNESyBpbmZyYXN0cnVjdHVyZSAoc2luY2UgQ29yZSBoYW5kbGVzIGl0IG5hdGl2ZWx5KSBidXQga2VlcHMgdGhlIFJFU1QgQVBJIGVuZHBvaW50cyBhbmQgSmF2YVNjcmlwdCBBUEkgYWN0aXZlLCBhcyB0aG9zZSBhcmVuJ3QgaW4gQ29yZSB5ZXQuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+WW91IGNhbiBjb250aW51ZSBsb2FkaW5nIHRoaXMgcGFja2FnZSB1bmNvbmRpdGlvbmFsbHkuIEl0IGRldGVjdHMgdGhlIFdvcmRQcmVzcyB2ZXJzaW9uIGFuZCBvbmx5IGFjdGl2YXRlcyB0aGUgcGFydHMgdGhhdCBhcmVuJ3QgYWxyZWFkeSBwcm92aWRlZCBieSBDb3JlLiBObyBjb25kaXRpb25hbCBsb2FkaW5nIG5lZWRlZC4gSG93ZXZlciwgbWFrZSBzdXJlIHRvIHN0YXkgdXAgdG8gZGF0ZSBvbiB0aGlzIHBhY2thZ2UsIGJlY2F1c2UgaXQgd2lsbCBsaWtlbHkgYmUgZGlzY29udGludWVkIHNvb24sIGluIGZhdm9yIG9mIG1vdmluZyB0aGUgUkVTVCBBUEkgZW5kcG9pbnRzIGFuZCBKYXZhU2NyaXB0IEFQSSBpbnRvIEd1dGVuYmVyZy48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5TZWUgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3Mvd3AtYWktY2xpZW50L2Jsb2IvdHJ1bmsvVVBHUkFERS5tZCI+V1AgQUkgQ2xpZW50IHVwZ3JhZGUgZ3VpZGU8L2E+IGZvciBhZGRpdGlvbmFsIG1pZ3JhdGlvbiBkZXRhaWxzLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkFkZGl0aW9uYWwgcmVzb3VyY2VzPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6bGlzdCAtLT4KPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPlRyYWMgdGlja2V0OiA8YSBocmVmPSJodHRwczovL2NvcmUudHJhYy53b3JkcHJlc3Mub3JnL3RpY2tldC82NDU5MSI+IzY0NTkxPC9hPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy9waHAtYWktY2xpZW50Ij5QSFAgQUkgQ2xpZW50PC9hPiAoYnVuZGxlZCBsaWJyYXJ5KTwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy93cC1haS1jbGllbnQiPldQIEFJIENsaWVudDwvYT4gKG9yaWdpbmFsIHBhY2thZ2UsIG5vdyB0bHkgbWVyZ2VkIGludG8gQ29yZSk8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxhIGhyZWY9Imh0dHBzOi8vbWFrZS53b3JkcHJlc3Mub3JnL2NvcmUvMjAyNi8wMi8wMy9wcm9wb3NhbC1mb3ItbWVyZ2luZy13cC1haS1jbGllbnQtaW50by13b3JkcHJlc3MtNy0wLyI+T3JpZ2luYWwgbWVyZ2UgcHJvcG9zYWw8L2E+PC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPjwvdWw+CjwhLS0gL3dwOmxpc3QgLS0+c3RhdGVzYXZlZEF0c3RhdGVzYXZlZEJ5bGluZU51bWJlcnNmaXJzdExpbmVOdW1iZXJ3cmFwTGluZXNtYWtlVVJMc0NsaWNrYWJsZXF1aWNrQ29kZSR0ZXh0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ1N1bW1hcml6ZSB0aGUgYmVuZWZpdHMgb2YgY2FjaGluZyBpbiBXb3JkUHJlc3MuJyApICAgIC11c2luZ190ZW1wZXJhdHVyZSggMC43ICkgICAgLWdlbmVyYXRlX3RleHQoKTs8JHRleHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnV3JpdGUgYSBoYWlrdSBhYm91dCBXb3JkUHJlc3MuJyApICAgIC1nZW5lcmF0ZV90ZXh0KCk7bGFuZ3VhZ2VjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NIZXJlJ3MgYSBiYXNpYyB0ZXh0IGdlbmVyYXRpb24gZXhhbXBsZTpjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NZb3UgY2FuIHBhc3MgYSBKU09OIHNjaGVtYSBzbyB0aGF0IHRoZSBtb2RlbCByZXR1cm5zIHN0cnVjdHVyZWQgZGF0YSBhcyBhIEpTT04gc3RyaW5nOmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2NrcyRzY2hlbWEgPSBhcnJheSggICAgJ3R5cGUnICA9ICdhcnJheScsICAgICdpdGVtcycgPSBhcnJheSggICAgICAgICd0eXBlJyAgICAgICA9ICdvYmplY3QnLCAgICAgICAgJ3Byb3BlcnRpZXMnID0gYXJyYXkoICAgICAgICAgICAgJ3BsdWdpbl9uYW1lJyA9IGFycmF5KCAndHlwZScgPSAnc3RyaW5nJyApLCAgICAgICAgICAgICdjYXRlZ29yeScgICAgPSBhcnJheSggJ3R5cGUnID0gJ3N0cmluZycgKSwgICAgICAgICksICAgICAgICAncmVxdWlyZWQnID0gYXJyYXkoICdwbHVnaW5fbmFtZScsICdjYXRlZ29yeScgKSwgICAgKSwpOyRqc29uID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0xpc3QgNSBwb3B1bGFyIFdvcmRQcmVzcyBwbHVnaW5zIHdpdGggdGhlaXIgcHJpbWFyeSBjYXRlZ29yeS4nICkgICAgLWFzX2pzb25fcmVzcG9uc2UoICRzY2hlbWEgKSAgICAtZ2VuZXJhdGVfdGV4dCgpO2lmIChyZXR1cm47fSRkYXRhID0ganNvbl9kZWNvZGUoICRqc29uLCB0cnVlICk7Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzWW91IGNhbiByZXF1ZXN0IG11bHRpcGxlIHJlc3BvbnNlIGNhbmRpZGF0ZXMgYXMgdmFyaWF0aW9ucyBmb3IgdGhlIHNhbWUgcHJvbXB0OmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2NrcyR0ZXh0cyA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdXcml0ZSBhIHRhZ2xpbmUgZm9yIGEgcGhvdG9ncmFwaHkgYmxvZy4nICkgICAgLWdlbmVyYXRlX3RleHRzKCA0ICk7bGFuZ3VhZ2VsYW5ndWFnZUltYWdlIGdlbmVyYXRpb25jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NIZXJlJ3MgYSBiYXNpYyBpbWFnZSBnZW5lcmF0aW9uIGV4YW1wbGU6Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzdXNlIFdvcmRQcmVzc1xBaUNsaWVudFxGaWxlc1xEVE9cRmlsZTskaW1hZ2VfZmlsZSA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdBIGZ1dHVyaXN0aWMgV29yZFByZXNzIGxvZ28gaW4gbmVvbiBzdHlsZScgKSAgICAtZ2VuZXJhdGVfaW1hZ2UoKTtpZiAoIGlzX3dwX2Vycm9yKCAkaW1hZ2VfZmlsZSApICkgeyAgICAgYWxlZXJyb3IgO31lY2hvICcmbHQ7aW1nIHNyYz0iJyAuIGVzY191cmwoICRpbWFnZV9maWxlLWdldERhdGFVcmkoKSApIC4gJyIgYWx0PSIiJztpZiAoIGlzX3dwX2Vycm9yKCAkdGV4dCApICkgeyAgICBkZSBlcnJvciA7fWVjaG8gd3Bfa3Nlc19wb3N0KCAkdGV4dCApOyBpc193cF9lcnJvciggJGpzb24gKSApIHsgICAgLy8gSGFuZGxlIGVycm9yLiAgICAvLyBIYW5sLiAgIHJldHVybgoKPGNvZGU+PC9jb2RlPmUsIHRob3VnaCBhbHQgZXJuYXRpdmVseSB0aGVtZXRob2QgaTxjb2RlPjwvY29kZT4vL0huZCAuICAgcmV0dXJuZ2VuZXJhdGVfaW1hZ2UoKSByZXR1cm5zIGEgRmlsZSBEVE8gd2l0aCBhY2Nlc3MgdG8gdGhlIGltYWdlIGRhdGEgdmlhIGdldERhdGFVcmkoKS5kcm9wQ2FwPGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzU2ltaWxhciB0byB0ZXh0IGdlbmVyYXRpb24sIHlvdSBjYW4gcmVxdWVzdCBtdWx0aXBsZSB2YXJpYXRpb25zIG9mIHRoZSBzYW1lIGltYWdlOmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2NrcyRpbWFnZXMgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnQWVyaWFsIHNob3Qgb2Ygc25vd3kgcGxhaW5zLCBjaW5lbWF0aWMuJyApICAgIC1nZW5lcmF0ZV9pbWFnZXMoIDQgKTtpZiAoIGlzX3dwX2Vycm9yKCAkaW1hZ2VzICkgKSB7ICAgIGRlIGVycm9yIDt9Zm9yZWFjaCAoICRpbWFnZXMgYXMgJGltYWdlX2ZpbGUgKSB7ICAgIGVjaG8gJyZsdDtpbWcgc3JjPSInIC4gZXNjX3VybCggJGltYWdlX2ZpbGUtZ2V0RGF0YVVyaSgpICkgLiAnIic7fWxhbmd1YWdlLy8gSGFubC4gICByZXR1cm5sYW5ndWFnZUdldHRpbmcgdGhlIGZ1bGwgcmVzdWx0IG9iamVjdCwgZS5nLiBjb3ZlcmluZyBwcm92aWRlciBhbmQgbW9kZWwgaW5mb3JtYXRpb248Y29kZT48L2NvZGU+Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzJHJlc3VsdCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdBIHNlcmVuZSBtb3VudGFpbiBsYW5kc2NhcGUuJyApICAgIC1nZW5lcmF0ZV9pbWFnZV9yZXN1bHQoKTtsYW5ndWFnZTxjb2RlPjwvY29kZT5jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NUaGUgR2VuZXJhdGl2ZUFpUmVzdWx0PGNvZGU+PC9jb2RlPiBvYmplY3QgaXMgc2VyaWFsaXphYmxlIGFuZCBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5IHRvIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKCksIG1ha2luZyBpdCBzdHJhaWdodGZvcndhcmQgdG8gZXhwb3NlIEFJIGZlYXR1cmVzIHRocm91Z2ggdGhlIFJFU1QgQVBJLnByb3ZpZHN2ZXJhbHBlc2ZhZGRpaW9hbCBpbmZvbWF0aWNsdWRpbm9rZW51ZSBud2hpY2hydmlkcmFuZHdoaWNoIG1vZGwgcG9uZGVkcHJvbXB0PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPjxkZT5jbzwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT5jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3MkdGV4dF9yZXN1bHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnU3VtbWFyaXplIHRoZSBoaXN0b3J5IG9mIHRoZSBwcmludGluZyBwcmVzcy4nICkgICAgLXVzaW5nX3RlbXBlcmF0dXJlKCAwLjEgKSAgICAtdXNpbmdfbW9kZWxfcHJlZmVyZW5jZSggICAgICAgICdjbGF1ZGUtc29ubmV0LTQtNicsICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsICAgICAgICAnZ3B0LTUuNCcgICAgKSAgICAtZ2VuZXJhdGVfdGV4dF9yZXN1bHQoKTtsYW5ndWFnZTxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2NrcyRidWlsZGVyID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ3Rlc3QnICkgICAgLXVzaW5nX3RlbXBlcmF0dXJlKCAwLjcgKTtpZiAoICRidWlsZGVyLWlzX3N1cHBvcnRlZF9mb3JfdGV4dF9nZW5lcmF0aW9uKCkgKSB7ICAgIC8vIFNhZmUgdG8gc2hvdyB0ZXh0IGdlbmVyYXRpb24gVUkufWxhbmd1YWdlPGNvZGU+PC9jb2RlPkFzIHN1Y2gsIHRoZXkgYXJlIGZhc3QgdG8gcnVuIGFuZCB0PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPiR0ZXh0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0V4cGxhaW4gY2FjaGluZy4nICkgICAgLXVzaW5nX3N5c3RlbV9pbnN0cnVjdGlvbiggJ1lvdSBhcmUgYSBXb3JkUHJlc3MgZGV2ZWxvcGVyIHdyaXRpbmcgZG9jdW1lbnRhdGlvbi4nICkgICAgLWdlbmVyYXRlX3RleHQoKTtsYW5ndWFnZSB0b2Vuc2xhbmd1YWdlTWEgb2xhbmd1YWdlbGV2ZWx1c2UgV29yZFByZXNzXEFpQ2xpZW50XGVzc2dlc1xFbnVtc1xNb2RhbGl0eUVudW07JHJlc3VsdD0gd3BfYWlfY2xpZW5fcHJtcHQoICdDcmVhdGUgYSByZWNpcGUgZm9yIGEgY2hvY29sYXRlIGNhIGFkIGluY2x1ZGUgcGhvdG8gZm9yIHRoZSBzdGVwcy4nICkgICAgLWFzX291dHB1dF9tb2RhbGl0aWVzKCBNb2RhbGl0eUVudW06OnRleHQoKSwgTW9kYWxpdHlFbnVtOjppbWFnZSgpICkgICAgLWdlbmVyYXRlX3Jlc3VsdCgpO2lmICggaXNfd3BfZXJyb3IoICRyZXN1bHQgKSApIHsgICAgLy8gSGFuZGxlIGVycm9yLiAgICByZXR1cm47fWZvcmVhY2ggKCAkcmVzdWx0LXRvTWVzc2FnZSgpLWdldFBhcnRzKCkgYXMgJHBhcnQgKSB7ICAgIGlmICggJHBhcnQtaXNUZXh0KCkgKSB7ICAgICAgICBlY2hvIHdwX2tzZXNfcG9zdCggJHBhcnQtZ2V0VGV4dCgpICk7ICAgIH0gZWxzZWlmICggJHBhcnQtaXNGaWxlKCkgJmFtcDsmYW1wOyAkcGFydC1nZXRGaWxlKCktaXNJbWFnZSgpICkgeyAgICAgICAgZWNobyAnJmx0O2ltZyBzcmM9IicgLiBlc2NfdXJsKCAkcGFydC1nZXRGaWxlKCktZ2V0RGF0YVVyaSgpICkgLiAnIic7ICAgIH19bGFuZ3VhZ2V4b2Vuc3VsdGltb2RsdXRwdXRsZXZlbHVzZSBXb3JkUHJlc3NcQWlDbGllbnRcRmlsZXNcRW51bXNcRmlsZVR5cGVFbnVtO3VzZSBXb3JkUHJlc3NcQWlDbGllbnRcRmlsZXNcRW51bXNcZWRpT3JpZW50YXRpb25FbnVtOyRyZXN1bHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnQSB2aWJyYW50IHN1bnNldCBvdmVyIHRoZSBvY2Vhbi4nICkgICAgLXdpdGhfdGV0KCdBIHZpYnJhbiBzdW5zZXQgdnIgdGhlIG9jZWEuJyApICAgIC1hX291dHB1dF9maWxlX3R5cGUoIEZpbGVUeXBlRW51bTo6aW5saW5lKCkgKSAgICAtYXNfb3V0cHV0X21lZGlhX29yaWVudGF0aW9uKCBNZWRpYU9yaWVudGF0aW9uRW51bTo6ZnJvbSggJ2xhbmRzY2FwZScgKSApICAgIC1nZW5lcmF0ZV9pbWFnZV9yZXN1bHQoKTtsYW5ndWFnZU14a25PdXRwdXRmaWxlIHlwZSBhbmQgcml0YXRpb24gZm9yIGltYWdlY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzJHRleHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnRXhwbGFpbiBxdWFudHVtIGNvbXB1dGluZyBpbiBjb21wbGljYXRlZCB0ZXJtcy4nICkgICAgLXVzaW5nX21heF90b2tlbnMoIDgwMDAgKSAgICAtZ2VuZXJhdGVfdGV4dCgpO2xhbmd1YWdlPGNvZGU+PC9jb2RlPmdlbmVyYXRvciBtZXRob2RzIDxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+JHRleHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnSGVsbG8nICkgICAgLWdlbmVyYXRlX3RleHQoKTtpZiAoIGlzX3dwX2Vycm9yKCAkdGV4dCApICkgeyAgICAvLyBIYW5kbGUgdGhlIGVycm9yLn1sYW5ndWFnZWZ1bmN0aW9uIG15X3Jlc3RfY2FsbGJhY2soIFdQX1JFU1RfUmVxdWVzdCAkcmVxdWVzdCApIHsgICAgJHJlc3VsdCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICRyZXF1ZXN0LWdldF9wYXJhbSggJ3Byb21wdCcgKSApICAgICAgICAtZ2VuZXJhdGVfdGV4dF9yZXN1bHQoKTsgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKCAkcmVzdWx0ICk7fWxhbmd1YWdlPGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc2FkZF9maWx0ZXIoICAgICd3cF9haV9jbGllbnRfcHJldmVudF9wcm9tcHQnLCAgICBmdW5jdGlvbiAoIGJvb2wgJHByZXZlbnQsIFdQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlciAkYnVpbGRlciApOiBib29sIHsgICAgICAgIC8vIEV4YW1wbGU6IEJsb2NrIGFsbCBwcm9tcHRzIGZvciBub24tYWRtaW4gdXNlcnMuICAgICAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgeyAgICAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgfSAgICAgICAgcmV0dXJuICRwcmV2ZW50OyAgICB9LCAgICAxMCwgICAgMik7bGFuZ3VhZ2U8Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aW5uZXJCbG9ja3NObyBBSSBjYWxsIGlzIGF0dGVtcHRlZC5pZGVyIGNvbW11bmljYXRpb24sIG1vZGVsIHNlbGVjdGlvbiwgYW5kIHJlc3BvbnNlIG5vcm1hbGl6YXRpb24uIFNpbmNlIGl0IGlzIHRlY2huaWNhbGx5IGEgV29yZFByZXNzIGFnbm9zdGljIFBIUDxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+IFNESyB3aGljaCBvdGhlciBQSFAgcHJvamVjdHMgY2FuIHVzZSB0b28sIGl0IHVzZXMgY2FtZWxDYXNlIG1ldGhvZCBuYW1pbmcgYW5kIG1ha2VzIHVzZSBvZiBleGNlcHRpb25zLnMvU2V0dGluZ3MgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGUgV29yZFByZXNzIGhvb2tzPGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PHN0cm9uZz48L3N0cm9uZz5TZXBhcmF0ZWx5IGF2YWlsYWJsZTogY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzbGV2ZWxPZmZpY2lhbCBwcm92aWRlciBwbHVnaW5zY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzV29yZFByZXNzIENvcmUgZG9lcyBub3QgYnVuZGxlIGFueSBBSSBwcm92aWRlcnMgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgYXJlIGRldmVsb3BlZCBhbmQgbWFpbnRhaW5lZCBhcyBwbHVnaW5zLCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgZmxleGlibGUgYW5kIHJhcGlkIGl0ZXJhdGlvbiBzcGVlZCwgaW4gYWNjb3JkYW5jZSB3aXRoIGhvdyBmYXN0IEFJIGV2b2x2ZXMuIFRoZSBBSSBDbGllbnQgaW4gV29yZFByZXNzIENvcmUgcHJvdmlkZXMgdGhlIHN0YWJsZSBmb3VuZGF0aW9uLCBhbmQgYXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgaXMgc3VmZmljaWVudGx5IGRldGFjaGVkIGZyb20gcHJvdmlkZXIgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHRoYXQgbWF5IGNoYW5nZSBvdmVybmlnaHQuY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzV2hpbGUgYW55b25lIGlzIGFibGUgdG8gaW1wbGVtZW50IG5ldyBwcm92aWRlciBwbHVnaW5zLCB0aGUgV29yZFByZXNzIHByb2plY3QgaXRzZWxmIGhhcyBkZXZlbG9wZWQgdGhyZWUgaW5pdGlhbCBmbGFnc2hpcCBpbXBsZW1lbnRhdGlvbnMsIHRvIGludGVncmF0ZSB3aXRoIHRoZSBtb3N0IHBvcHVsYXIgQUkgcHJvdmlkZXJzLiBUaGVzZSBwbHVnaW5zIGFyZTpjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NvcmRlcmVkdmFsdWVzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aW5uZXJCbG9ja3NBSSBQcm92aWRlciBmb3IgQW50aHJvcGljY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aW5uZXJCbG9ja3NBSSBQcm92aWRlciBmb3IgR29vZ2xlY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aW5uZXJCbG9ja3NBSSBQcm92aWRlciBmb3IgT3BlbkFJPGEgaHJlZj0iaHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvYWktcHJvdmlkZXItZm9yLWdvb2dsZS8iPjwvYT48YSBocmVmPSJodHRwczovL3dvcmRwcmVzcy5vcmcvcGx1Z2lucy9haS1wcm92aWRlci1mb3ItYW50aHJvcGljLyI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vd29yZHByZXNzLm9yZy9wbHVnaW5zL2FpLXByb3ZpZGVyLWZvci1vcGVuYWkvIj48L2E+PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc2lmICggdmVyc2lvbl9jb21wYXJlKCBnZXRfdmVyc2lvbiksICc3LjAnLCAnJmx0OycgKSApIHsgICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnO31sYW5ndWFnZXdwX3dwXyghIGZ1bmN0aW9uX2V4aXN0cyggJ3dwX2dldF93cF8nICl2ZXJzaW9uIHx8IHdvcmRwcmVzcy88Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+bW9zdGx5ZXI8L2NvZGU+IG9iamVjdCwgYSBmbHVlbnQgYnVpbGRlciB0aGF0IG8uIFlvdSBjaGFpbiBjb25maWd1cmF0aW9uIG1ldGhvZHMgYW5kIHRoZW4gY2FsbCBhIGdlbmVyYXRpb24gbWV0aG9kZmZlcnMgYSBteXJpYWQgb2Ygd2F5cyB0byBjdXN0b21pemUgeW91ciBwcm9tcHQgdG8gcmVjZWl2ZSBhIHJlc3VsdG9iamVjdCxmZnIgeXJhZGYgd2F5cyB1dG9taXp5b3VyIHByb3AgdG8gcmVjZWl2ZSBhIHJlc3VsdAoKPGNvZGU+PC9jb2RlPmFsdGVybmF0aXZlbHkgdGhlIDxjb2RlPjwvY29kZT5tZXRob2QgcHJhcmFwaHA+SGVyZSdzIGFzaSB0eHQgZ2VuZXJ0byBleGE6cHByYXJhcGhjb2RlIC0tPgo8ZSBjbHNzPSJ3YmxvY2tjb2RlImNvZGUgbGFuZz0iaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiCmlmKCBpc19fZW9yKCR0ZXh0ICkgKSB7ICAgLy8gSGQgcnJvci4KICAgcmV0dXJuO30KCmVjb19zc19wcygkZXh0KTs8L29kPnByZWNvZVlvdSBjYW4gcGFzIGEgSlNPTiBzc290aHQgdGhlIG1vZGVsIGV0dW5zIHN0cnVjdHVyZWQgZHRhIGFzIGEgSlNPTiBzdHJpbmc6Y29kZXJlIGNsYT0idy1sb2NrLWNvZGUiPjxjb2RlIGxhZz0icGhwIiBjbGFzPSJsYW5ndWFnZS1ocCI+JHNjaGVtYSA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIEhuZGxlIGVvci4gICBldHVuOwp9CgokZHRhPSBqb2NvZGUsIHVjb2RlZWNvZGVZb3UgY24gcmVxdWVzbXVsdGlwbGVyZXBzIGFuaWRhdHNhIHZhcmlhdGlzZm8gdGhzYW1lIHByb21wdDpjb3ByZWNvZTxvbD0iaCIgY2xzcz0ibG51Z2UtImNvZGVlL2NkcHJhcmFwaHA+SGVyZSdzIHNjIGltYSBnZW9leG1wbDpwcHJhcmFwaGNvZGUgLS0+CjxlIGNsc3M9IndibG9ja2NvZGUiY29kZSBsYW5nPSJocCIgY2xhc3M9Imxhbmd1YWdlLXBocCIvLyBIYWwuIGV0dW47Y29kZT48L3JlY29kZTxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPnByYXJhcGg+U2ltaWFyIHQgdHh0IGlvbiwgeW91IGNhbiBycXVlc3R2YXJ0aW9ucyBvZiB0aHNtZSBtZzpwcHJhcmFwaGNvZGUgLS0+CjxlIGNsc3M9IndibG9ja2NvZGUiY29kZSBsYW5nPSJocCIgY2xhc3M9Imxhbmd1YWdlLXBocCIvLyBIYWwuIGV0dW47Cn1jb2RlZWNvZGUsZS5nLiBjb3ZlcmluZyBhbmQgcm1hdGlvbjxjb2RlPjwvY29kZT5jb2RlIC0tPgo8ZSBjbHNzPSJ3YmxvY2tjb2RlImNvZGUgbGFuZz0iaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiY29kZT48L3JlY29kZTxjb2Q+PC9jb2RlPnByb3ZpZHN2ZXJhbHBlc2ZhZGRpaW9hbCBpbmZvbWF0aWNsdWRpbm9rZW51ZSBud2hpY2hydmlkcmFuZHdoaWNoIG1vZGwgcG9uZGVkcHJvbXB0PGNvZGU+R2VuZWF0aXZBaVJlPC9jb2RlPml6YWJsIGFuZCBhbiBicHNzZSByZWN5PG9lPnJlc19zcmVfcmVwb25zKCk8L2NvZGU+LG1raWd0c3RhZ2h0Zm93cnRvZXhwc0FJIGZlYXR1aHJ1Z2hSRVNUIEFQSTxjb2RlPjwvY29kZT48Y29kZT5jb2RlPjwvPGNvZGU+Y29kZT48LzxkZT5jb2NvZGU+PC88Y29kZT5jb2RlPjwvPGNvZGU+Y29kZT48Lzxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+Y29kZSAtLT4KPGUgY2xzcz0id2Jsb2NrY29kZSJjb2RlIGxhbmc9ImhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIiAgICAgICAgICAgIGNvZGU+PC9yZWNvZGU8Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPmNvZGUgLS0+CjxlIGNsc3M9IndibG9ja2NvZGUiY29kZSBsYW5nPSJocCIgY2xhc3M9Imxhbmd1YWdlLXBocCIKfWNvZGVlY29kZUFzIHN1YywgdGh5IGFmYXN0IHRvIHJ1biBhbmQgdGhlcmUgPGNvZGU+Y29kZT48Lzxjb2RlPmNvZGU+PC88Y29kZT5jb2RlPjwvPGNvZGU+Y29kZT48Lzxjb2RlPmNvZGU+PC9jb2RlIC0tPgo8ZSBjbHNzPSJ3YmxvY2tjb2RlImNvZGUgbGFuZz0iaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiCiAgICAtZ2VuZXJhdGVfdGV4dCgpO2NvZGU+PC9yZWNvZGUgLS0+Cgo8IS0tIHc6aGVkaW5nIHsibGV2ZWwiOjN9IC0tPgo8aDMgY2xzcz0id3AtYmxvY2staGVhZGluIj5NeCB0b2tlbnM8L2gzPgo8IS0tIC93OmVhZGluZ2NvZGVyZSBjbGFzcz0id3AtYmxvY2stY29kZSI8Y29kZSBsYWc9InBocCIgY2xhcz0ibGFuZ3VhZ2UtaHAiPiR0ZXh0ID0gd3BfYWlfY2xpZXRfcm9tcHQoICdFeHBsYWkgcXVhbnR1bSBjb211dGlnIGluIGNvbWxpY2F0ZWQgdGVybXMuJyApCiAgICB1c2luX21heF9va2VucyggODAwMCApCiAgICAtY29kZT48L3JlY29kZWNvZGUgLS0+CjxlIGNsc3M9IndibG9ja2NvZGUiY29kZSBsYW5nPSJocCIgY2xhc3M9Imxhbmd1YWdlLXBocCJjb2RlPjwvcmVjb2RlY29kZSAtLT4KPGUgY2xzcz0id2Jsb2NrY29kZSJjb2RlIGxhbmc9ImhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIi8vIEhhbC4gZXR1bjsgICAgICAgIHIvPGNvZGU+PC9jb2RlPjxjb2RlPmNvZGU+PC88Y29kZT5jb2RlPjwvIChyZWxldmFudCBmb3IgbXVsdGktdHVybiAvIGNoYXRzKTxjb2RlPmNvZGU+PC88Y29kZT5jb2RlPjwvPGNvZGU+Y29kZT48Lzxjb2RlPmNvZGU+PC88Y29kZT5jb2RlPjwvPGNvZGU+Y29kZT48Lzxjb2RlPmNvZGU+PC88Y29kZT5jb2RlPjwvPGNvZGU+Y29kZT48Lzxjb2RlPmNvZGU+PC88Y29kZT48L2NvZGU+Z2VuZWF0b3IgbWhvZHMgcmV0PGNvZGU+PC9jb2RlPmNvZGUgLS0+CjxlIGNsc3M9IndibG9ja2NvZGUiY29kZSBsYW5nPSJocCIgY2xhc3M9Imxhbmd1YWdlLXBocCIKfWNvZGVlY29kZTxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPmNvZGUgLS0+CjxlIGNsc3M9IndibG9ja2NvZGUiY29kZSBsYW5nPSJocCIgY2xhc3M9Imxhbmd1YWdlLXBocCIgICAgCgp9Y29kZWVjb2RlPGNvZGU+PC9jb2RlPmNvZGVlY2xhc3M9ImJsb2NrY29kZSJjb2RlbG49IiIgY2xhPSJsYWd1YWdlLWgiPmFkZF9maWx0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKWNvZGVlY29kZU5BSWN0dG1wZDxjb2Q+aXNfc3VwcG9kPC9jb2RlPmNvZGVmYWNvZGUsYWxvdWd0byBnYWN1bGx5IGhpZCB0aGlyIFVJLmxpbHN0LWl0ZW1pc3R0bQpjZF8qKCljb2Vtb2RzcldfRTwvPmxpCiEtLSA6LS0tdWlzdFNpbmNlIGlpcyB0ZWNobmljYWxseSBhIFdvcmRQcmVzcyBhZ25vc3RpYyBQSFAgU0RLIHdoaWNoIG90aGVyIFBIUCBwcm9qZWN0cyBjYW4gIHRvbywgaXQgdWVzIGFuZCBtYWtlcyB1c2Ugb2YgZXhjZXB0aW9uczxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+V29yZFByc3Mgczxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPjxzdHJvbmc+PC9zdHJvbmc+T2ZmaWNpYWwgcHJvdmlkZXIgcGx1Z2luczwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+V29yZFByZXNzIG9yZSBkb2VzIG5vdCBidW5kZSBhbnkgQUkgcHJvdmRycyBkaXJlY3RseS4gSXNlYWQsIHRoZXkgYXJlIGRldmVsb3BlZCBhbmQgbWFpbnRhaW5lZCBhcyBwbHVnaW5zLCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgZmxleGlibGUgYW5kIHJhcGlkIGl0ZXJhdGlvbiBzcGVlZCwgaW4gYWNjb3JkYW5jZSB3aXRoIGhvdyBmYXN0IEFJIGV2b2x2ZXMuIFRoZSBBSSBDbGllbnQgaW4gV29yZFByZXNzIENvcmUgcHJvdmlkZXMgdGhlIHN0YWJsZSBmb3VuZGF0aW9uLCBhbmQgYXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgaXMgc3VmZmljaWVudGx5IGRldGFjaGVkIGZyb20gcHJvdmlkZXIgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHRoYXQgbWF5IGNoYW5nZSBvdmVybmlnaHQuPC9wPgo8IS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5XaGlsZSBhbnlvbmUgaSBhYmxlIHRvIG1wbGVtZW50IG5ldyBwcm92aXJwbHVnaW5zLCB0aGUgV29yZFByZXNzIHByb2plY3QgaXRzZWxmIGhhcyBkZXZlbG9wZWQgdGhyZWUgaW5pdGlhbCBmbGFnc2hpcCBpbXBsZW1lbnRhdGlvbnMsIHRvIGludGVncmF0ZSB3aXRoIHRoZSBtb3N0IHBvcHVsYXIgQUkgcHJvdmlkZXJzLiBUaGVzZSBwbHVnaW5zIGFyZTo8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6bGlzdCAtLT4KPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd29yZHByZXNzLm9yZy9wbHVnaW5zL2FpLXByb3ZpZGVyLWZvci1hbnRocm9waWMvIj5BSSBQcm92aWRlciBmb3IgQW50aHJvcGljPC9hPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvYWktcHJvdmlkZXItZm9yLWdvb2dsZS8iPkFJIFByb3ZpZGVyIGZvciBHb29nbGU8L2E+PC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT48YSBocmVmPSJodHRwczovL3dvcmRwcmVzcy5vcmcvcGx1Z2lucy9haS1wcm92aWRlci1mb3Itb3BlbmFpLyI+QUkgUHJvdmlkZXIgZm9yIE9wZW5BSTwvYT48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+PC91bD4KPCEtLSAvd3A6bGlzdCAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5TZXBhcmF0ZWx5IGF2YWlsYWJsZTogQ2xpZW50LXNpZGUgPGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT5jb2RlIC0tPgo8ZSBjbHNzPSJ3YmxvY2tjb2RlImNvZGUgbGFuZz0iaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiISBmdW5jdGlvbl9leGlzdHMoICd3cF9nZXRfd3BfJyApIHx8IHZlcnNpb253cF93cF8oCn1jb2RlZWNvZGU8Y29kZT53b3JkcmVzcy9wPC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+bW9zc3RhdGV2ZXJzaW9uJmd0OyZ0O2cmdDtnJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZ0O2cmdDtnJnQ7ZyZ0O2cmZ3Q7JnQ7ZyZ0O2cmZ3Q7JnQ7ZyZndDsmZ3Q7JnQ7ZyZndDsmZ3Q7Jmd0OyZ0O2cmZ3Q7JnQ7ZyZndDsmZ3Q7Jmd0OyZ0O2cmZ3Q7JnQ7ZyZnO3QmdDtnJmd0OyZ0O2cmZ3Q7JnQ7ZyZndDsmdDtnJnQ7ZyZndDsmdDtnJnQ7ZyZ0O2cmZ3Q7b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50Jmd0OyZ0O2dvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnQKJnQ7ZwoKCgoKCgpvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnQKJmd0OwomZ3Q7CiZndDsKJmd0OwomZ3Q7Jmd0OwomZ3Q7Jmd0OwoKJmd0OwoKCgoKJmd0OwomdDtnCgoKCgoKCm9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudAomdDtnb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50CgoKJnQ7ZwoKCgoKCgomdDtnJmd0O29yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudAomdDtnCgoKCgoKCgomdDtnJmd0OwpvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnQKJnQ7Z29yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudAomZ3Q7CiZndDsKCgoKCiZ0O2dvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnQKJmd0OwoKJmd0OwoKb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50CiZndDsKJnQ7Z29yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudAomZ3Q7CiZ0O2dvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnQKCgoKJmd0OwomZ3Q7CiZndDsKJnQ7Z29yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudAoKCiZndDsKJnQ7ZwoKCgoKCgomZzt0JnQ7ZwomZ3Q7CiZ0O2cKJmd0OyZ0O2cmZ3Q7CiZ0O2cmdDtnJmd0OwoKb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50CiZ0O2cKCgoKb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50CiZ0O2cKJnQ7ZwoKCm9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudAoKCgoKCgoKCgoKb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50Jmd0O29yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudG9yaWdpbmFsQ29udGVudAoKb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50c3RhdGV2ZXJzaW9uIFRoZSBmb2xsIFRoZSBmb2xsb3dpbmcgVGhlIG1vc3QgcmVsZXZhbnQgbWV0IHJlbGV2YW50IG1ldGhvZHN0IHJlbGV2YW50IG1vc3QgcmVsZXZhbnQgbWV0IHJlbGV2YW50IG1ldGhvZHMgZm9yIHRoaXMgbWV0YWFkcyBmb3IgdGhpcyBhZGRpdGlvbmFsIG1ldGFkaXRpb25hbCBtZXRhZGF0aW9uYWwgbWV0YWRhdGEgYXJlOmNsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrcyogb3JkZXJlZHZhbHVlc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGlubmVyQmxvY2tzYGdldFRva2VuVXNhZ2UoKWA8Y29kZT48L2NvZGU+OiBSZSgpPC9jb2RlPjogUmV0dXJucyB0aGUgdG9rZW4gdXMgdGhlIHRva2VuIHVzYWdlLCB0b2tlbiB1c2FnZSwgYnJva2VuIGRvd24gYnkgaW5wdXR1dCwgb3V0cHV0LCBhbmQgb3B0aW9uYWxseSByZWFzb25pbmFsbHkgcmVhc29uaW5nbmFsbHkgcmVhc29udGhpbmtpb25hbGx5IHRoaW5raW5nLmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGlubmVyQmxvY2tzYGdldFByb3ZpZGVyTWV0YWRhdGEoKWA8Y29kZT48L2NvZGU+OiBSZXR1cm5zIG1lPjogUmV0dXJucyBtZXRhZGF0YSBhYm91dCB0YWRhdGEgYWJvdXQgdGhlIHByb3ZpZGVyIHRoZSBwcm92aWRlciB0aGUgcHJvdmlkZXIgdGhlIHByb3ZpZGVyIHRoYXQgaGFuZGxlciB0aGF0IGhhbmRsZWQgdGhhdCBoYW5kbGVkIHRoYXQgaGFuZGxlZCB0aGF0IGhhbmRsZWQgdGhlIHJlcXVlc3QuY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50aW5uZXJCbG9ja3NgZ2V0TW9kZWxNZXRhZGF0YSgpYDxjb2RlPjwvY29kZT46IFJldHVybnMgbWU+OiBSZXR1cm5zIG1ldGFkYXRhIGFib3V0IHRhZGF0YSBhYm91dCB0aGUgbW9kZWwgdGhhdGhlIG1vZGVsIHRoYXQgaGFuZGxlbCB0aGF0IGhhbmRsZWQgdGhhdCBoYW5kbGVkIHRoYXQgaGFuZGxlZCB0aGF0IGhhbmRsZWQgdGhlIHJlcXVlc3QuIChwYWFzIHBhcnQgb2YgdGhlIHByb3ZpZGVyKS5oZSByZXF1ZXN0ICh0aHJvdWdoY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzSWYgeW91IGRvbid0IHNwZWNpZnkgYSBtb2RlbCBwcmVmZXJlbmVjZSwgdGhlIGZpcnN0IG1vZGVsIGVuY291bnRlcmVkIGFjcm9zcyB0aGUgY29uZmlndXJlZCBwcm92aWRlcnMgdGhhdCBpcyBzdWl0YWJsZSB3aWxsIGJlIHVzZWQuIEl0IGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9ucyB0byBzb3J0IHRoZWkgcHJvdmlkZXIncyBtb2RlbHMgaW4gYSByZWFzb25hYmxlIG1hbm5lciwgZS5nLiBzbyB0aGF0IGluZXdlciBtb2RlbHMgb2YgdGhlIHNhbWUga3R5cGUgYXBwZWFyIGJlZm9yZSBvbGRlciBtb3IgcmUgcmVjZW50IG1vZGVscyBhcHBlYXIgYmVmb3JlIG9sZGVyIG1vbGRlZGVscyBvZiB0aGUgc2FtZSB0eXBlLm1vZGUgZmFsIGZhbWlseS4+Pj4+IFBvdGVudFRoZXJlIGFyZSBvbmdvaW5nIHRvZGlzY3Vzc2lvbnMgb24gd2hldGhlciB0aGVzZSBzaG91bGQgYmUgbWVyZ2VkIGluIHR0byBDb3JlIHRvbywgc2VlIDxhIGhyZWY9Imh0dHBzOi8vY29yZS50cmFjLndvcmRwcmVzcy5vcmcvdGlja2V0LzY0ODcyIj5odHRwczovL2NvcmUudHJhYy53b3JkcHJlc3Mub3JnL3RpY2tldC82NDg3MjwvYT4jNjQ4NzIgYW5kICM2NDg3My4gVGhlIG1vc3QgcmVsZXZhbnQgbWV0aG9kcyBmb3IgdGhpcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGFyZTpsaXN0IC0tPgo8dWwgY2xhc3M9InctYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT48Y29kZT5nZXRUb2tlblVzZ2UoKTwvY29kZT46IFJldHVucyB0aGUgdG9rZW4gdXNlLCBib2tlbiBkb3duIGJ5IGlucHV0LCBvdXRwdXQsIG5kIG90aW9uYWxseSB0aW5raW5nLjwvbGk+CjwhLS0vd3A6bGlzdGl0ZW0gLQohLS0gdzpsaXN0LWl0ZW0gLS0KPGxpPjxjb2RlPmdldFByb3ZpZGVyTWV0YWRhdGEoKTwvY29kZT46IFJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIHByb3ZpZGVyIHRoYXQgaGFuZGxlZCB0aGUgcmVxdWVzdC48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjxjb2RlPmdldE1vZGVsTWV0YWRhdGEoKTwvY29kZT46IFJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIG1vZGVsIHRoYXQgaGFuZGxlZCB0aGUgcmVxdWVzdCAodGhyb3VnaCB0aGUgcHJvdmlkZXIpLjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPnBhcmFncmFwIC0tPgo8cD5JZiB5b3UgZG9uJ3Qgc3BjaWZ5ICBtb2VsIHByZWZlcmVuY2UsIHRoZSBmcnN0IG1vZGVsIGVjb3VudGVyZWQgYWNyb3NzIHRoZSBjb25maXVyZWRwcm92aWRlcnMgdGhhdCBpcyBzdWl0YWJsZSB3aWxsIGJlIHVzZWQuIEl0IGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHByb3ZpZGVyIGltcGxlbWVudGF0aW9ucyB0byBzb3J0IHRoZSBwcm92aWRlcidzIG1vZGVscyBpbiBhIHJlYXNvbmFibGUgbWFubmVyLCBlLmcuIHNvIHRoYXQgbW9yZSByZWNlbnQgbW9kZWxzIGFwcGVhciBiZWZvcmUgb2xkZXIgbW9kZWxzIG9mIHRoZSBzYW1lIG1vZGVsIGZhbWlseS48L3A+CjwhIC93cDpwYXJhZ3JhcGggLS0KIS0tIHdwOmVhZGluZyAtLT4KPGg+Pj4+IFRoZXJlIGFyZSBvbmdvaW5nIGRpc2N1c3Npb25zIG9uIHdoZXRoZXIgdGhlc2Ugc2hvdWxkIGJlIG1lcmdlZCBpbnRvIENvcmUgdG9vLCBzZWUgIzY0ODcyIGFuZCAjNjQ4NzMuJmd0OyZndDsmZ3Q7JnQ7Z2FsaWduY2xhc3NOYW1lYmFja2dyb3VuZENvbG9ydGV4dENvbG9yZ3JhZGllbnRmb250U2l6ZWZvbnRGYW1pbHlib3JkZXJDb2xvcmFuY2hvcj4+Pj4mZ3Q7Jmd0OyZndDsmdDtnPj4+PiZndDsmZ3Q7Jmd0OyZ0O2djbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2NrczxlbT5QPC9lbT5yb3BzIHRvIEBnemlvbG88L2VtPjwvZW0+IEBqdXN0bmlsYW1iYXIgIEBsYXVyaXNhYXJuaSBAanVzdGxldmluZSBmb3IgcmV2aWV3aW5nIHRoaWV3aW5nIHRoaXMgcG9zdC48L2VtPjxlbT48L2VtPnN0eWxlPj4+PgoKPCEtLSB3cDpwYXJhZ3JhcGggeyJzdHlsZSI6eyJ0eXBvZ3JhcGh5Ijp7InRleHRBbGlnbiI6InJpZ2h0In19fSAtLT4KPHAgY2xhc3M9Imhhcy10ZXh0LWFsaWduLXJpZ2h0Ij48ZW0+UHJvcHMgdG8gQGd6aW9sbyBAbmlsYW1iYXIgQGxhdXJpc2Fhcm5pIEBqdXN0bGV2aW5lIGZvciByZXZpZXdpbmcgdGhpcyBwb3N0LjwvZW0+PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Jmd0OyZndDsmZ3Q7JnQ7ZyBUaGUgdGhyZWUgaW5pdGlhbCBvZmZpY2lhbCBwcm92aWRlciBwbHVnaW5zIGhhbmRsZSB0aGlzIG9yZ2FuaXplIG1vZGVscyBpbiB0aGF0IHdheSxhIGEgc3MgcmVjb21tZW5kZWQuIChzZWUgYmVsb3cpIFRoZSB0aHJlZSBpbml0aWFsIG9mZmljaWFsIHByb3ZpZGVyIHBsdWdpbnMgKHNlZSBiZWxvdykgb3JnYW5pemUgbW9kZWxzIGluIHRo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\/AYIBAQhBKjFBALYBATRBARECBQMKQQIwQQA\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yYXRvcl9zZXR0aW5nc3YECHRlbXBsYXRldwdoaWdod2F5EGRlZmF1bHRfaW1hZ2VfaWR9AARmb250dwAHZW5hYmxlZHkHdmVyc2lvbn0CeHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcMY29yZS9oZWFkaW5nfQJ4dw5jb3JlL3BhcmFncmFwaHl4eHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcMY29yZS9oZWFkaW5nfQJ4eHcMY29yZS9oZWFkaW5neHh3DGNvcmUvaGVhZGluZ3h3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3CWNvcmUvbGlzdHl3AHh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL3BhcmFncmFwaHl4dwxjb3JlL2hlYWRpbmd9A3h3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3DGNvcmUvaGVhZGluZ30CeHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcJY29yZS9saXN0eXcAeHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvcGFyYWdyYXBoeXh3DGNvcmUvaGVhZGluZ30CeHcMY29yZS9oZWFkaW5nfQN4eHcMY29yZS9oZWFkaW5nfQN4eHh4eHcMY29yZS9oZWFkaW5nfQN4dw5jb3JlL3BhcmFncmFwaHl4dwpjb3JlL3RhYmxleHUAeHcMY29yZS9oZWFkaW5nfQJ4dw5jb3JlL3BhcmFncmFwaHl4eHcOY29yZS9wYXJhZ3JhcGh5eHh3DmNvcmUvcGFyYWdyYXBoeXh3DGNvcmUvaGVhZGluZ30CeHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcJY29yZS9saXN0eXcAeHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DGNvcmUvaGVhZGluZ30CeHcOY29yZS9wYXJhZ3JhcGh5eHcJY29yZS9saXN0eHcAeHcOY29yZS9saXN0LWl0ZW14dwljb3JlL2xpc3R4dwB9Anh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9wYXJhZ3JhcGh5eHcMY29yZS9oZWFkaW5nfQN4dw5jb3JlL3BhcmFncmFwaHl4dwxjb3JlL2hlYWRpbmd9A3h3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3DGNvcmUvaGVhZGluZ30CeHcOY29yZS9wYXJhZ3JhcGh5eHcMY29yZS9oZWFkaW5nfQN4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dwxjb3JlL2hlYWRpbmd9A3h3DGNvcmUvaGVhZGluZ30EeHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcMY29yZS9oZWFkaW5nfQR4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dwxjb3JlL2hlYWRpbmd9Anh3CWNvcmUvbGlzdHl3AHh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVtdwljb3JlL2NvZGV3A3BocHh3BWRyYWZ0dwljb3JlL2NvZGV3A3BocHcJY29yZS9jb2RldwNwaHB4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dwljb3JlL2NvZGV4dw5jb3JlL3BhcmFncmFwaHl4dwljb3JlL2NvZGV3A3BocHcDcGhwfQJ4dw5jb3JlL3BhcmFncmFwaHl4dwljb3JlL2NvZGV3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3CWNvcmUvY29kZXcDcGhwdwNwaHB9Anh3CWNvcmUvY29kZXcDcGhweHcOY29yZS9wYXJhZ3JhcGh5eHcJY29yZS9jb2RldwNwaHB4dwljb3JlL2NvZGV3A3BocHcJY29yZS9jb2RldwNwaHB3DGNvcmUvaGVhZGluZ30Ddwljb3JlL2NvZGV3A3BocHcMY29yZS9oZWFkaW5nfQN3CWNvcmUvY29kZXcDcGhweHcJY29yZS9jb2RldwNwaHB3CWNvcmUvY29kZXcDcGhwdwljb3JlL2NvZGV3A3BocHh3CWNvcmUvY29kZXcDcGhweHcOY29yZS9saXN0LWl0ZW14dwxjb3JlL2hlYWRpbmd9A3h3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeXh3CWNvcmUvbGlzdHl3AHh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3CWNvcmUvY29kZXcDcGhwdxMyMDI2LTAzLTI0VDAyOjE3OjUydQR9k1p9rFh9oxZ9ilvmAwB3JGZmNGU2OGE5LTk4OWYtNDY3OC04MTZlLTlhNmQ1OGNjMzE5MXfmAjxwPldvcmRQcmVzcyA3LjAgaW5jbHVkZXMgYSBidWlsdC1pbiBBSSBDbGllbnQg4oCUIGEgcHJvdmlkZXItYWdub3N0aWMgUEhQIEFQSSB0aGF0IGxldHMgcGx1Z2lucyBzZW5kIHByb21wdHMgdG8gQUkgbW9kZWxzIGFuZCByZWNlaXZlIHJlc3VsdHMgdGhyb3VnaCBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlLiBZb3VyIHBsdWdpbiBkZXNjcmliZXMgPGVtPndoYXQ8L2VtPiBpdCBuZWVkcyBhbmQgPGVtPmhvdzwvZW0+IGl0IG5lZWRzIGl0LiBXb3JkUHJlc3MgaGFuZGxlcyByb3V0aW5nIHRoZSByZXF1ZXN0IHRvIGEgc3VpdGFibGUgbW9kZWwgZnJvbSBhIHByb3ZpZGVyIHRoZSBzaXRlIG93bmVyIGhhcyBjb25maWd1cmVkLjwvcD53JDUyNzVhYmVhLWM3YmQtNDliNy04ZDBhLTRmMzI0NzE1ODE2Ynd3PHA+VGhpcyBwb3N0IGV4cGxhaW5zIHRoZSBBUEkgc3VyZmFjZSwgd2Fsa3MgdGhyb3VnaCBjb2RlIGV4YW1wbGVzLCBhbmQgY292ZXJzIHdoYXQgcGx1Z2luIGRldmVsb3BlcnMgbmVlZCB0byBrbm93LjwvcD53JDhhNWNjNTM0LTViYTQtNDkzOC04Njc5LTBhYTNjMmVlMzM2MndVPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5UaGUgZW50cnkgcG9pbnQ6IDxjb2RlPndwX2FpX2NsaWVudF9wcm9tcHQoKTwvY29kZT48L2gyPnckYzJiMDU0NWMtYjNhNS00ZTc4LWE1Y2UtNmU5MmJmYzdhODI4dyU8cD5FdmVyeSBpbnRlcmFjdGlvbiBzdGFydHMgd2l0aDo8L3A+dyRmM2M2NzAwMC00NTNiLTRhN2MtOWZjOC1lNzczMDQzZTlmZjN3bzxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+JGJ1aWxkZXIgPSB3cF9haV9jbGllbnRfcHJvbXB0KCk7PC9jb2RlPjwvcHJlPnckMWFkMWEyMDUtMmU1ZC00MDA1LThkZDItMzFiMDUxMTFmMjhid+UBPHA+VGhpcyByZXR1cm5zIGEgPGNvZGU+V1BfQUlfQ2xpZW50X1Byb21wdF9CdWlsZGVyPC9jb2RlPiBvYmplY3QsIGEgZmx1ZW50IGJ1aWxkZXIgdGhhdCBvZmZlcnMgYSBteXJpYWQgb2Ygd2F5cyB0byBjdXN0b21pemUgeW91ciBwcm9tcHQuIFlvdSBjaGFpbiBjb25maWd1cmF0aW9uIG1ldGhvZHMgYW5kIHRoZW4gY2FsbCBhIGdlbmVyYXRpb24gbWV0aG9kIHRvIHJlY2VpdmUgYSByZXN1bHQ6PC9wPnckOTExOTZiM2YtZjBlZi00MmM4LTlkNjAtYjA3OWE2M2NmZjc1d9oBPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGUgbGFuZz0icGhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIj4kdGV4dCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdTdW1tYXJpemUgdGhlIGJlbmVmaXRzIG9mIGNhY2hpbmcgaW4gV29yZFByZXNzLicgKQogICAgLSZndDt1c2luZ190ZW1wZXJhdHVyZSggMC43ICkKICAgIC0mZ3Q7Z2VuZXJhdGVfdGV4dCgpOzwvY29kZT48L3ByZT53JGYwZDk2NzYwLWVlM2MtNDQ4Yi04Y2JlLTE3NGU4M2VkYTY5OHffATxwPllvdSBjYW4gcGFzcyB0aGUgcHJvbXB0IHRleHQgZGlyZWN0bHkgYXMgYSBwYXJhbWV0ZXIgdG8gPGNvZGU+d3BfYWlfY2xpZW50X3Byb21wdCgpPC9jb2RlPiBmb3IgY29udmVuaWVuY2UsIHRob3VnaCBhbHRlcm5hdGl2ZWx5IHRoZSA8Y29kZT53aXRoX3RleHQoKTwvY29kZT4gbWV0aG9kIGlzIGF2YWlsYWJsZSBmb3IgYnVpbGRpbmcgdGhlIHByb21wdCBpbmNyZW1lbnRhbGx5LjwvcD53JDViOGU4NmRiLWU5ZWQtNGQyYy05NGNlLWUxNTFkZTQ1YTMyZncxPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5UZXh0IGdlbmVyYXRpb248L2gyPnckNjI2MjI5MzMtMmZiNC00ZmUyLTkxYjAtYjI3YjliMzMwNmYxdy48cD5IZXJlJ3MgYSBiYXNpYyB0ZXh0IGdlbmVyYXRpb24gZXhhbXBsZTo8L3A+dyQ5Zjk0MzdlMy1jNWJmLTQ1ZjktOGE5Zi0xZTJhN2JhMDkxMjF3hgI8cHJlIGNsYXNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZSBsYW5nPSJwaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiPiR0ZXh0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ1dyaXRlIGEgaGFpa3UgYWJvdXQgV29yZFByZXNzLicgKQogICAgLSZndDtnZW5lcmF0ZV90ZXh0KCk7CgppZiAoIGlzX3dwX2Vycm9yKCAkdGV4dCApICkgewogICAgLy8gSGFuZGxlIGVycm9yLgogICAgcmV0dXJuOwp9CgplY2hvIHdwX2tzZXNfcG9zdCggJHRleHQgKTs8L2NvZGU+PC9wcmU+dyRmNzBjZGI1Ni1iYTRlLTRjODAtYTQ5MC04NjA4NmFiODYyNTd3XTxwPllvdSBjYW4gcGFzcyBhIEpTT04gc2NoZW1hIHNvIHRoYXQgdGhlIG1vZGVsIHJldHVybnMgc3RydWN0dXJlZCBkYXRhIGFzIGEgSlNPTiBzdHJpbmc6PC9wPnckZTZkYjcyMmItNWUxZi00NTY3LWFjMTktNDBiZWRiZDFmZjVid7EFPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGUgbGFuZz0icGhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIj4kc2NoZW1hID0gYXJyYXkoCiAgICAndHlwZScgID0mZ3Q7ICdhcnJheScsCiAgICAnaXRlbXMnID0mZ3Q7IGFycmF5KAogICAgICAgICd0eXBlJyAgICAgICA9Jmd0OyAnb2JqZWN0JywKICAgICAgICAncHJvcGVydGllcycgPSZndDsgYXJyYXkoCiAgICAgICAgICAgICdwbHVnaW5fbmFtZScgPSZndDsgYXJyYXkoICd0eXBlJyA9Jmd0OyAnc3RyaW5nJyApLAogICAgICAgICAgICAnY2F0ZWdvcnknICAgID0mZ3Q7IGFycmF5KCAndHlwZScgPSZndDsgJ3N0cmluZycgKSwKICAgICAgICApLAogICAgICAgICdyZXF1aXJlZCcgPSZndDsgYXJyYXkoICdwbHVnaW5fbmFtZScsICdjYXRlZ29yeScgKSwKICAgICksCik7CgokanNvbiA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdMaXN0IDUgcG9wdWxhciBXb3JkUHJlc3MgcGx1Z2lucyB3aXRoIHRoZWlyIHByaW1hcnkgY2F0ZWdvcnkuJyApCiAgICAtJmd0O2FzX2pzb25fcmVzcG9uc2UoICRzY2hlbWEgKQogICAgLSZndDtnZW5lcmF0ZV90ZXh0KCk7CgppZiAoIGlzX3dwX2Vycm9yKCAkanNvbiApICkgewogICAgLy8gSGFuZGxlIGVycm9yLgogICAgcmV0dXJuOwp9CgokZGF0YSA9IGpzb25fZGVjb2RlKCAkanNvbiwgdHJ1ZSApOzwvY29kZT48L3ByZT53JGIyOGVhOWQzLWM0NmItNGU4Yi05YWM1LWFiMzIyNTQ4MTNlZXdWPHA+WW91IGNhbiByZXF1ZXN0IG11bHRpcGxlIHJlc3BvbnNlIGNhbmRpZGF0ZXMgYXMgdmFyaWF0aW9ucyBmb3IgdGhlIHNhbWUgcHJvbXB0OjwvcD53JDBlY2M2NzMyLWM1ZjktNDk3NC1hZjQzLWVjYjMyNTBmNTEyY3e1ATxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+JHRleHRzID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ1dyaXRlIGEgdGFnbGluZSBmb3IgYSBwaG90b2dyYXBoeSBibG9nLicgKQogICAgLSZndDtnZW5lcmF0ZV90ZXh0cyggNCApOzwvY29kZT48L3ByZT53JGNmOWU5OTk2LWIxZmEtNGJlNC1hZTExLTRhMGNjMzVhOWJhYncyPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5JbWFnZSBnZW5lcmF0aW9uPC9oMj53JDc0ZTcxMzU5LWZiNWEtNDUyNS04MDdiLWUzZDc5MmNiZWIwZXcvPHA+SGVyZSdzIGEgYmFzaWMgaW1hZ2UgZ2VuZXJhdGlvbiBleGFtcGxlOjwvcD53JDVkZTkzNWQwLTcxNWItNGQ3Zi1iZTFjLTQxNTRmMDE4MDBiM3f7AjxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+dXNlIFdvcmRQcmVzc1xBaUNsaWVudFxGaWxlc1xEVE9cRmlsZTsKCiRpbWFnZV9maWxlID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0EgZnV0dXJpc3RpYyBXb3JkUHJlc3MgbG9nbyBpbiBuZW9uIHN0eWxlJyApCiAgICAtJmd0O2dlbmVyYXRlX2ltYWdlKCk7CgppZiAoIGlzX3dwX2Vycm9yKCAkaW1hZ2VfZmlsZSApICkgewogICAgLy8gSGFuZGxlIGVycm9yLgogICAgcmV0dXJuOwp9CgplY2hvICcmbHQ7aW1nIHNyYz0iJyAuIGVzY191cmwoICRpbWFnZV9maWxlLSZndDtnZXREYXRhVXJpKCkgKSAuICciIGFsdD0iIiZndDsnOzwvY29kZT48L3ByZT53JGQ2ZGZmZGRlLTY4MGMtNGIyOC1hYmI0LWUzYjBiMDlhN2NmOXeBATxwPjxjb2RlPmdlbmVyYXRlX2ltYWdlKCk8L2NvZGU+IHJldHVybnMgYSA8Y29kZT5GaWxlPC9jb2RlPiBEVE8gd2l0aCBhY2Nlc3MgdG8gdGhlIGltYWdlIGRhdGEgdmlhIDxjb2RlPmdldERhdGFVcmkoKTwvY29kZT4uPC9wPnckM2ZmNjk3MWMtYzVhMC00NDhlLWEwNGItNDZlNmMwZDAzODA2d1k8cD5TaW1pbGFyIHRvIHRleHQgZ2VuZXJhdGlvbiwgeW91IGNhbiByZXF1ZXN0IG11bHRpcGxlIHZhcmlhdGlvbnMgb2YgdGhlIHNhbWUgaW1hZ2U6PC9wPnckOTI2YTgxNzItOWEzZS00NjQwLWE1ZmMtMDdiZTJkNzQzYTg0d\/ECPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGUgbGFuZz0icGhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIj4kaW1hZ2VzID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0FlcmlhbCBzaG90IG9mIHNub3d5IHBsYWlucywgY2luZW1hdGljLicgKQogICAgLSZndDtnZW5lcmF0ZV9pbWFnZXMoIDQgKTsKCmlmICggaXNfd3BfZXJyb3IoICRpbWFnZXMgKSApIHsKICAgIC8vIEhhbmRsZSBlcnJvci4KICAgIHJldHVybjsKfQoKZm9yZWFjaCAoICRpbWFnZXMgYXMgJGltYWdlX2ZpbGUgKSB7CiAgICBlY2hvICcmbHQ7aW1nIHNyYz0iJyAuIGVzY191cmwoICRpbWFnZV9maWxlLSZndDtnZXREYXRhVXJpKCkgKSAuICciJmd0Oyc7Cn08L2NvZGU+PC9wcmU+dyQ5OTI0N2UwMi01NWFkLTQ0ZjctYmU3Yy1kNGVkMjU1ZTZkNGF3QDxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+R2V0dGluZyB0aGUgZnVsbCByZXN1bHQgb2JqZWN0PC9oMj53JDI4Yzc2MDk4LWNkYzctNGI5Mi1hNDkzLWQzZTg3OWU2NGJiOXeaATxwPkZvciByaWNoZXIgbWV0YWRhdGEsIGUuZy4gY292ZXJpbmcgcHJvdmlkZXIgYW5kIG1vZGVsIGluZm9ybWF0aW9uLCB1c2UgPGNvZGU+Z2VuZXJhdGVfKl9yZXN1bHQoKTwvY29kZT4gaW5zdGVhZC4gRm9yIGV4YW1wbGUsIGZvciBpbWFnZSBnZW5lcmF0aW9uOjwvcD53JGNjNDQ0Y2ExLTEyZjctNGEzNi05MjEwLTdiYTFkYmEwNGNhZnevATxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+JHJlc3VsdCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdBIHNlcmVuZSBtb3VudGFpbiBsYW5kc2NhcGUuJyApCiAgICAtJmd0O2dlbmVyYXRlX2ltYWdlX3Jlc3VsdCgpOzwvY29kZT48L3ByZT53JDYwZGI0NThkLWY2MzUtNDcyZi05Y2Y3LTg5NDkzNzY0NzRmNHfGATxwPlRoaXMgcmV0dXJucyBhIDxjb2RlPkdlbmVyYXRpdmVBaVJlc3VsdDwvY29kZT4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgc2V2ZXJhbCBwaWVjZXMgb2YgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIHRva2VuIHVzYWdlIGFuZCB3aGljaCBwcm92aWRlciBhbmQgd2hpY2ggbW9kZWwgcmVzcG9uZGVkIHRvIHRoZSBwcm9tcHQuPC9wPnckMjE4ZGU2MTctYTM3Ni00MmMyLTkzMGUtOWI4Yzk3YmMwYWUzd8oBPHA+VGhlIDxjb2RlPkdlbmVyYXRpdmVBaVJlc3VsdDwvY29kZT4gb2JqZWN0IGlzIHNlcmlhbGl6YWJsZSBhbmQgY2FuIGJlIHBhc3NlZCBkaXJlY3RseSB0byA8Y29kZT5yZXN0X2Vuc3VyZV9yZXNwb25zZSgpPC9jb2RlPiwgbWFraW5nIGl0IHN0cmFpZ2h0Zm9yd2FyZCB0byBleHBvc2UgQUkgZmVhdHVyZXMgdGhyb3VnaCB0aGUgUkVTVCBBUEkuPC9wPnckZmY3NjUxZjAtOTIxNS00MTUyLWExYmUtYTdkZDEwYzEyZDUwdzo8cD5BdmFpbGFibGUgPGNvZGU+Z2VuZXJhdGVfKl9yZXN1bHQoKTwvY29kZT4gbWV0aG9kczo8L3A+dyRjYjBlZTU2ZS02YzliLTQ1NjAtODMzOC1mYzEzNjc2N2E4ZTh3Jzx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCgoKCgo8L3VsPnckMmQ5OGU0NTEtNjZkNS00MTE3LWI3MTUtNmE2ODQ1MTQ2YmUxdyw8bGk+PGNvZGU+Z2VuZXJhdGVfdGV4dF9yZXN1bHQoKTwvY29kZT48L2xpPnckYjcwNWJhZjItNzQzNS00MDZhLTk3N2QtOGQxNmYwYTE0Zjc2dy08bGk+PGNvZGU+Z2VuZXJhdGVfaW1hZ2VfcmVzdWx0KCk8L2NvZGU+PC9saT53JDIxMDI3MjEzLTg5ZGQtNGUxNC05NjFhLTY2YzI0Y2MxODM5NXc1PGxpPjxjb2RlPmNvbnZlcnRfdGV4dF90b19zcGVlY2hfcmVzdWx0KCk8L2NvZGU+PC9saT53JGNlZjUzYWM2LTU0NzgtNDkxYi05Njc5LTA5MGZkYmI0OWQzZncuPGxpPjxjb2RlPmdlbmVyYXRlX3NwZWVjaF9yZXN1bHQoKTwvY29kZT48L2xpPnckZGMyNmEwMGYtNzY1YS00M2QyLTk5NTMtNWQ4ZDI4NGE3M2Vhdy08bGk+PGNvZGU+Z2VuZXJhdGVfdmlkZW9fcmVzdWx0KCk8L2NvZGU+PC9saT53JDc1Zjg0NmJkLTlhZmYtNGY5MC05MDQ3LTJhNGFmMGYwZWJmZHeSATxwPlVzZSB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIGZvciB0aGUgbW9kYWxpdHkgeW91IGFyZSB3b3JraW5nIHdpdGguIEVhY2ggcmV0dXJucyBhIDxjb2RlPkdlbmVyYXRpdmVBaVJlc3VsdDwvY29kZT4gb2JqZWN0IHdpdGggcmljaCBtZXRhZGF0YS48L3A+dyRlMWViMjRkOS01OTU3LTRkNmUtYTU2Yy05MGE0NDVkYmJhOGR3MzxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+TW9kZWwgcHJlZmVyZW5jZXM8L2gzPnckOGZkN2M4Y2UtMzZmMS00ZjJlLWExMGQtNjlhMDlkOGRjOWVjd7kBPHA+VGhlIG1vZGVscyBhdmFpbGFibGUgb24gZWFjaCBXb3JkUHJlc3Mgc2l0ZSBkZXBlbmRzIG9uIHdoaWNoIEFJIHByb3ZpZGVycyB0aGUgYWRtaW5pc3RyYXRvcnMgb2YgdGhhdCBzaXRlIGhhdmUgY29uZmlndXJlZCBpbiB0aGUgPHN0cm9uZz5TZXR0aW5ncyAmZ3Q7IENvbm5lY3RvcnM8L3N0cm9uZz4gc2NyZWVuLjwvcD53JDFmNTRhYTEyLTZkNzItNDBlNi1hYWIzLWNhZjYzY2M1ODFkYnesAjxwPlNpbmNlIHlvdXIgcGx1Z2luIGRvZXNuJ3QgY29udHJvbCB3aGljaCBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSBvbiBlYWNoIHNpdGUsIHVzZSA8Y29kZT51c2luZ19tb2RlbF9wcmVmZXJlbmNlKCk8L2NvZGU+IHRvIGluZGljYXRlIHdoaWNoIG1vZGVscyB3b3VsZCBiZSBpZGVhbC4gVGhlIEFJIENsaWVudCB3aWxsIHVzZSB0aGUgZmlyc3QgbW9kZWwgZnJvbSB0aGF0IGxpc3QgdGhhdCBpcyBhdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBhbnkgY29tcGF0aWJsZSBtb2RlbCBpZiBub25lIGFyZSBhdmFpbGFibGU6PC9wPnckNzk2OWM1ZDMtNjBhNy00ODhmLWE3MjUtMzk0YzIzMmJhZTQ2d90CPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGUgbGFuZz0icGhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIj4kdGV4dF9yZXN1bHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnU3VtbWFyaXplIHRoZSBoaXN0b3J5IG9mIHRoZSBwcmludGluZyBwcmVzcy4nICkKICAgIC0mZ3Q7dXNpbmdfdGVtcGVyYXR1cmUoIDAuMSApCiAgICAtJmd0O3VzaW5nX21vZGVsX3ByZWZlcmVuY2UoCiAgICAgICAgJ2NsYXVkZS1zb25uZXQtNC02JywKICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsCiAgICAgICAgJ2dwdC01LjQnCiAgICApCiAgICAtJmd0O2dlbmVyYXRlX3RleHRfcmVzdWx0KCk7PC9jb2RlPjwvcHJlPnckYjk4NDY4NjYtZTNiYy00NzdkLWEyOWEtZDY5OGVhMjZiYmJmd44CPHA+VGhpcyBpcyBhIHByZWZlcmVuY2UsIG5vdCBhIHJlcXVpcmVtZW50LiBZb3VyIHBsdWdpbiBzaG91bGQgZnVuY3Rpb24gd2l0aG91dCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgeW91IGNhbiB0ZXN0IG9yIHZlcmlmeSB3aGljaCBtb2RlbCB3YXMgdXNlZCBieSBsb29raW5nIGF0IHRoZSBmdWxsIHJlc3VsdCBvYmplY3QsIHVuZGVyIHRoZSA8Y29kZT5wcm92aWRlck1ldGFkYXRhPC9jb2RlPiBhbmQgPGNvZGU+bW9kZWxNZXRhZGF0YTwvY29kZT4gcHJvcGVydGllcy48L3A+dyQyOWM5ZmQ3Mi05MzAwLTRmZTAtYWJiYy01YmM5NGU3OTg2YTd3MzxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+RmVhdHVyZSBkZXRlY3Rpb248L2gyPnckZGZjY2QzZjYtMDJlNS00MTU4LTg0N2MtN2NlYmVlZjAxMjNhd8kBPHA+Tm90IGV2ZXJ5IFdvcmRQcmVzcyBzaXRlIHdpbGwgaGF2ZSBhbiBBSSBwcm92aWRlciBjb25maWd1cmVkLCBhbmQgbm90IGV2ZXJ5IHByb3ZpZGVyIHN1cHBvcnRzIGV2ZXJ5IGNhcGFiaWxpdHkgYW5kIGV2ZXJ5IG9wdGlvbi4gQmVmb3JlIHNob3dpbmcgQUktcG93ZXJlZCBVSSwgY2hlY2sgd2hldGhlciB0aGUgZmVhdHVyZSBjYW4gd29yazo8L3A+dyRmZGUxZTBlZS1mMWNkLTQ1MzctOWMzMy03MzYwZjc5ZTI2Y2V3\/QE8cHJlIGNsYXNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZSBsYW5nPSJwaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiPiRidWlsZGVyID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ3Rlc3QnICkKICAgIC0mZ3Q7dXNpbmdfdGVtcGVyYXR1cmUoIDAuNyApOwoKaWYgKCAkYnVpbGRlci0mZ3Q7aXNfc3VwcG9ydGVkX2Zvcl90ZXh0X2dlbmVyYXRpb24oKSApIHsKICAgIC8vIFNhZmUgdG8gc2hvdyB0ZXh0IGdlbmVyYXRpb24gVUkuCn08L2NvZGU+PC9wcmU+dyQwMjNlNDVjYy05OTAzLTQzOWUtYjM2OS0wYWQyYTViYzJhMDV35wE8cD5UaGVzZSBjaGVja3MgZG8gbm90IG1ha2UgQVBJIGNhbGxzLiBUaGV5IHVzZSBkZXRlcm1pbmlzdGljIGxvZ2ljIHRvIG1hdGNoIHRoZSBidWlsZGVyJ3MgY29uZmlndXJhdGlvbiBhZ2FpbnN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgYXZhaWxhYmxlIG1vZGVscy4gQXMgc3VjaCwgdGhleSBhcmUgZmFzdCB0byBydW4gYW5kIHRoZXJlIGlzIG5vIGNvc3QgaW5jdXJyZWQgYnkgY2FsbGluZyB0aGVtLjwvcD53JDhkMTZhMzQ2LWEwNzgtNGMzMy1hMWQ3LWM3YTg0ZjUwNjE3YXcnPHA+QXZhaWxhYmxlIHN1cHBvcnQgY2hlY2sgbWV0aG9kczo8L3A+dyQxODY3ZGU2YS0wMzVlLTQ5NDgtOTEyMS01M2UyNTFjMDRjZDd3Jzx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCgoKCgo8L3VsPnckNDg0NTY5MWEtZGFiOC00NDk1LWFjYTgtMWNiYzgwNDg1Y2Iwdzg8bGk+PGNvZGU+aXNfc3VwcG9ydGVkX2Zvcl90ZXh0X2dlbmVyYXRpb24oKTwvY29kZT48L2xpPnckNTUzNzQzN2ItNTE4YS00MDE1LTljZmItYmViZDY0NGQwNDQzdzk8bGk+PGNvZGU+aXNfc3VwcG9ydGVkX2Zvcl9pbWFnZV9nZW5lcmF0aW9uKCk8L2NvZGU+PC9saT53JGExMzE2ZjZhLTg1MjItNDc5MC1hMzUxLTlhYmY4ODU5MDk5MXdCPGxpPjxjb2RlPmlzX3N1cHBvcnRlZF9mb3JfdGV4dF90b19zcGVlY2hfY29udmVyc2lvbigpPC9jb2RlPjwvbGk+dyQyMTJhMGZiMi1mMTRhLTQyZDAtODZiOC1hNjFkZTJmYjMwN2Z3OjxsaT48Y29kZT5pc19zdXBwb3J0ZWRfZm9yX3NwZWVjaF9nZW5lcmF0aW9uKCk8L2NvZGU+PC9saT53JDUzOTg1MGYwLTZmZjUtNDhjMC1hMTE3LWQxZTQ0MjYxZjU4M3c5PGxpPjxjb2RlPmlzX3N1cHBvcnRlZF9mb3JfdmlkZW9fZ2VuZXJhdGlvbigpPC9jb2RlPjwvbGk+dyQzNWJjODY0ZC0zNzYxLTRmOGItOTg2OC03MDdhNzRmNzNmZjF34gE8cD5Vc2UgdGhlc2UgdG8gY29uZGl0aW9uYWxseSBsb2FkIHlvdXIgVUksIHNob3cgYSBoZWxwZnVsIG5vdGljZSB3aGVuIHRoZSBmZWF0dXJlIGlzIHVuYXZhaWxhYmxlLCBvciBza2lwIHJlZ2lzdGVyaW5nIFVJIGFsdG9nZXRoZXIuIE5ldmVyIGFzc3VtZSB0aGF0IEFJIGZlYXR1cmVzIHdpbGwgYmUgYXZhaWxhYmxlIGp1c3QgYmVjYXVzZSBXb3JkUHJlc3MgNy4wIGlzIGluc3RhbGxlZC48L3A+dyRmY2I5OTFiNy02MTEzLTQ5ZWUtOGFiZS1mOTk2Y2E0N2JiNWF3ODxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+QWR2YW5jZWQgY29uZmlndXJhdGlvbjwvaDI+dyQyZWQyMzcwZS1lMDE0LTRlODAtOTE3Ni1lM2M0NDc4ZGJhNGR3NTxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+U3lzdGVtIGluc3RydWN0aW9uczwvaDM+dyQ1ZTFiMWFlNC04ODIzLTRiN2YtOWIxOC0xYTM0YjRiNThlMzN39QE8cHJlIGNsYXNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZSBsYW5nPSJwaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiPiR0ZXh0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0V4cGxhaW4gY2FjaGluZy4nICkKICAgIC0mZ3Q7dXNpbmdfc3lzdGVtX2luc3RydWN0aW9uKCAnWW91IGFyZSBhIFdvcmRQcmVzcyBkZXZlbG9wZXIgd3JpdGluZyBkb2N1bWVudGF0aW9uLicgKQogICAgLSZndDtnZW5lcmF0ZV90ZXh0KCk7PC9jb2RlPjwvcHJlPnckMjU4MWZjMTMtYjg1ZS00ODU3LThlMzYtNmRmYzZmZDAxN2Y1dyw8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk1heCB0b2tlbnM8L2gzPnckZGNkZGQxYzgtMDlhZi00NWZlLTk3NzYtNjI1Yzg3YzU2NTE0d9oBPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGUgbGFuZz0icGhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIj4kdGV4dCA9IHdwX2FpX2NsaWVudF9wcm9tcHQoICdFeHBsYWluIHF1YW50dW0gY29tcHV0aW5nIGluIGNvbXBsaWNhdGVkIHRlcm1zLicgKQogICAgLSZndDt1c2luZ19tYXhfdG9rZW5zKCA4MDAwICkKICAgIC0mZ3Q7Z2VuZXJhdGVfdGV4dCgpOzwvY29kZT48L3ByZT53JDJhMmY4YzAyLTZkYzAtNGJkMS04NjUyLTJmMzkyMTA3MmQ5OHdNPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5PdXRwdXQgZmlsZSB0eXBlIGFuZCBvcmllbnRhdGlvbiBmb3IgaW1hZ2VzPC9oMz53JDIwMzg3N2JiLTI4ZWEtNDc0NC04MzAxLWVmNDc2NzZmYTkxYnfgAzxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+dXNlIFdvcmRQcmVzc1xBaUNsaWVudFxGaWxlc1xFbnVtc1xGaWxlVHlwZUVudW07CnVzZSBXb3JkUHJlc3NcQWlDbGllbnRcRmlsZXNcRW51bXNcTWVkaWFPcmllbnRhdGlvbkVudW07CgokcmVzdWx0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0EgdmlicmFudCBzdW5zZXQgb3ZlciB0aGUgb2NlYW4uJyApCiAgICAtJmd0O3dpdGhfdGV4dCggJ0EgdmlicmFudCBzdW5zZXQgb3ZlciB0aGUgb2NlYW4uJyApCiAgICAtJmd0O2FzX291dHB1dF9maWxlX3R5cGUoIEZpbGVUeXBlRW51bTo6aW5saW5lKCkgKQogICAgLSZndDthc19vdXRwdXRfbWVkaWFfb3JpZW50YXRpb24oIE1lZGlhT3JpZW50YXRpb25FbnVtOjpmcm9tKCAnbGFuZHNjYXBlJyApICkKICAgIC0mZ3Q7Z2VuZXJhdGVfaW1hZ2VfcmVzdWx0KCk7PC9jb2RlPjwvcHJlPnckYTBhYWY0M2ItN2E2MC00NGVkLTkyNDItYWMxYzMwZDg5MGRmdzM8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk11bHRpbW9kYWwgb3V0cHV0PC9oMz53JDlhMTBhNjVkLWEzNTYtNDIzMS1iMDFiLTM4NzJiODgxZDY2MXffBTxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+dXNlIFdvcmRQcmVzc1xBaUNsaWVudFxNZXNzYWdlc1xFbnVtc1xNb2RhbGl0eUVudW07CgokcmVzdWx0ID0gd3BfYWlfY2xpZW50X3Byb21wdCggJ0NyZWF0ZSBhIHJlY2lwZSBmb3IgYSBjaG9jb2xhdGUgY2FrZSBhbmQgaW5jbHVkZSBwaG90b3MgZm9yIHRoZSBzdGVwcy4nICkKICAgIC0mZ3Q7YXNfb3V0cHV0X21vZGFsaXRpZXMoIE1vZGFsaXR5RW51bTo6dGV4dCgpLCBNb2RhbGl0eUVudW06OmltYWdlKCkgKQogICAgLSZndDtnZW5lcmF0ZV9yZXN1bHQoKTsKCmlmICggaXNfd3BfZXJyb3IoICRyZXN1bHQgKSApIHsKICAgIC8vIEhhbmRsZSBlcnJvci4KICAgIHJldHVybjsKfQoKZm9yZWFjaCAoICRyZXN1bHQtJmd0O3RvTWVzc2FnZSgpLSZndDtnZXRQYXJ0cygpIGFzICRwYXJ0ICkgewogICAgaWYgKCAkcGFydC0mZ3Q7aXNUZXh0KCkgKSB7CiAgICAgICAgZWNobyB3cF9rc2VzX3Bvc3QoICRwYXJ0LSZndDtnZXRUZXh0KCkgKTsKICAgIH0gZWxzZWlmICggJHBhcnQtJmd0O2lzRmlsZSgpICZhbXA7JmFtcDsgJHBhcnQtJmd0O2dldEZpbGUoKS0mZ3Q7aXNJbWFnZSgpICkgewogICAgICAgIGVjaG8gJyZsdDtpbWcgc3JjPSInIC4gZXNjX3VybCggJHBhcnQtJmd0O2dldEZpbGUoKS0mZ3Q7Z2V0RGF0YVVyaSgpICkgLiAnIiZndDsnOwogICAgfQp9PC9jb2RlPjwvcHJlPnckMzBlOGIwOGEtNGI5Yy00ZDg0LTg5NWYtN2U5ZTVmYjVjNGFkdzw8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkFkZGl0aW9uYWwgYnVpbGRlciBtZXRob2RzPC9oMz53JDc2YjM4Mjk5LTgwZWEtNGI5NS04OTZhLTJjN2UzYTQ2MmQ4ZXeHATxwPlRoZSBmdWxsIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBtZXRob2RzIGlzIGF2YWlsYWJsZSB2aWEgdGhlIDxjb2RlPldQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlcjwvY29kZT4gY2xhc3MuIEtleSBtZXRob2RzIGluY2x1ZGU6PC9wPnckNTk0MzJlNDQtN2Q4Ny00NWY3LTkxMjctZWJjZTlhYWI5MzFhd9MIPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2stdGFibGUiPjx0YWJsZSBjbGFzcz0iaGFzLWZpeGVkLWxheW91dCI+PHRoZWFkPjx0cj48dGg+PHN0cm9uZz5Db25maWd1cmF0aW9uPC9zdHJvbmc+PC90aD48dGg+PHN0cm9uZz5NZXRob2Q8L3N0cm9uZz48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD5Qcm9tcHQgdGV4dDwvdGQ+PHRkPjxjb2RlPndpdGhfdGV4dCgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPkZpbGUgaW5wdXQ8L3RkPjx0ZD48Y29kZT53aXRoX2ZpbGUoKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD5Db252ZXJzYXRpb24gaGlzdG9yeSAocmVsZXZhbnQgZm9yIG11bHRpLXR1cm4gLyBjaGF0cyk8L3RkPjx0ZD48Y29kZT53aXRoX2hpc3RvcnkoKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD5TeXN0ZW0gaW5zdHJ1Y3Rpb248L3RkPjx0ZD48Y29kZT51c2luZ19zeXN0ZW1faW5zdHJ1Y3Rpb24oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD5UZW1wZXJhdHVyZTwvdGQ+PHRkPjxjb2RlPnVzaW5nX3RlbXBlcmF0dXJlKCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+TWF4IHRva2VuczwvdGQ+PHRkPjxjb2RlPnVzaW5nX21heF90b2tlbnMoKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD5Ub3AtcCAvIFRvcC1rPC90ZD48dGQ+PGNvZGU+dXNpbmdfdG9wX3AoKSwgdXNpbmdfdG9wX2soKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD5TdG9wIHNlcXVlbmNlczwvdGQ+PHRkPjxjb2RlPnVzaW5nX3N0b3Bfc2VxdWVuY2VzKCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+TW9kZWwgcHJlZmVyZW5jZTwvdGQ+PHRkPjxjb2RlPnVzaW5nX21vZGVsX3ByZWZlcmVuY2UoKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD5PdXRwdXQgbW9kYWxpdGllczwvdGQ+PHRkPjxjb2RlPmFzX291dHB1dF9tb2RhbGl0aWVzKCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+T3V0cHV0IGZpbGUgdHlwZTwvdGQ+PHRkPjxjb2RlPmFzX291dHB1dF9maWxlX3R5cGUoKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD5KU09OIHJlc3BvbnNlPC90ZD48dGQ+PGNvZGU+YXNfanNvbl9yZXNwb25zZSgpPC9jb2RlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9maWd1cmU+dQF2AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGgFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRoBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn91DHYBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YBBWNlbGxzdQJ2Bgdjb250ZW50dgADdGFndwJ0ZAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3ckMjA4MzRjYTYtMzc4NS00NTg3LWEwYTEtYjM3MmEzOTExOTE2dzA8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkVycm9yIGhhbmRsaW5nPC9oMj53JDIxNmVlNWY1LTkzOTgtNDM4OC04MWI0LWZmMmVmNzNiNGYzYneFATxwPjxjb2RlPndwX2FpX2NsaWVudF9wcm9tcHQoKTwvY29kZT4gZ2VuZXJhdG9yIG1ldGhvZHMgcmV0dXJuIDxjb2RlPldQX0Vycm9yPC9jb2RlPiBvbiBmYWlsdXJlLCBmb2xsb3dpbmcgV29yZFByZXNzIGNvbnZlbnRpb25zOjwvcD53JGFjMjFkY2ZhLWZkNGQtNDZiOC04YzA1LTIyZDI3ZmM1OWY1N3fIATxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+JHRleHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAnSGVsbG8nICkKICAgIC0mZ3Q7Z2VuZXJhdGVfdGV4dCgpOwoKaWYgKCBpc193cF9lcnJvciggJHRleHQgKSApIHsKICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IuCn08L2NvZGU+PC9wcmU+dyQ5NjI5YjE2ZS03NzhhLTQwNzQtODk5ZS01N2JkNTc0ZWUzYWV3pgE8cD5XaGVuIHVzZWQgaW4gYSBSRVNUIEFQSSBjYWxsYmFjaywgYm90aCA8Y29kZT5HZW5lcmF0aXZlQWlSZXN1bHQ8L2NvZGU+IGFuZCA8Y29kZT5XUF9FcnJvcjwvY29kZT4gY2FuIGJlIHBhc3NlZCB0byA8Y29kZT5yZXN0X2Vuc3VyZV9yZXNwb25zZSgpPC9jb2RlPiBkaXJlY3RseTo8L3A+dyQ4NTM0MTZiYi0xMTg0LTQzZDktYjRkYi1lOThjOTVmN2JlYmR3oQI8cHJlIGNsYXNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZSBsYW5nPSJwaHAiIGNsYXNzPSJsYW5ndWFnZS1waHAiPmZ1bmN0aW9uIG15X3Jlc3RfY2FsbGJhY2soIFdQX1JFU1RfUmVxdWVzdCAkcmVxdWVzdCApIHsKICAgICRyZXN1bHQgPSB3cF9haV9jbGllbnRfcHJvbXB0KCAkcmVxdWVzdC0mZ3Q7Z2V0X3BhcmFtKCAncHJvbXB0JyApICkKICAgICAgICAtJmd0O2dlbmVyYXRlX3RleHRfcmVzdWx0KCk7CgogICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKCAkcmVzdWx0ICk7Cn08L2NvZGU+PC9wcmU+dyQ1NGE0Y2Y1OS00NzhiLTRmNjItYWI3MS0wMzcwNmJmMzhkZGR3cjxwPklmIGFuIGVycm9yIG9jY3VycywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGhhdmUgYSBzZW1hbnRpY2FsbHkgbWVhbmluZ2Z1bCBIVFRQIHJlc3BvbnNlIGNvZGUgYXR0YWNoZWQgdG8gaXQuPC9wPnckNDZlZmY0N2ItNDVjNC00ODlkLTg5ZmQtMmIwNWY4ZjVjN2Iydz08aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkNvbnRyb2xsaW5nIEFJIGF2YWlsYWJpbGl0eTwvaDI+dyQwZjVlZDc2MC0zZWM5LTRlMTAtODEyMS1mMWJhZjA1ODU0ZTB3gwE8cD5Gb3IgZ3JhbnVsYXIgY29udHJvbCwgdGhlIDxjb2RlPndwX2FpX2NsaWVudF9wcmV2ZW50X3Byb21wdDwvY29kZT4gZmlsdGVyIGFsbG93cyBwcmV2ZW50aW5nIHNwZWNpZmljIHByb21wdHMgZnJvbSBleGVjdXRpbmc6PC9wPnckYmQ4Nzk1ZWEtNjQ3My00YjhlLTk2MWItYWU4YjU4YzZjNzgxd5ADPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGUgbGFuZz0icGhwIiBjbGFzcz0ibGFuZ3VhZ2UtcGhwIj5hZGRfZmlsdGVyKAogICAgJ3dwX2FpX2NsaWVudF9wcmV2ZW50X3Byb21wdCcsCiAgICBmdW5jdGlvbiAoIGJvb2wgJHByZXZlbnQsIFdQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlciAkYnVpbGRlciApOiBib29sIHsKICAgICAgICAvLyBFeGFtcGxlOiBCbG9jayBhbGwgcHJvbXB0cyBmb3Igbm9uLWFkbWluIHVzZXJzLgogICAgICAgIGlmICggISBjdXJyZW50X3VzZXJfY2FuKCAnbWFuYWdlX29wdGlvbnMnICkgKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHByZXZlbnQ7CiAgICB9LAogICAgMTAsCiAgICAyCik7PC9jb2RlPjwvcHJlPnckYzRjYzgwZDEtMzVlNi00NTE2LTljZDUtYmVhYWYwYjAyZjhldyI8cD5XaGVuIGEgcHJvbXB0IGlzIHByZXZlbnRlZDo8L3A+dyQ4ZTI1ZjllNi0zNDYzLTRlMzQtYWY3Ny01MWMwNWFhMzA5ODF3Izx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCjwvdWw+dyRhNWNhNGZlYy03M2NiLTRkYWQtOWM1OS1jMjU3ZjA2ZTFmMzV3ITxsaT5ObyBBSSBjYWxsIGlzIGF0dGVtcHRlZC48L2xpPnckNDM3NzQ5YzctYmNlOS00ODg3LWJmYjUtYzMyMTgxYmM3N2Y5d3c8bGk+PGNvZGU+aXNfc3VwcG9ydGVkXyooKTwvY29kZT4gbWV0aG9kcyByZXR1cm4gPGNvZGU+ZmFsc2U8L2NvZGU+LCBhbGxvd2luZyBwbHVnaW5zIHRvIGdyYWNlZnVsbHkgaGlkZSB0aGVpciBVSS48L2xpPnckNGUxN2JhMTktYzA4Ni00MTRmLTg2YzMtYjJjNzRhODMxZTA3d0o8bGk+PGNvZGU+Z2VuZXJhdGVfKigpPC9jb2RlPiBtZXRob2RzIHJldHVybiBhIDxjb2RlPldQX0Vycm9yPC9jb2RlPi48L2xpPnckZDk0OGYxZGUtNGM3My00MzYzLTlhNGUtNDBkZjJkNGVlYmM0dy48aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkFyY2hpdGVjdHVyZTwvaDI+dyQ5YWMwNmQ5Mi1mZGRiLTQ5NTktYTQ3YS0zOWY0NjEwNmE3Nzh3PTxwPlRoZSBBSSBDbGllbnQgaW4gV29yZFByZXNzIDcuMCBjb25zaXN0cyBvZiB0d28gbGF5ZXJzOjwvcD53JDlhOGFlYzJkLWYzMjQtNDllNC1iMjlkLWIyNjJlMjMzMjczZncfPG9sIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48L29sPnckMDJhYjhlZWQtY2EyZC00NjExLTgzMTAtZjdiN2E0NWI5NDYzd78DPGxpPjxzdHJvbmc+UEhQIEFJIENsaWVudDwvc3Ryb25nPiAoPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy9waHAtYWktY2xpZW50Ij53b3JkcHJlc3MvcGhwLWFpLWNsaWVudDwvYT4pIOKAlCBBIHByb3ZpZGVyLWFnbm9zdGljIFBIUCBTREsgYnVuZGxlZCBpbiBDb3JlIGFzIGFuIGV4dGVybmFsIGxpYnJhcnkuIFRoaXMgaXMgdGhlIGVuZ2luZSB0aGF0IGhhbmRsZXMgcHJvdmlkZXIgY29tbXVuaWNhdGlvbiwgbW9kZWwgc2VsZWN0aW9uLCBhbmQgcmVzcG9uc2Ugbm9ybWFsaXphdGlvbi4gU2luY2UgaXQgaXMgdGVjaG5pY2FsbHkgYSBXb3JkUHJlc3MgYWdub3N0aWMgUEhQIFNESyB3aGljaCBvdGhlciBQSFAgcHJvamVjdHMgY2FuIHVzZSB0b28sIGl0IHVzZXMgY2FtZWxDYXNlIG1ldGhvZCBuYW1pbmcgYW5kIG1ha2VzIHVzZSBvZiBleGNlcHRpb25zLjwvbGk+dyRkZmIxZDM4My1iOTM2LTQ4NmEtOTU1ZC1hN2MzZGU0ZGUyMTh3KTxvbCBzdGFydD0iMiIgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwvb2w+dyRmODM3NjMxNS05NDk2LTRkYzMtOTdjMS0yZTNhM2I4YTliZTF31gI8bGk+PHN0cm9uZz5Xb3JkUHJlc3Mgd3JhcHBlcjwvc3Ryb25nPiDigJQgQ29yZSdzIDxjb2RlPldQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlcjwvY29kZT4gY2xhc3Mgd3JhcHMgdGhlIFBIUCBBSSBDbGllbnQgd2l0aCBXb3JkUHJlc3MgY29udmVudGlvbnM6IHNuYWtlX2Nhc2UgbWV0aG9kcywgPGNvZGU+V1BfRXJyb3I8L2NvZGU+IHJldHVybnMsIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFdvcmRQcmVzcyBIVFRQIHRyYW5zcG9ydCwgdGhlIEFiaWxpdGllcyBBUEksIHRoZSBDb25uZWN0b3JzL1NldHRpbmdzIGluZnJhc3RydWN0dXJlLCBhbmQgdGhlIFdvcmRQcmVzcyBob29rcyBzeXN0ZW0uPC9saT53JDk4OTUwMjhmLTg4ODctNGNjNi04ZjU1LTU1ZWVkNGM2NDFjNnf5ATxwPlRoZSA8Y29kZT53cF9haV9jbGllbnRfcHJvbXB0KCk8L2NvZGU+IGZ1bmN0aW9uIGlzIHRoZSByZWNvbW1lbmRlZCBlbnRyeSBwb2ludC4gSXQgcmV0dXJucyBhIDxjb2RlPldQX0FJX0NsaWVudF9Qcm9tcHRfQnVpbGRlcjwvY29kZT4gaW5zdGFuY2UgdGhhdCBjYXRjaGVzIGV4Y2VwdGlvbnMgZnJvbSB0aGUgdW5kZXJseWluZyBTREsgYW5kIGNvbnZlcnRzIHRoZW0gdG8gPGNvZGU+V1BfRXJyb3I8L2NvZGU+IG9iamVjdHMuPC9wPnckYzZmODEzZTEtYTlmNC00YTk0LWJiNjktN2FkMWFkODUzZDNldzc8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkNyZWRlbnRpYWwgbWFuYWdlbWVudDwvaDM+dyRhNDk4ZTUxNi1hZDk4LTQyMmUtOTE2Yy1jZDJmZTI0OGUyYmN30QM8cD5BUEkga2V5cyBhcmUgbWFuYWdlZCB0aHJvdWdoIHRoZSA8YSBocmVmPSJodHRwczovL21ha2Uud29yZHByZXNzLm9yZy9jb3JlLzIwMjYvMDMvMTgvaW50cm9kdWNpbmctdGhlLWNvbm5lY3RvcnMtYXBpLWluLXdvcmRwcmVzcy03LTAvIj5Db25uZWN0b3JzIEFQSTwvYT4uIEFJIHByb3ZpZGVyIHBsdWdpbnMgdGhhdCByZWdpc3RlciB3aXRoIHRoZSBQSFAgQUkgQ2xpZW50J3MgcHJvdmlkZXIgcmVnaXN0cnkgZ2V0IGF1dG9tYXRpYyBjb25uZWN0b3IgaW50ZWdyYXRpb24g4oCUIGluY2x1ZGluZyB0aGUgPHN0cm9uZz5TZXR0aW5ncyAmZ3Q7IENvbm5lY3RvcnM8L3N0cm9uZz4gYWRtaW4gVUkgZm9yIEFQSSBrZXkgbWFuYWdlbWVudC4gUGx1Z2luIGRldmVsb3BlcnMgdXNpbmcgdGhlIEFJIENsaWVudCB0byBidWlsZCBmZWF0dXJlcyBkbyBub3QgbmVlZCB0byBoYW5kbGUgY3JlZGVudGlhbHMgYXQgYWxsLjwvcD53JGU0M2JkMDczLTQ3NmYtNDU1My1iZDkwLTM3M2NlNThlN2JhNHc7PGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5PZmZpY2lhbCBwcm92aWRlciBwbHVnaW5zPC9oMz53JDI0ZjlhYzE2LWIyZWYtNDYwZC04NDJkLTc4NjM1N2MzZjZiYneNAzxwPldvcmRQcmVzcyBDb3JlIGRvZXMgbm90IGJ1bmRsZSBhbnkgQUkgcHJvdmlkZXJzIGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IGFyZSBkZXZlbG9wZWQgYW5kIG1haW50YWluZWQgYXMgcGx1Z2lucywgd2hpY2ggYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIGFuZCByYXBpZCBpdGVyYXRpb24gc3BlZWQsIGluIGFjY29yZGFuY2Ugd2l0aCBob3cgZmFzdCBBSSBldm9sdmVzLiBUaGUgQUkgQ2xpZW50IGluIFdvcmRQcmVzcyBDb3JlIHByb3ZpZGVzIHRoZSBzdGFibGUgZm91bmRhdGlvbiwgYW5kIGFzIGFuIGFic3RyYWN0aW9uIGxheWVyIGlzIHN1ZmZpY2llbnRseSBkZXRhY2hlZCBmcm9tIHByb3ZpZGVyIHNwZWNpZmljIHJlcXVpcmVtZW50cyB0aGF0IG1heSBjaGFuZ2Ugb3Zlcm5pZ2h0LjwvcD53JDk3MTZiYzFiLWMxZDUtNGE4YS04NDhlLWZlOGY5N2I5MWM1MHfVATxwPldoaWxlIGFueW9uZSBpcyBhYmxlIHRvIGltcGxlbWVudCBuZXcgcHJvdmlkZXIgcGx1Z2lucywgdGhlIFdvcmRQcmVzcyBwcm9qZWN0IGl0c2VsZiBoYXMgZGV2ZWxvcGVkIHRocmVlIGluaXRpYWwgZmxhZ3NoaXAgaW1wbGVtZW50YXRpb25zLCB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgbW9zdCBwb3B1bGFyIEFJIHByb3ZpZGVycy4gVGhlc2UgcGx1Z2lucyBhcmU6PC9wPnckOWFmNjY5NWYtY2Q5ZS00OTg4LTg2ZjAtNGVkYWUxNWY5ZGMxdyM8dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgo8L3VsPnckYWQ2NmUwNzUtMWY2MS00ZGU3LThkZDctOGRlMDBkMjc5OWU5d2k8bGk+PGEgaHJlZj0iaHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvYWktcHJvdmlkZXItZm9yLWFudGhyb3BpYy8iPkFJIFByb3ZpZGVyIGZvciBBbnRocm9waWM8L2E+PC9saT53JGM3YjE4Nzk4LWY4ZWUtNDUwZS1hZWJkLWQ5NGFjYmY4OTI5OHdjPGxpPjxhIGhyZWY9Imh0dHBzOi8vd29yZHByZXNzLm9yZy9wbHVnaW5zL2FpLXByb3ZpZGVyLWZvci1nb29nbGUvIj5BSSBQcm92aWRlciBmb3IgR29vZ2xlPC9hPjwvbGk+dyQxNjEzZTI5ZC1kOTA1LTRkYTEtODI1OS1kMjI3NmFlNTNmNDl3YzxsaT48YSBocmVmPSJodHRwczovL3dvcmRwcmVzcy5vcmcvcGx1Z2lucy9haS1wcm92aWRlci1mb3Itb3BlbmFpLyI+QUkgUHJvdmlkZXIgZm9yIE9wZW5BSTwvYT48L2xpPnckNjA3NjBmOTUtYmE1ZS00ZjNiLWJkNDUtNmNmODdkNDQ0YjVjd1I8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlNlcGFyYXRlbHkgYXZhaWxhYmxlOiBDbGllbnQtc2lkZSBKYXZhU2NyaXB0IEFQSTwvaDM+dyRhYThlZTM0Ni1lNmE2LTQ2YTctOWYxOC02M2M3YzMwYjQ2Zjh3yAU8cD5BIEphdmFTY3JpcHQgQVBJIHdpdGggYSBzaW1pbGFyIGZsdWVudCBwcm9tcHQgYnVpbGRlciBpcyBhdmFpbGFibGUgdmlhIHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL3dwLWFpLWNsaWVudCI+d3AtYWktY2xpZW50PC9hPiBwYWNrYWdlLiBJdCB1c2VzIFJFU1QgZW5kcG9pbnRzIHVuZGVyIHRoZSBob29kIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlci1zaWRlIGluZnJhc3RydWN0dXJlLiBUaGlzIEFQSSBpcyBub3QgcGFydCBvZiBDb3JlLCBhbmQgaXQgaXMgc3RpbGwgYmVpbmcgZXZhbHVhdGVkIHdoZXRoZXIgdGhpcyBhcHByb2FjaCBpcyBzY2FsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuIEJlY2F1c2UgdGhlIEFQSSBhbGxvd3MgYXJiaXRyYXJ5IHByb21wdCBleGVjdXRpb24gZnJvbSB0aGUgY2xpZW50LXNpZGUsIGl0IHJlcXVpcmVzIGEgaGlnaC1wcml2aWxlZ2UgY2FwYWJpbGl0eSBjaGVjaywgd2hpY2ggYnkgZGVmYXVsdCBpcyBvbmx5IGdyYW50ZWQgdG8gYWRtaW5pc3RyYXRvcnMuIFRoaXMgcmVzdHJpY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdW50cnVzdGVkIHVzZXJzIGZyb20gc2VuZGluZyBhbnkgcHJvbXB0IHRvIGFueSBjb25maWd1cmVkIEFJIHByb3ZpZGVyLiBBcyBzdWNoLCB1c2luZyB0aGlzIGFwcHJvYWNoIGluIGEgZGlzdHJpYnV0ZWQgcGx1Z2luIGlzIG5vdCByZWNvbW1lbmRlZC48L3A+dyQyNDExODAxNC1mM2JmLTQzMDEtYWM4NC1hNDhiMjI4YTIwM2V3oQM8cD5Gb3Igbm93LCB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggaXMgdG8gaW1wbGVtZW50IGluZGl2aWR1YWwgUkVTVCBBUEkgZW5kcG9pbnRzIGZvciBlYWNoIHNwZWNpZmljIEFJIGZlYXR1cmUgeW91ciBwbHVnaW4gcHJvdmlkZXMsIGFuZCBoYXZlIHlvdXIgSmF2YVNjcmlwdCBmdW5jdGlvbmFsaXR5IGNhbGwgdGhvc2UgZW5kcG9pbnRzLiBUaGlzIGFsbG93cyB5b3UgdG8gZW5mb3JjZSBncmFudWxhciBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgbGltaXQgdGhlIHNjb3BlIG9mIHdoYXQgY2FuIGJlIGV4ZWN1dGVkIGZyb20gdGhlIGNsaWVudC1zaWRlLiBJdCBhbHNvIGtlZXBzIHRoZSBhY3R1YWwgQUkgcHJvbXB0IGhhbmRsaW5nIGFuZCBjb25maWd1cmF0aW9uIGZ1bGx5IHNjb3BlZCB0byBiZSBzZXJ2ZXItc2lkZSBvbmx5LjwvcD53JDM0MjNiMWRlLWFkZDAtNDBmMC05ZDlhLTg3OWVjOGE5NGQwMXdPPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5NaWdyYXRpb24gZnJvbSBwaHAtYWktY2xpZW50IGFuZCB3cC1haS1jbGllbnQ8L2gyPnckNzhlMzY4ODgtNDhhYy00NzQ2LWJlOTUtZjY1MDgyNWJlZTM5d1s8cD5JZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIHRoZXNlIHBhY2thZ2VzIGluIHlvdXIgcGx1Z2luKHMpIGJlZm9yZSwgaGVyZSdzIHdoYXQgdG8ga25vdy48L3A+dyRjMjkwZjA2Ni1kYjQ1LTQxYzgtOGYwZi0wYzUxZWMzZmMxYjl3RDxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UmVjb21tZW5kZWQ6IHJlcXVpcmUgV29yZFByZXNzIDcuMDwvaDM+dyQ1M2IzZDVhNy0zOTQ2LTQ2MjktODhiZS03OGM2YzcwMTYzZjN3wQE8cD5UaGUgc2ltcGxlc3QgcGF0aCBpcyB0byB1cGRhdGUgeW91ciBwbHVnaW4ncyBSZXF1aXJlcyBhdCBsZWFzdCBoZWFkZXIgdG8gNy4wIGFuZCByZW1vdmUgdGhlIENvbXBvc2VyIGRlcGVuZGVuY2llcyBvbiA8Y29kZT53b3JkcHJlc3MvcGhwLWFpLWNsaWVudDwvY29kZT4gYW5kIGl0cyB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcy48L3A+dyQ3MGU5ODQ0ZS1jNjFlLTQyN2YtOWZlNC05MDM5NTNiMzhjZjd3YjxwPlJlcGxhY2UgYW55IDxjb2RlPkFJX0NsaWVudDo6cHJvbXB0KCk8L2NvZGU+IGNhbGxzIHdpdGggPGNvZGU+d3BfYWlfY2xpZW50X3Byb21wdCgpPC9jb2RlPi48L3A+dyRhZTFkZjRmOS01YjNkLTQxY2MtYTZkNy0zMjUxZGYyMDRhOTZ36wE8cD5Gb3IgdGhlIDxjb2RlPndvcmRwcmVzcy93cC1haS1jbGllbnQ8L2NvZGU+IHBhY2thZ2UsIGlmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBwYWNrYWdlJ3MgUkVTVCBBUEkgZW5kcG9pbnRzIG9yIEphdmFTY3JpcHQgQVBJLCB5b3UgY2FuIHNpbXBseSByZW1vdmUgaXQgYXMgYSBkZXBlbmRlbmN5LCBzaW5jZSBldmVyeXRoaW5nIGVsc2UgaXQgZG9lcyBpcyBub3cgcGFydCBvZiBXb3JkUHJlc3MgQ29yZS48L3A+dyQ1YzA4NTNlNS1iNTFlLTQ0MzktOWZkYy05NGFiYjJjYjBmZWR3SDxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+SWYgeW91IG11c3Qgc3VwcG9ydCBXb3JkUHJlc3MgJmx0OyA3LjA8L2gzPnckY2Q4MTcwYzMtMWEwNS00ZDE2LWJiNzUtODgxZjFkMjY1NGNhd1Y8aDQgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlBIUCBBSSBDbGllbnQgKDxjb2RlPndvcmRwcmVzcy9waHAtYWktY2xpZW50PC9jb2RlPik8L2g0PnckNTE2ZGEyOTAtNDk0NC00MWIwLWJmNWUtZDdmMDY1NDVlODJjd8cCPHA+SWYgeW91ciBwbHVnaW4gc3RpbGwgbmVlZHMgdG8gcnVuIG9uIFdvcmRQcmVzcyB2ZXJzaW9ucyBiZWZvcmUgNy4wIHdoaWxlIGFsc28gYnVuZGxpbmcgd29yZHByZXNzL3BocC1haS1jbGllbnQsIHlvdSB3aWxsIG5lZWQgYSBjb25kaXRpb25hbCBhdXRvbG9hZGVyIHdvcmthcm91bmQuIFRoZSBQSFAgQUkgQ2xpZW50IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFyZSBub3cgbG9hZGVkIGJ5IENvcmUgb24gNy4wKywgc28gbG9hZGluZyB0aGVtIGFnYWluIHZpYSBDb21wb3NlciB3aWxsIGNhdXNlIGNvbmZsaWN0cyAoZHVwbGljYXRlIGNsYXNzIGRlZmluaXRpb25zKS48L3A+dyQwYzgxMGVlNi01OTk3LTRiMzEtOTNhZi04ZjM5NWY2NTQ0ODh3gQE8cD5UaGUgc29sdXRpb246IG9ubHkgcmVnaXN0ZXIgeW91ciBDb21wb3NlciBhdXRvbG9hZGVyIGZvciB0aGVzZSBkZXBlbmRlbmNpZXMgd2hlbiBydW5uaW5nIG9uIFdvcmRQcmVzcyB2ZXJzaW9ucyBiZWZvcmUgNy4wOjwvcD53JDI3YzE0ZmQ4LWVmOGEtNGFjNi1iZjRjLWJmZjgwYjQxOTAwOHftATxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlIGxhbmc9InBocCIgY2xhc3M9Imxhbmd1YWdlLXBocCI+aWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyggJ3dwX2dldF93cF92ZXJzaW9uJyApIHx8IHZlcnNpb25fY29tcGFyZSggd3BfZ2V0X3dwX3ZlcnNpb24oKSwgJzcuMCcsICcmbHQ7JyApICkgewogICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnOwp9PC9jb2RlPjwvcHJlPnckMWY1ODVlMjEtYjEyYS00NWRjLWJlNzItZWQzOWZjZDEyNjEyd90DPHA+RHVlIHRvIGhvdyBDb21wb3NlcidzIGF1dG9sb2FkZXIgd29ya3Mg4oCUIGxvYWRpbmcgYWxsIGRlcGVuZGVuY2llcyBhdCBvbmNlIHJhdGhlciB0aGFuIHNlbGVjdGl2ZWx5IOKAlCBhIG1vcmUgZ3JhbnVsYXIgYXBwcm9hY2ggd2FzIG5vdCBmZWFzaWJsZS4gVGhpcyBtZWFucyB0aGUgY29uZGl0aW9uYWwgY2hlY2sgbmVlZHMgdG8gd3JhcCB0aGUgZW50aXJlIGF1dG9sb2FkZXIuIEFsdGVybmF0aXZlbHksIGJyZWFrIHlvdXIgUEhQIGRlcGVuZGVuY2llcyBhcGFydCBpbiB0d28gc2VwYXJhdGUgQ29tcG9zZXIgc2V0dXBzLCBvbmUgdGhhdCBjYW4gYWx3YXlzIGJlIGF1dG9sb2FkZWQsIGFuZCBhbm90aGVyIG9uZSBmb3IgdGhlIDxjb2RlPndvcmRwcmVzcy9waHAtYWktY2xpZW50PC9jb2RlPiBwYWNrYWdlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIG9ubHksIHdoaWNoIHdvdWxkIGJlIGNvbmRpdGlvbmFsbHkgYXV0b2xvYWRlZC48L3A+dyQyYzE4NDMyYS1lNTBjLTQyNjgtOWMxZC00ZWI5M2MwYjY0Yzd3VDxoNCBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+V1AgQUkgQ2xpZW50ICg8Y29kZT53b3JkcHJlc3Mvd3AtYWktY2xpZW50PC9jb2RlPik8L2g0PnckZDVhYzVlZGYtNTVkNy00NmRiLWIwYzItYjVlMjM4NDIzNDVjd5gCPHA+VGhlIDxjb2RlPndvcmRwcmVzcy93cC1haS1jbGllbnQ8L2NvZGU+IHBhY2thZ2UgaGFuZGxlcyB0aGUgV29yZFByZXNzIDcuMCB0cmFuc2l0aW9uIGF1dG9tYXRpY2FsbHkuIE9uIDcuMCssIGl0IGRpc2FibGVzIGl0cyBvd24gUEhQIFNESyBpbmZyYXN0cnVjdHVyZSAoc2luY2UgQ29yZSBoYW5kbGVzIGl0IG5hdGl2ZWx5KSBidXQga2VlcHMgdGhlIFJFU1QgQVBJIGVuZHBvaW50cyBhbmQgSmF2YVNjcmlwdCBBUEkgYWN0aXZlLCBhcyB0aG9zZSBhcmVuJ3QgaW4gQ29yZSB5ZXQuPC9wPnckZjAzMmE1ZjUtMDc0Mi00YWM5LWIwNzItYWE3Yzc0YmVhN2Yzd\/ECPHA+WW91IGNhbiBjb250aW51ZSBsb2FkaW5nIHRoaXMgcGFja2FnZSB1bmNvbmRpdGlvbmFsbHkuIEl0IGRldGVjdHMgdGhlIFdvcmRQcmVzcyB2ZXJzaW9uIGFuZCBvbmx5IGFjdGl2YXRlcyB0aGUgcGFydHMgdGhhdCBhcmVuJ3QgYWxyZWFkeSBwcm92aWRlZCBieSBDb3JlLiBObyBjb25kaXRpb25hbCBsb2FkaW5nIG5lZWRlZC4gSG93ZXZlciwgbWFrZSBzdXJlIHRvIHN0YXkgdXAgdG8gZGF0ZSBvbiB0aGlzIHBhY2thZ2UsIGJlY2F1c2UgaXQgd2lsbCBsaWtlbHkgYmUgZGlzY29udGludWVkIHNvb24sIGluIGZhdm9yIG9mIG1vdmluZyB0aGUgUkVTVCBBUEkgZW5kcG9pbnRzIGFuZCBKYXZhU2NyaXB0IEFQSSBpbnRvIEd1dGVuYmVyZy48L3A+dyRmZTNmNTkzMy1mODA2LTQ1MTktOTM1Mi1iZjA2ZDQ1OGJmYTB3mQE8cD5TZWUgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3Mvd3AtYWktY2xpZW50L2Jsb2IvdHJ1bmsvVVBHUkFERS5tZCI+V1AgQUkgQ2xpZW50IHVwZ3JhZGUgZ3VpZGU8L2E+IGZvciBhZGRpdGlvbmFsIG1pZ3JhdGlvbiBkZXRhaWxzLjwvcD53JGQxMTU0MDA1LTQwMWItNDljOS05ZWY3LTU0MjA0ODJlZmZlZHc2PGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5BZGRpdGlvbmFsIHJlc291cmNlczwvaDI+dyRmYmJiODFiOC03NmYwLTRmZWUtYWIwYi02NDNiOGU1ZGQyMGR3JTx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCgoKPC91bD53JGI5OGQ3YjY0LThkMTgtNDcwOC05MDllLTJiZDdjNDYzN2U1YXdXPGxpPlRyYWMgdGlja2V0OiA8YSBocmVmPSJodHRwczovL2NvcmUudHJhYy53b3JkcHJlc3Mub3JnL3RpY2tldC82NDU5MSI+IzY0NTkxPC9hPjwvbGk+dyQwZTg2ODhhNS1hY2Y5LTQ2MTItYWU2Yy05M2E1Zjc1OGMxZWN3YTxsaT48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL3BocC1haS1jbGllbnQiPlBIUCBBSSBDbGllbnQ8L2E+IChidW5kbGVkIGxpYnJhcnkpPC9saT53JGMwM2JiMmNhLTQ5MjMtNGFhYy05MTlkLTlmNWRkNzI5YzZhNXd9PGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3Mvd3AtYWktY2xpZW50Ij5XUCBBSSBDbGllbnQ8L2E+IChvcmlnaW5hbCBwYWNrYWdlLCBub3cgbW9zdGx5IG1lcmdlZCBpbnRvIENvcmUpPC9saT53JDY5NGVmM2RmLTdhN2QtNDBhOS1hZjYwLTg4YjhmOGE5ZGUzM3ePATxsaT48YSBocmVmPSJodHRwczovL21ha2Uud29yZHByZXNzLm9yZy9jb3JlLzIwMjYvMDIvMDMvcHJvcG9zYWwtZm9yLW1lcmdpbmctd3AtYWktY2xpZW50LWludG8td29yZHByZXNzLTctMC8iPk9yaWdpbmFsIG1lcmdlIHByb3Bvc2FsPC9hPjwvbGk+dQF9lxLJBAB3JDFiMTljYjI3LTFmMTQtNGVmNS04NDkwLTQxNzRiYjBiMjMxYnh3xgE8cD5UaGlzIHJldHVybnMgYSA8Y29kZT5HZW5lcmF0aXZlQWlSZXN1bHQ8L2NvZGU+IG9iamVjdCB0aGF0IHByb3ZpZGVzIHNldmVyYWwgcGllY2VzIG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGluY2x1ZGluZyB0b2tlbiB1c2FnZSBhbmQgd2hpY2ggcHJvdmlkZXIgYW5kIHdoaWNoIG1vZGVsIHJlc3BvbmRlZCB0byB0aGUgcHJvbXB0LjwvcD53DmNvcmUvcGFyYWdyYXBoeXckZTM2MzZjYTgtN2M0NC00NzBiLTljMWItMWQ1MGRmOWE1ZTgxdwljb3JlL2xpc3R5dwB3JDY5ZGRhYmU5LTU5MzAtNGI0OC05MTYxLTU4MTljMDcyMjE5MHh3DmNvcmUvbGlzdC1pdGVtdyRhZjY4YjA4NC1hMzhhLTQyN2YtODg3Zi1mOGQ3MGViZjA3NjR4dw5jb3JlL2xpc3QtaXRlbXckMDcxNjBhMWQtNWFmYy00OTUxLThmY2EtN2EyODgzZTBlY2M4eHcOY29yZS9saXN0LWl0ZW13JDZmNjUyMGNhLTc4M2UtNDJlMS1iZjFjLTNjYTY1ZTQ0OTIzZnh3jgI8cD5UaGlzIGlzIGEgcHJlZmVyZW5jZSwgbm90IGEgcmVxdWlyZW1lbnQuIFlvdXIgcGx1Z2luIHNob3VsZCBmdW5jdGlvbiB3aXRob3V0IGl0LiBLZWVwIGluIG1pbmQgdGhhdCB5b3UgY2FuIHRlc3Qgb3IgdmVyaWZ5IHdoaWNoIG1vZGVsIHdhcyB1c2VkIGJ5IGxvb2tpbmcgYXQgdGhlIGZ1bGwgcmVzdWx0IG9iamVjdCwgdW5kZXIgdGhlIDxjb2RlPnByb3ZpZGVyTWV0YWRhdGE8L2NvZGU+IGFuZCA8Y29kZT5tb2RlbE1ldGFkYXRhPC9jb2RlPiBwcm9wZXJ0aWVzLjwvcD53DmNvcmUvcGFyYWdyYXBoeXcTMjAyNi0wMy0yNFQyMToxMDo0NHUBdgEFY2VsbHN1AnYGB2NvbnRlbnR2AAN0YWd3AnRoBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92Bgdjb250ZW50dgADdGFndwJ0aAVzY29wZX8FYWxpZ25\/B2NvbHNwYW5\/B3Jvd3NwYW5\/dQx2AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn92AQVjZWxsc3UCdgYHY29udGVudHYAA3RhZ3cCdGQFc2NvcGV\/BWFsaWdufwdjb2xzcGFufwdyb3dzcGFuf3YGB2NvbnRlbnR2AAN0YWd3AnRkBXNjb3BlfwVhbGlnbn8HY29sc3Bhbn8Hcm93c3Bhbn9\/f39\/f39\/f393EzIwMjYtMDMtMjRUMjE6MTI6MzB3EzIwMjYtMDMtMjRUMjE6MTI6MzJ\/f39\/f39\/f393JGQ3ZGNkNGY3LTFiYTgtNDdmMC04NzljLTcwNWE3ZmEwYWJlMXh3jwE8bGk+PGEgaHJlZj0iaHR0cHM6Ly9tYWtlLndvcmRwcmVzcy5vcmcvY29yZS8yMDI2LzAyLzAzL3Byb3Bvc2FsLWZvci1tZXJnaW5nLXdwLWFpLWNsaWVudC1pbnRvLXdvcmRwcmVzcy03LTAvIj5PcmlnaW5hbCBtZXJnZSBwcm9wb3NhbDwvYT48L2xpPncOY29yZS9saXN0LWl0ZW1\/f39\/f39\/f393JDhjNDBiOWU3LTRlYjgtNGVmYy05NzY1LTg3YTZkODFiZDNjOXckNGVkMzg1OTQtMjUzNS00OTQyLWI2YTEtYjE2MDg4YWZiMjc5eHcOY29yZS9wYXJhZ3JhcGh5f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/dgEKdHlwb2dyYXBoeXYBCXRleHRBbGlnbncFcmlnaHR3EzIwMjYtMDMtMjRUMjE6MTQ6NTJ3EzIwMjYtMDMtMjRUMjE6MTY6MTZ3AW93Am9mdwNvZmZ3BG9mZml3BW9mZmljdwZvZmZpY2l3B29mZmljaWF3CG9mZmljaWFsdwlvZmZpY2lhbC13Cm9mZmljaWFsLXB3C29mZmljaWFsLXBydwxvZmZpY2lhbC1wcm93DW9mZmljaWFsLXByb3Z3Dm9mZmljaWFsLXByb3Zpdw9vZmZpY2lhbC1wcm92aWR3EG9mZmljaWFsLXByb3ZpZGV3EW9mZmljaWFsLXByb3ZpZGVydxJvZmZpY2lhbC1wcm92aWRlci13E29mZmljaWFsLXByb3ZpZGVyLXB3FG9mZmljaWFsLXByb3ZpZGVyLXBsdxVvZmZpY2lhbC1wcm92aWRlci1wbHV3Fm9mZmljaWFsLXByb3ZpZGVyLXBsdWd3F29mZmljaWFsLXByb3ZpZGVyLXBsdWdpdxhvZmZpY2lhbC1wcm92aWRlci1wbHVnaW53GW9mZmljaWFsLXByb3ZpZGVyLXBsdWdpbnN3AWF3AmFpdwNhaS13BGFpLWZ3BWFpLWZldwZhaS1mZWF3B2FpLWZlYXR3CGFpLWZlYXR1dwlhaS1mZWF0dXJ3CmFpLWZlYXR1cmV3C2FpLWZlYXR1cmUtdwxhaS1mZWF0dXJlLWR3DWFpLWZlYXR1cmUtZGV3DmFpLWZlYXR1cmUtZGV0dw9haS1mZWF0dXJlLWRldGN3DmFpLWZlYXR1cmUtZGV0dw9haS1mZWF0dXJlLWRldGV3EGFpLWZlYXR1cmUtZGV0ZWN3EWFpLWZlYXR1cmUtZGV0ZWN0dxJhaS1mZWF0dXJlLWRldGVjdGl3E2FpLWZlYXR1cmUtZGV0ZWN0aW93FGFpLWZlYXR1cmUtZGV0ZWN0aW9udwFhdwJhaXcDYWktdwRhaS1tdwVhaS1tb3cGYWktbW9kdwdhaS1tb2RldwhhaS1tb2RlbHcJYWktbW9kZWwtdwphaS1tb2RlbC1wdwthaS1tb2RlbC1wcncMYWktbW9kZWwtcHJldw1haS1tb2RlbC1wcmVmdw5haS1tb2RlbC1wcmVmZXcPYWktbW9kZWwtcHJlZmVydxBhaS1tb2RlbC1wcmVmZXJldxFhaS1tb2RlbC1wcmVmZXJlbncSYWktbW9kZWwtcHJlZmVyZW5jdxNhaS1tb2RlbC1wcmVmZXJlbmNldxRhaS1tb2RlbC1wcmVmZXJlbmNlc3cBYXcCYWl3A2FpLXcEYWktbXcFYWktbWl3BmFpLW1pZ3cHYWktbWlncncIYWktbWlncmF3CWFpLW1pZ3JhdHcKYWktbWlncmF0aXcLYWktbWlncmF0aW93DGFpLW1pZ3JhdGlvbncNYWktbWlncmF0aW9uLXcOYWktbWlncmF0aW9uLXd3D2FpLW1pZ3JhdGlvbi13cHcQYWktbWlncmF0aW9uLXdwN3cRYWktbWlncmF0aW9uLXdwNzB3EzIwMjYtMDMtMjRUMjE6MTc6NDJ7QnnSG16t8AB9tI\/JggF3B3B1Ymxpc2gD0ZmJ4Qz5CwEBGQEsAAbpjgHeAgB3AC0AJQABACMAAgAslgED4gIBAAsEVQkMADUAFRIBAAEAAj8BqwoBAAQYAd8BAQABAAIXAfADAQAEIgHJAwEAFwkCDEWDAQEAEwwfBAIBAQABAAEAAQACAgEAAgIBAQEBAQUCAwICBAADAQEAAQUBAAIBAQECAAIBAQABAgUBAQIFBwOdAQEALQAHABwAHQAlAB4AHQCFAQAYALkBAJ4CjwQBAPQBABgAxQEAAvkBAQCYAQAsACcABwAoACkAMgAqACkA4gEAHQAaAAEAAjEBqwEBAAQQAQEBBAECAQkFAAEAAjAB2gMBAAEAAwYBAAEBAQMCAAEAAjMBiwcBAAEABAAHAAHJAQEAIQB6AAUBAwAVACAAOQABAAImAZYBAQB\/AAEAAjcBhgIBAHIAIgB11gUBACIABwBaACwhAQATAD0ABwC6ASAmYAIACAD7ASwKANIBABwAqQIDkQEAIQDXAwvxAQChAwA0AFsAKQC0AQBIAN4BAC0ALgDHAgCAAaIBAQDCAwAsAIsCAPECAJkBABsABwBUAF4AYAgUAJ4BBwMAAQABAQGNAvIHABcAAQsCAAEAAwEBAAEDAQABAQEGAQAEAAEEgwIABQAYAAUAEGhBBJ4CAQECAgsFAQEBAQYBAQECAgACBAQEAgELAQECEAACAgEBAwBCAwEDAQwBCAELAh8BAg8DAQMBAAICAQEBAgECAQQBBAEBAQMCAAEEAQIBAAEAAQYCBAEBAQsBAAECAQEBAAECAQABAQIBCwIBAh8ABwAFASUIBwMBBAICAQMBAAIABgUCAwkDAQMBDAEIAQsBHgkDBwMBAwEMAQgBCwE2BwUBBQEFAgMKAwEDAQwBCAELATYOAwcDAQMBDAEIAQsBTg8DEAMMAwEDAQwBCAELAU4KBQEFAgMQAwwDAQMBDAEIAQsBNgIDAQMBDAEIAQsBNgwDJAMBAwEMAQgBCwEeAgMBMAIDARUBGV4DAQMBDAEIAQsCLgFDARoZAwEDAQwBCAELAh8BAg8DARUBGR0DAQMCAwIBAQYBBAEEAQECAQEJAQIBEQIACAIBBQEEAQYFAAEAAQMBAAECAQgCAAUVAQgDCB8BAgABAAEAAwECAAIAAQEDAAEAAQACASUCAQYBBgYBEQIBAgINAQEBAwEKAQUBAQILAQACAAIAAwVLAwEDAQwBCAELAh8BAhUAAQABAwEAAQIBCAIACC4BEwEKAQ1qAQECAgsFAQEBAQYBBgEAAQABAgYEAgIBAQEAAwELAQECEAACAgEBAwApAwEVARlQAwEDAQwBCAELAh8BAhADARUBGSMDAQMBDAEIAQsBBwEYAQABAAEEAQ4EEAEDAQwBCAEEAQEBBgECAQMBFQEZLAABAhkDEAiXAQEBAgILBQoBAQIDAQMBAhIAAQACAAEBAQABAAEAAgELAQECEAACAgEBAwBNAwEDAQwBCAELAh8BAhQDARUBGR8DAQMBDAEIAQsBBwEYAQABAAEEAQoEEAEDAQwBCAEEAQEBBgECAQMBFQEZJAMBAwEMAQgBCwEeLAABAhIDBAABAAEDAQABAgEIAgAFFQEIAwieAQA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\",\"updateId\":452378592}","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1175],"tags":[5779,5676,1443,5834],"class_list":["post-122309","post","type-post","status-publish","format-standard","hentry","category-general","tag-core-ai","tag-7-0","tag-dev-notes","tag-dev-notes-7-0","mentions-badhonrocks","mentions-gziolo","mentions-justlevine","mentions-laurisaarni","mentions-nilambar","author-flixos90"],"revision_note":"","jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2AvED-vOJ","_links":{"self":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/122309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/users\/10972453"}],"replies":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/comments?post=122309"}],"version-history":[{"count":8,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/122309\/revisions"}],"predecessor-version":[{"id":122351,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/122309\/revisions\/122351"}],"wp:attachment":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/media?parent=122309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/categories?post=122309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/tags?post=122309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}