From 9b03e507feb5b38a42b7cbdecef4fe29cef57cdb Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Wed, 13 Nov 2024 19:28:09 +0530 Subject: [PATCH 01/28] Refactor CreateSiteHelper to include poplulate record call --- .../commands/create-site/CreateSiteHelper.ts | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index ddf2092a..f8367fb8 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -12,11 +12,13 @@ import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLogger import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST } from '../../PowerPagesChatParticipantTelemetryConstants'; export const createSite = async (intelligenceEndpoint: string, intelligenceApiToken: string, userPrompt: string, sessionId: string, stream: vscode.ChatResponseStream, telemetry: ITelemetry, orgId: string, envID: string, userId: string) => { - const { siteName, siteDescription } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); + const { siteName, sitePagesList, sitePages, siteDescription } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); + const siteManager = await populateRecords(siteName, sitePagesList, sitePages, telemetry); + const websiteId = await provisionSite(siteManager); return { siteName, - //websiteId, + websiteId, siteDescription, }; }; @@ -46,3 +48,44 @@ async function fetchSiteAndPageData(intelligenceEndpoint: string, intelligenceAp return { siteName, sitePagesList, sitePages, siteDescription }; } + +async function populateRecords(siteName: string, sitePagesList: string[], sitePages: any, telemetry: ITelemetry) { + // Create a map of sitePagesList and sitePages + const sitePagesMap = sitePagesList.reduce((acc: any, pageName: string, index: number) => { + acc[pageName] = sitePages[index]; + return acc; + }, {}); + + // Initialize PowerPagesSiteManager + const siteManager = new PowerPagesSiteManager('BlankTemplate', 'English', telemetry); + + // Load the template + await siteManager.loadTemplate(); + const { actions } = siteManager.getSiteDataAndActions(); + actions.updateSiteName(siteName); + + const promises = Object.entries(sitePagesMap).map(([pageName, pageContent]) => { + if (typeof pageContent === 'object' && pageContent !== null && 'code' in pageContent) { + return actions.addOrUpdatePage(pageName, (pageContent as { code: string }).code, pageName === 'Home'); + } else { + throw new Error(`Invalid page content for page: ${pageName}`); + } + }); + + await Promise.all(promises); + + // Save the site + await actions.save(); + + return siteManager; +} + +async function provisionSite(siteManager: any) { + // Provision the site + const websiteId = siteManager.getSiteDataAndActions().ppSiteData.powerpagesite[0].powerpagesiteid ?? ''; + // const portal = await createPortal(siteName, siteUrl, websiteId); + + // GetPortalByIdCall + + return websiteId; +} From 9ed7bac38489313c7c1b7181ff9867672cb022b5 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 15 Nov 2024 15:40:20 +0530 Subject: [PATCH 02/28] Add PowerPages site and component models, constants, and entity names --- .../create-site/CreateSiteConstants.ts | 35 + .../commands/create-site/CreateSiteModel.ts | 82 ++ .../commands/create-site/CreateSiteUtils.ts | 156 ++++ .../commands/create-site/SiteComponents.ts | 50 ++ .../commands/create-site/SiteEntityNames.ts | 51 ++ .../create-site/site-templates/Nl2Site.ts | 792 ++++++++++++++++++ 6 files changed, 1166 insertions(+) create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts new file mode 100644 index 00000000..b9bf75e7 --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -0,0 +1,35 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export enum PresetThemeIds { + ORANGE = '329a43fa-5471-4678-8330-d3a0b404e9bb', + TURQUOISE = '215708aa-2dcb-4ec1-829b-7121994ebcc3', + BRIGHT_BLUE = '0f6ab1e0-f1d6-45a7-92d5-e07bd7bb9b6b', + TEAL = '3e4815d4-03da-4fb4-9714-a4fe61caaba6', + MOSS = '9fbe5118-b883-48b5-81d6-09a78fedb035', + NEUTRAL = '146d2355-1494-404c-8ddf-a3d1a23ad57d', + BLUE = 'df88c9ca-e24f-4eca-af9a-880e7b8559a0', + RED_ORANGE = '0e87b0cb-83a0-4d04-8843-aa97796c4d87', + RED = '763110f9-ad1d-4683-aa48-13d888fc5428', + PURPLE = 'e4b7a39b-a92e-4755-9507-c5383356fb2c', + GREEN = '2b52b31c-c600-4eb3-99c9-8ec01c2ac85e', + GREY = 'f21551a1-7244-432f-ad88-220609e070d3', + DARK_BLUE = '656c3ab7-eba6-4496-8de6-2e8c22310f98', + DARK_YELLOW = '4fce2c5f-d5fc-4e47-8f0b-77be5bd05cce', +} + +export const BASE_PAGE = { + enablerating: false, + enabletracking: false, + excludefromsearch: false, + hiddenfromsitemap: false, + sharedpageconfiguration: false, +}; + +export const CDS_BASE_URL = 'https://org06ff0f46.crm10.dynamics.com'; // This is a placeholder URL +export const CDS_URL_PREFIX = '/api/data'; +export const CDS_API_BASE_URL = `${CDS_BASE_URL}${CDS_URL_PREFIX}`; +export const CDS_API_VERSION = 'v9.2'; +export const CDS_API_VERSION_9_2 = `${CDS_API_BASE_URL}/${CDS_API_VERSION}`; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts new file mode 100644 index 00000000..f45e118b --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts @@ -0,0 +1,82 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export interface PowerPagesParsedJson { + powerpagesite: PowerPagesSite[]; + powerpagecomponent: PowerPagesComponent[]; + powerpagesitelanguage: PowerPagesSiteLanguage[]; + } + + export interface IFileUpload { + fileName: string; + entityId: string; + fileContent: string; + entityName: string; + columnName: string; + } +export interface IURLParams { + entityName?: string; + entityId?: string; + query?: string; + apiVersion?: string; + additionalPathTokens?: string[]; + } + + export interface PowerPagesSiteEntity { + powerpagesiteid?: string | null; + content: string; + name: string; + } + + export interface PowerPagesSite extends PowerPagesSiteEntity { + datamodelversion: string; + } + + export interface PowerPagesSiteLanguage extends PowerPagesSiteEntity { + powerpagesitelanguageid: string; + displayname: string; + languagecode: string; + lcid: string; + } + + export enum PowerPagesComponentType { + PublishingState = '1', + WebPage = '2', + WebFile = '3', + WebLinkSet = '4', + WebLink = '5', + PageTemplate = '6', + ContentSnippet = '7', + WebTemplate = '8', + SiteSettings = '9', + WebPageAccessControlRule = '10', + WebRole = '11', + WebsiteAccess = '12', + SiteMarker = '13', + BasicForm = '15', + BasicFormMetadata = '16', + List = '17', + TablePermission = '18', + AdvancedForm = '19', + AdvancedFormStep = '20', + AdvancedFormMetadata = '21', + PollPlacement = '24', + AdPlacement = '26', + BotConsumer = '27', + ColumnPermissionProfile = '28', + ColumnPermission = '29', + Redirect = '30', + PublishingStateTransitionRule = '31', + Shortcut = '32', + PowerAutomate = '33', + } + + export interface PowerPagesComponent extends PowerPagesSiteEntity { + powerpagecomponentid: string; + powerpagecomponenttype: PowerPagesComponentType; + powerpagesitelanguageid?: string | null; + filecontent?: string; + filename?: string; + } diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts new file mode 100644 index 00000000..6ba585b2 --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts @@ -0,0 +1,156 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + + + +import { v4 as uuidv4 } from 'uuid'; +import { PresetThemeIds, CDS_API_BASE_URL, CDS_API_VERSION } from './CreateSiteConstants'; +import { PowerPagesParsedJson, IURLParams } from './CreateSiteModel'; + + +/* eslint-disable @typescript-eslint/no-non-null-assertion */ + +export const reGuidPowerPagesSite = (site: PowerPagesParsedJson): PowerPagesParsedJson => { + if ( + site.powerpagesite.length === 0 || + site.powerpagesitelanguage.length === 0 || + site.powerpagesite[0].powerpagesiteid === null || + site.powerpagesite[0].powerpagesiteid === undefined + ) { + return { + powerpagecomponent: [], + powerpagesite: [], + powerpagesitelanguage: [], + }; + } + const guidMap = new Map(); + guidMap.set(site.powerpagesite[0].powerpagesiteid, uuidv4()); + + // Ensure site theme ids dont get overwritten by mapping them to themselves + for (const key of Object.keys(PresetThemeIds) as Array) { + guidMap.set(PresetThemeIds[key], PresetThemeIds[key]); + } + + const reguidContent = (content: string): string => { + if (content) { + let newContent = content; + const regex = /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi; + let match = regex.exec(newContent); + while (match !== null && match.length > 0) { + const current = match[0] as string; + if (!guidMap.has(current)) { + guidMap.set(current, uuidv4()); + } + newContent = newContent.replace(current, guidMap.get(current)!); + match = regex.exec(content); + } + return newContent; + } + return content; + }; + + const powerPagesSites = [ + { + ...site.powerpagesite[0], + powerpagesiteid: guidMap.get(site.powerpagesite[0].powerpagesiteid)!, + content: reguidContent(site.powerpagesite[0].content), + }, + ]; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const powerPagesSiteLanguages = site.powerpagesitelanguage.map((language: any) => { + if (!guidMap.has(language.powerpagesitelanguageid)) { + guidMap.set(language.powerpagesitelanguageid, uuidv4()); + } + return { + ...language, + powerpagesitelanguageid: guidMap.get(language.powerpagesitelanguageid)!, + powerpagesiteid: guidMap.get(language.powerpagesiteid!)!, + content: reguidContent(language.content), + }; + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const powerPagesComponents = site.powerpagecomponent.map((component: any) => { + if (!guidMap.has(component.powerpagecomponentid)) { + guidMap.set(component.powerpagecomponentid, uuidv4()); + } + return { + ...component, + powerpagecomponentid: guidMap.get(component.powerpagecomponentid)!, + content: reguidContent(component.content), + powerpagesitelanguageid: component.powerpagesitelanguageid + ? guidMap.get(component.powerpagesitelanguageid)! + : null, + powerpagesiteid: guidMap.get(component.powerpagesiteid!)!, + }; + }); + + return { + powerpagecomponent: powerPagesComponents, + powerpagesite: powerPagesSites, + powerpagesitelanguage: powerPagesSiteLanguages, + }; +}; + +/** +* Get the request URL +* @param URLParams IURLParams +*/ +export const getCDSEntityRequestURL = (URLParams: IURLParams): string => { + const { entityId, entityName, query, apiVersion, additionalPathTokens } = URLParams; + let url = `${CDS_API_BASE_URL}/${apiVersion ? apiVersion : CDS_API_VERSION}`; + if (entityName) { + url = `${url}/${entityName}`; + if (entityId) { + url = `${url}(${entityId})`; + } + } + if (additionalPathTokens && additionalPathTokens.length > 0) { + url = `${url}/${additionalPathTokens.join('/')}`; + } + if (query) { + url = `${url}?${query}`; + } + return url; +}; + +/** +* Get the path for the CDS Entity URL +* @param URLParams +* @returns path of the URL +*/ +export const getCDSEntityRequestURLPath = (URLParams: IURLParams): string => { + const url = getCDSEntityRequestURL(URLParams); + const urlObj = new URL(url); + return urlObj.pathname; +}; + + +export const generateRandomColorNumber = () => { + const colorNumbers = [1, 2, 3, 5, 6, 7, 8]; + return colorNumbers[Math.floor(Math.random() * colorNumbers.length)]; +}; + +/** + * Converts base-64 encoded string to an array buffer + * @param base64String the string containing data to convert + * @returns ArrayBuffer + */ +export function base64ToArrayBuffer(base64String: string): ArrayBuffer { + const binaryString = atob(base64String); + const bytes = new Uint8Array(binaryString.length).map((_, i) => binaryString.charCodeAt(i)); + return bytes.buffer; +} + +export const getFileUploadHeaders = (fileName: string, dataverseToken: string) => { + return { + 'OData-MaxVersion': '4.0', + 'OData-Version': '4.0', + 'Content-Type': 'application/octet-stream', + 'x-ms-file-name': `${fileName}`, + Authorization: `Bearer ${dataverseToken}` + }; +}; diff --git a/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts b/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts new file mode 100644 index 00000000..279fab5e --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts @@ -0,0 +1,50 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export interface PowerPagesSiteEntity { + powerpagesiteid?: string | null; + content: string; + name: string; +} + +export enum PowerPagesComponentType { + PublishingState = '1', + WebPage = '2', + WebFile = '3', + WebLinkSet = '4', + WebLink = '5', + PageTemplate = '6', + ContentSnippet = '7', + WebTemplate = '8', + SiteSettings = '9', + WebPageAccessControlRule = '10', + WebRole = '11', + WebsiteAccess = '12', + SiteMarker = '13', + BasicForm = '15', + BasicFormMetadata = '16', + List = '17', + TablePermission = '18', + AdvancedForm = '19', + AdvancedFormStep = '20', + AdvancedFormMetadata = '21', + PollPlacement = '24', + AdPlacement = '26', + BotConsumer = '27', + ColumnPermissionProfile = '28', + ColumnPermission = '29', + Redirect = '30', + PublishingStateTransitionRule = '31', + Shortcut = '32', + PowerAutomate = '33', +} + +export interface PowerPagesComponent extends PowerPagesSiteEntity { + powerpagecomponentid: string; + powerpagecomponenttype: PowerPagesComponentType; + powerpagesitelanguageid?: string | null; + filecontent?: string; + filename?: string; +} diff --git a/src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts b/src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts new file mode 100644 index 00000000..2a474af1 --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts @@ -0,0 +1,51 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export const WhoAmI = 'WhoAmI'; +export const AttributeMetadata = 'Attributes'; +export const Solutions = 'solutions'; +export const EntityDefinitions = 'EntityDefinitions'; +export const EnvironmentVariableDefinitions = 'environmentvariabledefinitions'; +export const EnvironmentVariableValues = 'environmentvariablevalues'; +export const SavedQueries = 'savedqueries'; +export const SiteMap = 'SiteMap'; +export const SystemForms = 'systemforms'; +export const SiteSettingDefinitions = 'adx_sitesettings'; +export const CloudFlowConsumers = 'adx_cloudflowconsumers'; +export const SiteSettingDefinitionsMspp = 'mspp_sitesettings'; +export const PowerPagesComponents = 'powerpagecomponents'; +export const PostConfigurations = 'msdyn_postconfigs'; +export const PowerPagesSites = 'powerpagesites'; +export const PowerPagesSiteLanguages = 'powerpagesitelanguages'; +export const CdsBatchEndpoint = '$batch'; +export const TablePermissions = 'adx_entitypermissions'; +export const WebformStep = 'adx_webformsteps'; +export const Website = 'adx_website'; +export const WebPageAccessControlRule = 'adx_webpageaccesscontrolrules'; +export const DocuSignTemplateTable = 'pp_docusigntemplateses'; +export const DocuSignTabsTable = 'pp_docusigntabses'; +export const FetchPowerAppsSettings = 'fetch_powerapps_settings'; +export const FetchPowerAppsSetting = 'fetch_powerapps_setting'; +export const WebPages = 'adx_webpages'; +export const WebLinks = 'adx_weblinks'; +export const Organizations = 'organizations'; +export const WebFiles = 'adx_webfiles'; +export const Annotations = 'annotations'; +export const WorkFlowTable = 'workflows'; +export const SystemUser = 'systemusers'; +export const ChatBots = 'bots'; +export const ContentSnippets = 'adx_contentsnippets'; +export const EncryptedSettings = 'pp_encryptedsettings'; +export const AdxWebsites = 'adx_websites'; +export const RelationshipDefinitions = 'RelationshipDefinitions'; +export const PWAEntity = 'pwaEntity'; +export const Organization = 'organizations'; +export const DvFileSearches = 'dvfilesearchs'; +export const DvFileSearchEntities = 'dvfilesearchentities'; +export const DvFileSearchAttributes = 'dvfilesearchattributes'; +export const SiteMarkers = 'adx_sitemarkers'; +export const SiteMarkersMspp = 'mspp_sitemarkers'; +export const BotConsumers = 'adx_botconsumers'; +export const TextDataStatus = 'textdatastatus'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts b/src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts new file mode 100644 index 00000000..c2c44f7c --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts @@ -0,0 +1,792 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export const nl2SiteJson = +{ + "powerpagecomponent": [ + { + "powerpagecomponentid": "015e3830-2407-4ff2-b614-2335fc1df9d3", + "content": "{\"description\":\"Enabling this setting will show all customer activity on the portal timeline.\",\"value\":\"false\"}", + "name": "CustomerSupport/DisplayAllUserActivitiesOnTimeline", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "01dfcc9d-14b8-47bd-aa21-cb1493477284", + "content": "{\"anonymoususersrole\":false,\"authenticatedusersrole\":true}", + "name": "Authenticated Users", + "powerpagecomponenttype": "11", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "0264f751-b7fd-4ffa-8b87-2fc619abfedf", + "content": "{\"pageid\":\"b579f68c-5c66-4fb5-b760-57323fac52d5\"}", + "name": "Search", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "02908c52-05a8-43e9-9cce-26df4dee15db", + "content": "{\"display_name\":\"Header/Toggle Navigation\",\"type\":756150001,\"value\":\"Toggle navigation\\r\\n\"}", + "name": "Header/Toggle Navigation", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "0a0e9e99-c285-471c-ae75-a0582e2f2ec9", + "content": "{\"displayorder\":1,\"isdefault\":false,\"isvisible\":false}", + "name": "Draft", + "powerpagecomponenttype": "1", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "0c5f0759-2552-4a1a-9a00-1587a9c9b5a3", + "content": "{\"value\":\"SAMEORIGIN\"}", + "name": "HTTP/X-Frame-Options", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "0f11753e-9885-4c0c-ac5e-d05059f21c8e", + "content": "{\"copy\":\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n

You don’t have access to this

\\r\\n

Check your credentials or ask your admin to request access

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\",\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"access-denied\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"33b351a2-b34c-4a43-8847-2e197c21d4d3\",\"sharedpageconfiguration\":false}", + "name": "Access Denied", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "152af973-6073-4372-bf7f-a2180fb6d505", + "content": "{\"display_name\":\"Search/Results Title\",\"value\":\"Results for {{ request.params.q }}\\r\\n\"}", + "name": "Search/ResultsTitle", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "19cec652-c895-ec11-b3fe-00224824507f", + "content": "{\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"Cat-PC.png\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "iVBORw0KGgoAAAANSUhEUgAAAMgAAAChCAYAAACCo/AMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACmRSURBVHgB7X19kBzFlefLqm5pviTNiA+BvGc1lvD61l4YImzvhfGeerwLtu8ijhEHd3sRPjRcbFzwx0ZoMAbh27iViHDYxqyxHHdr33+IC8fdRYCtYW9jwQgxI/Z71xuMgAUWITSCRQgZSSPNaL66u3LzZWVmvcyqnp7uaUk9PfmL6OmqrKyPmclX7/3ee/mSgceS8NZtv9YfRrntnPP+iLP+gEGBA+/VxzmwCcb5BDAYjyI4vAbCsRvGxifBY0WDgUdVHC/295aDaFhs3iFEoB/qhPjj7ucRf/LGsdfGwGNFwgtIBrRgiD/OLqolGgaHsRwP7xUaZQI8VhS8gDg4+tufKbIoeEIIRsE5NMkgGmGMjVcq0eFcwM994sU3TuiDbxV/rZ9BuIUHUBSmVhEYy9I4+6aj8JFbvOm1YuAFhODol27aK173e6xGzseCAEYuVKafvGVsYskD+43ipwphkN8j/sBDtJ0JrhJGwYDXJisDXkAU3h64aR9nfBdpmhT8Ye8nx177ISwDWYKCQhJF5R2fHHt9HDxaGl5AIEM4hNYo8/K9/3LszQloEo4WPz3MgmAPB9CcZjIXhbd4TdLaWPUC4ppVYgDv++SLr94PlwDHBU8psfAAEy5i3PfmVusjgFUMJOSXSzgQNwiTqsJLA+KtNBnfjxfKrPIEeLQsVrWAoLdKb4sA4PilFA4NNNt4wHckDwHFN7900zB4tCRWrYCgaaVduZzDRIWXd8Blwo0vyMDhPr0fCi32soi9gEfLYVUKiAgEFoSZs1PvBzza20xCvhQIgv4ICqba7e2B8i7waDmsSgEpBZUi1R7bxv7hSbjMwDwtFvJ7TUPAhr0WaT2sSgER3iPztkbt8ezoaOH5Q6MHRkdHL+sARVOLapF1YekO8GgprDoBQfOKJh5OQf6ZMALhyeKDC/L78oIxvl9v8ygYAo+WQg5WAQYHB3shyA0L1XHzf4/KvbcsXIAvzk/CxkpprLz9y0JY+BD2Cxjseu7Q6Imv/NbAPrhMKEe5J3NBZa/cYVB3xrDHpUXbBwoHB+/uF3ryAKSTD+H2uTNw29xHMPmbX4HJ7f9GhEGACXfvpJCUgdsHBi5bGshbX/r147yjsxDMzcJ8VLnlMz4FpWXQ1ibW4ODvFATJGM0SDsTzHVfBsVwX9P7Zc7D+b0cxFgIyFYTDZeMjeJ9f3v1fJ6d+/fNyvyNkN4NHy6C9OUhQEcIBiw70g0JIEL0vPceC+dlYpXJeKFX4AbjEEI6BoTKH4xc/+en+taffl20RMO/JaiG0LQcZvPPuoWqagwI1CH62zs1Az5G/ganfGEBTC9NAtj978NDer972W3t1X6FWersqUAxD2BJFhi8IfsMmWcQnIg5H1oQwNjAwsGhavNAaBSEYTwiNVeQ8bltzKhYQxsELSAuhfUk64zuBL63ryXAtbC3PQNc/vgoXPl+USoQJ91IYwJ6DL770csQrtzAGd4jB28/FDyEcNiI0zvAUEWMRx55/cXQsYMH+3x7YbsVX0JxaiKLhUsT/IL4FUh7OkHug9kL8U7i2MHj33f0jTz3leUgLoC1JuvJanVtq/88unIf/OHMKyhs2wnu/Jz29RrRw1OMgVttcbfPksDyeeV1x7PhCGe78t7cPjB88OFrkAcfcry3g/N07ThyF63/yP+U28qKDHVejmTcBPNgxMuIF5UqiPTlIGBbr6X4uyMvv3PmzMjAhVUE8iK2BTARFH+dKOPAcLSVUWgr5kL8sNMrLXDoLZJp76qUUzs2a7c8JF3Qnj/Am0sEgvXAeVwztKSB8GZ4gIQRaEFwQITBN+ts5J5Ya3cZlYJJXuSasOX3S7PdFJRGjOat3e8WVfwAeVwxt6sVihXp6d/JKVrMZ5CzWKtK84nFbfJdsrWE0D0u0kdpNyx0XhGbNqX+y2n5TBDGlFomvVhwcvKsIHlcEq3o+iAa+tRFRRydtZloAONEqjBwj3CM18jV3oZ0yuYroFxATC4ECe31lLmkIwOdoXSF4ARHYWo4H6Pymj+m3vqU9dD+9TYh7NSdHTeFRveSX5D4ONlfmydV8CsqVQpsKiPAA1QE9GOc+vi1r4JttrUW4owoW4SZZJliiSZSg1BQQVjue43Fp0J4CwviRpXbF+Ic2sWY/dTN3TKdqLlxKLFzXL2RxjWrIEg6P1kF7BgorlTERB8Fods2oNMZAEHNbboT5azdbQY0j4+PwypEjsOm6TXD7l79iziFCAcR7ZQJ/GeZVVYnJTZ7JbJ9j3vptBbSlgIyMjEwO3nnXfrG5aDGEz5SmhIBckNtnb7+Tqgp+7O232YMPfJ00MSEkX44POlqFCow+PzlkaRhbUMR1qknOLBUQzibA44qgfV9TUfkRMR4nqh3eKMyqfzf7S7l97l9/FRYEQQeZChW7aQ/87KdW/7/6iz+nu+kAoi0khsdQ4UiZXmI/dz474I/pL0m/+jiVR/PQtgKCWgSicCBLSJB33Df9nuQe0zd/Xs4Hcdy40NXdbamJ7p4e/KpOzhPhMG3P//w5+PEf/RGgNoq7mPiJIehhFRPrnVx3shPBGHhcEbT1jMKRkf83Ib5u2LHj7u2f+43P7t+QzxX+xXtHoXD+Q+CbP8U/+HyRzW3Zpge65g5y+6677mZ//Zd/CadOnRIc5Dr4z/fshLiPeKsEhmtkmU5y+8BPn4Yf/+hHsgG10R8+/jjcdHPsraUmWujEQBCYXWyZWFA5DB5XBKtiyu2BA08dHv7G/ZPXC7J9+vQv4dTMjBnUJOZheaSu3bQJHnv8cXbq1IewbdtW6OlZp/ok8REaAwQ7eMh+/vPnrWc4Isi+FhCKYH4u1faLNevJHt8vtOEEeFwRrAoBQQRxoiBEUaSFw6SBEI+U7i73N226Tn7oMS1EU1NTrEeZXVoyKFFXxwz0dQziBHnBQWwT62TYIQRkQ9IQVR4BjyuGVSMguqo6CgXVFDRD1/FEuaaXwc+efpr/rx//SPbt7u5m27Ztg9u+/BUmvFxGk+z493eyV47EmepbxfFbv3irepBYMJQqsq57NsjD/u7NSUPEhr32uLJYFQKCda9yuVBul0olyIhhVJ3TQdu1YL1z7Jhpu3jxojSf8CO0BvvCrbdKe+vWW78IP/k//xempqdh69at8lIgS3Ixs82CAILZmIOgcDwphEOn3gtivndk5KllrU3isXysmmhUuRxn7OZy8TuBZNpm5lplQQvLTf1pLoFeLtQU8nzVhjxmm2oj9zT8B683v2kzvLX1psn/0bNl7GTYOYGcQ/Qqjow87U2rFsCqMbEiNU9WaBLLtILsXCu6z13zCwOGqDEOCjcuAoXjwYd2C56xCej5cjsrQEjQ9XvfhBuDYP9Ptm695JXlPerHKtIgZfkdCLMGMjSEm3DIYyNIHoKMAf6FW78gv28WnilhSnE0rVwNoS5kTapy87bwefR6IR6th1UhIIJ99KIGQSHp6urSRNkyp0hqu2qHOBVEuW7JwJfH33k75iE39d8siTrJw3Kuk2wTyD5r1qyRO5Uo8vPOWxSrQkBYOfZgzczMAg5K8damOoROaKLpINa0WTcoeER7qLZuA9qPbDN3m9xLCpN2HIS5nNcgLYpVlTI6MzMjTRqMUWR5sqAKN4FEG5jt6emL8oAg5in3V8b8kExoDXLjDTccBo+WxKog6YxVerl4F8zNzYnPPKxfvw4uXLiQlYVbjUynhOmenTvltyDmqXMcl3HitXLYT0dHB3YeA4+WxaoQkIgxHSTkk5OT7LrrNkkhOX9hqtbUpqoeKEHK3WMmxV03kNSThPIroCaTAgLg+UcLY1WYWDwu1iY1gNYivb29kM/Z7wfXNFpkZiAVDioYNLVdkXbbC6bJvnQWCAhN5gWkhbEqBCRIfk05mD/66CO5c/XVV5GAYTrVhLz9XdBER1eKjHDEaS3gXDK+R09Pt/SqTZ7x/LyVsSoEpAJRQW3KwYkD8+zZc9LE6evrVXYQpwUWsrSCC2o+WdrHyfKl21J48L74mZw8j+JSAI+WxargICELCm6u1fT0tEw76e3dgFF2JgarPpQlELEeQG0DGJWXSodqEe4WOgFIuYZN28aNG6WQimfAq2wBj5bFqhAQHvFeNcQtk+j8+fMcU0+Qj2AWvOAD1mCml4DYBmOabdPAoO7keMXoNFttcnEMKq5ZkxdmXpzmLpr7wKNlsTpysWIzRudU0TR2pgfqxo19UpOIt3qSexWriSzTKTM1nkykcgOFEmEYMrwPOgpQg8WPxn1RuBZG23MQtZQazkBiNDhIB7sQEr6wsCBJ+/r165N0ETU7UJ2z6H3cBEfdrI+jWxfdy5jycuaMNUmqAB4ti7YXEGHq4xs6K15BwU6e/EC+1fENj7yEZvaSSVVLipBr97D+1sKBnOf06V/yUqlM+/JDh/7C85AWRdubWGKM9nJIVV/PhDa3kJMgzp+/wDNMKfxKtQNx/VJNpYUD00qE5kBNZXEU7BOxeRTiE+DRcmh7ARFDdTvYg1c2A6SKNsh9KiTISS5cmLKvx2sqEcND8vk837TpWoaaA6+LGsq9X/yMrAAeLYn2J+lMmFhqTDuJiHS+uaUNkJPkcnnpjsWRPjU1zTKWOzBeKp6u5ctEnIMLTiM1CJpvyHH0/Zi9rgiDyFdvb1W0PQfh3HiJ3KCd/s6Me5w+fVoO6r6+PobmEUmFT02bdc8XRB/NKnmcCEeiPYiAqccogkdLgkEbAz1YpYify8ja1dB+WbkNidkF+nvz5uvlNtbH0rMSaSoJ1R6oLZDkYzo9ptajWRU5S+JWe5aLAevbUWP5aI/Lj7bWIBWAItilfVLJiFa2bbLUmjwJB/eHH37IceBfe+015rws4p7P5ziScRSOyclJWaBOCwdNeqzmBl5T8u7eVkRbCwiPDEF3BUPuR05haZWEpQVFtgmXrAwmopmF7l+iXQwnEQFAOS9Ek3GVtkJXquKOcDomFkA+kM/q0WJobwFJVpe13viYSwVOo8pXRJViAolaANBcwglW6NlCYVD9pSChUKDmQC2DZtjFixd5kiFsXZ+5QkKKPHDpTPBoObQ3SScuXoT2IOlcKrcQgzktIyCIMRE0mTDarvvgoEehQSFB4dBF6XgiZJbXLCOdnpm0FO5TTloRbSsgBw+OFiE9UclKCeGLLLQJdto7VCoVwJhInKq+Vp6PfAPndZw9e1Z6quj1HFdu6h4stVYI9B+I02I8Wgjtq0GcpZN5dnWRLNBkQ6s/ZvuiFtGRduQk6NkScRLDMZhTEBscIZWaB8BeK0Rdv6PszaxWQ/sKCJOxhWqzAVOD1zmeakPoyDpqEYx1aFIu00Uiqyojd8sHgRI8yUWq3DPMwc3g0VJoSwHBYtVizNUabLyOfeOx0mnqGO9A7TE3N6c0R5Wlnp3YirttRdZ9RL3l0JYCEkZQ1GaSQ7gpScg+ObuAtSHygotwLPqA0OkjpI9zqVRT1uxDQt59RL3V0JYCIsblTr3Nq9S9IqaQFaNgSX6VmyJvMnQXFrSAlMx6I/b9TcYv5STm/hnCp59li099by20nYCMCvNKDMbtej/JJElBahjHmwU0/kEGvjWitQZBE8uZL5J1H/cayTptttkVu4eDhSJ4tAzaTkBKwrxilCFzToLkVb1XjGXZQ1UkSycf6stluJBNO8/OAWPu9bXMVDwPaSm0n4nF+U53YKvBrz/67e1yk2oer5QJJTSH3M/l8uqWnKoCbY6lCjrQ2IiJoDvHxZMWwaNl0FYCIr1X8QCjQsCTCDozSYkkaVDPC6kVI7HSRNC80tXZ7V5J+juJjbj3YE5cRp0qU118wLCF0FYCEkZRUW0aQg2QuYJUiribt7tKUqQBPNVsaRIMGKrl3FyByrwfr15MjrvP1MPD7eDREmgvE4sFe5wWd6ln17wyWoOrMj8qWdHyOmXkVkmCLlersq6RaAvdBunUdkp3jABbwscrRfBoCbSNgLzwwuigGKIFtZu8ru0Zf+aN7nACLUWZ187i76hBlICYbkHALNcuS5Zw098WmafXs/gK8EHwaAm0jYDwAHaRXVbl28qV4tnromeN3oxEw7RzSmsd7cat4sEy5ls1N7JAwcdDWgNtISDPj472i8FYdOIKFlHX7Tx5fbuTmGiSostBeHpWYDUuvyiMyeZqJfc5K3zBa5EWQHtUNYli7YFUAWyCrmHsfMeTRK/CYg5h9imXcPvaPcEuUA02B2Esq9RP9aXf9Dx5FJAfwjIweNddRfEEu8Iw7P/Yr/wK5PN58FgSJiBg+7//ne88yWCFAyPnpYi/A5Ba2cloAk5WqwVITXc128wpwuD0s9qxpA9m9b7//km5z5O6vFDlnNSz1cJyCjncM/Rf9l64cGGP3r/qmqtNmr7HEhGwoRVvYomQ3RNgD3ZrequTVcsIcaZTY2lfXi3zloBhkNBJNeFZsY1aE6cyoRwI3ZUkp6we7N69uzAzM2N59KJKBB51IuIrW0CeP3RoSHGP1ODjtVeLYpxOeVXdwDanaEkgJ6Ke4iBWhktyW0tAs54jneyonj9q0Jt14r33irpEkcbatWvBo05w3ruiBUQYTvItuRSThWoOsk+Pu+aU69Ey0Xc8F128bs2rrCREgJqTsrJMLqkBAwbFRqLq5VLF0jz4rN093eBRH8Q/enzFCshzhw4NB4wVSNOibiXX9aqietS7VWsgU+0ko+j0LU1jHtwuROd6y/SxxZ7VPE83BHWZWffdd1+hXLEDjd09PeBRP3jE9q9IAcGcKxH23uV6oaBOqBNS5hPVJhkchAVhKN/K5XLFNGY8S5YHjGdoqvQNaBCzUqnLzDpz7sIdbtu69evAoz6IP/7EDx77zuEVKSBhBHuE9tgCNWx5B+lwOPFq8UVWj3LPXaPcpQsLCynNkDF5KsV7wL24HbOhQUysl1WXmVWJKkN0H127nZ2d4FE3xvDHihOQ5w+NDuGMQeWpooeoa9f1HFVDKtJuDqS9YPp6HKssIlwOAkRbODlgi7p9M5otp0MPBLtgCRgc/J1CVKlY80k6vHA0BDSv8HtFCQi+SQVx3UPcqvoQNYmsYCA5Duq4tU+QchVX6SNLjKJwJBOn0tfhtdcRAfc+9LmpkHNHK1TDug0dKUHy5lX90OYVbq8oAemuRHsjzrcQOz7ldcoY2FneKUvTsIySoJCea268Wlg4zl3SoIZ5p8+3vlmV1aoyhLzwbFwIb1HMz89bfMWbVw1jTG+sGAEZlZOh2C4Vrs5IHoQsU8aNmFsF23SKOw0sqj5MxyKcGAsLw1CaWLhSLYC9MGjWczup7fbD2VF3npGSYtoCOxkzhaGhof6FhVKBtnnzqjFo8wqxYgSkxGEUv3l64hFfxJzJ8hbRhEG9km1WYDHT1NL5TLpwA3kWl5yb67gainzT81gGhyLSxYuji5B1HoTevGoCqHmFWBEC8vNDh/aSuR4Iqhl0CkmKmGu5cVy4yeH0gKRIvcURXV2dsl1pEHJZ2yRbYtpKlplIJ3fR33PDQlRdi0xPTxfpvjevGgTnI3S35QVkNI557KFt1kBLz+HQgwuy0qjc1A8wL/mEvC/mmu3q6nKFQ18ka167Mb8yEiGz4Go8ujAiXiJTQH73d+8rVsqVAm3r6vaR80YQ8ehJut/yAlLiHE0rTRzSI0y5UR1TKHvGYNp7pWbJ2pm+1fgEcg/0YOnyo9WgtAkGE40GWKpXy76Q8zLgvC+LrM/Oz+5027x5VT/QvNr32GPjtK2lBSQ2rWCLfPtiQxVCrAekS7Qz3MHmsDk1fdtM4UD0qHwmh3+koJ8Pi103JBjkQehaJvgJGd/j9rt4caZI99G88smJ9UOMsn1uW8sKCDGtEheV9vLEXcygUVhK0qISsMQMg7TGqDqi0bzC1abcTNlLBZP6yFStFUTAitKjp/C1r32tKHoW6HnrezeAR/2oADzjti1pRuEDu3cXxZjaKUZRQTYEbH8uig4/+uijE3CJUOZwQG+7rlQGqbT0xaCFwRDyuHgJzzwOVTQICgeaV7hA51KwHM2RhkX0eST+F2LzEdyfL5VT5lWPT06sH5yP7/teejzX1CD3735YqB02GjA2BPGqsUXBZPaXRRtOzIFLAEwn4dnrm1eDIddkEhSFaYiqzAGBGvdZL2x61BzT0xfhciJQXIaYkeIHDGuXb6lkZ+6iaaXqdXnUhWBfZutipzzw0MOY7qvme1vJfIhCGYIXh4eHmzqPU1VHRNOKeG/sEAVAatYekGezJjmRc+K+kOn2XVQ4cMDh9FpcyPOyw84s1o6H3koQ7PwP/+lrg655tcFPq20IFRYdzmqvKiDCrNor/i33OM1c+0TjgcVvyK9duxOaCMzUVTEPGrDIiiHQh6ImmHH7Ui+WS+CdbTceYUEvtTYzMwuXG/rtoIvUGQ8Z54ML8/Op1PbOLh/7aABj+6rQhUwBuf/B3XsZqVKo/ymQfptDBM0rtvxsvHTBEGmytABLz6XIghnwNOrOnULSmSdmtKP2QJseXbuXi5w7z2ReDuqlpHaCYmdnxxDti4FBb141AJ6klrhICcjwg/+tPwyDPbFXyPjwjas0bb6wpun0PMCeILBMHutNv1RvU8b5zDHDMq+R5QXT2qNe7rGYxqvzOoZXxd+BvPbbR4/C7Kyt0datXw8e9aOaeYWwBAT5RBhEByKTJmEO0UVfLHNENI9DE3BwdLQYRXyIp8vmpFJIVNUPN73EjaZb4OlFccjlmJ5nbhH8eJnnHsk96tUezRIQBL40SEKm3D569O1UP29eNYSq5hXCLi6bXzssvgrqX2snLTGyrhj5jhaWV9zMgMMeVj0nyjatYm2izSbOnIIM5kSWWUqU5m4xJ8jIVPRbQmsPXNm2XggtDE2E5iFSm5RKJTh+/LjVwZtXDWIR8wph/ovoshXj5A/UwK9qvui8jPgb9u7bt/xYiOIexUV4QrXXsRsPSZFxZtW9SjRJkqioTzQXkB8sshYv8/wRNAKlkaAJ0GkzgP9N1CbvvPMOdzWaN68aw2LmFcK8ckRcY4/0sKdhM11t2wjhePx7330EmoC8uHfkyCRfQlTcyaHKPM8WOnMi0Uha++CAjhswloDaA02rWmkl1YCPFYZh1rTcuqBSTay2N994M/W38eZVA+B8JCs4SCGHhAr4DUFiRVlvb+3TZSavo3nCIW8YRYMASy6Ps2jMgvRJrWBLYGx5SoCxOZ/P82uuuVqaVpOT56FR4B8JBWS5QFJORBumpqbZiRMnrD7d3d3evGoIwUjNHvijxFhR7qUJstYasj02+vmRZgrHwYOjRXHXDepepp1luHQdourIcZqk66AhdZPGn8wYiXwPbNiwHmcNwqlTHy777Z/P5/hyybrWIMg/0Lx69913uftcvu5VA+B8srIw+0ytbnH0ibNdyXmcrsqktYY5ocLYDmgmcgEGuzRxBvIcNT1Rjicr0zxE+eA8zdMJOTeaZN26dTJifv78Bb40RVUdTM7/kFN0YTlQFee5Nn/feP0N6/f0VRMbg/iDjuzbt69mYl0wLM2rOO+JeKusqCBPRuaT+5qcoMidMjUWEu+S5erlkKxvztOTlOR2EtiEVGoJ1UQa69evY5hvNTU1hRm7yx7Y8QpUjDdnyQHJ+VBwIWVeCe3RJGfAqkIAvKZ5JfuFPOinMQ5itxh3rhaUaJ43zbTSEFc2SYkprVEtIzZtipkjupnb6SmMJPyp31WZLmJfaA2G2gMJuQgIquNo0jQ+8JRkLpsbMDL56r333ksd7/YzB+uHMK/+8NFHa5pXCDFqou1UU5Bt+aUJOmBAZV9ztQdmpIoLLxaJ1zwkHQtJw3URpxbISbRKTMhxP8zlWBzvqMhUdpMwK7AcLYIahKl7LkdIlJwB/itee+0165g3rxoDmldL7YsxWte8Sr22caAtVSXVg5KeX1IFjMzjrkJ2Xa1jReBZOvXdStvAhr6+XukpOnv2jKl0ogflcs0srYUEWYfGEb8f0OX83ru2BvHkvDHQsj61EOhcKsKQKf8w2+UoaEpKCUWlXMZ7Z5JsJRxMvek5X6T6uis8PCmSQNy5pr/54CQonGeOg0++8ZVmUR/pNWpUSBKrNSlV2ggUl4Fjx95JHfPzzusHd8r61ELAAlagvMNNJTEXLs0egSYjh3HKZHBbMYuMRwKqEdy+1YREco/4DErQ5Xc8CaoiuMesMrmS1JO4e8CXIyCJizZsmEjr5331lVetdl/Wp2GM1dM5iCqVDVR7EEMdv8woXYpLrCHYi2q6PEJughPXgCxCD9asQiN3XFVPZEnQUPbr7u6Sg19oD05+bX0/UF5VtjwvlE6CZA1rEXzm85MX4IMPPrDafdXExlCPeYUIWIZxr17ZsZ0Rv8AZXAokprnlhiXbi0bCKbi9TiBPNIYVdMRxj/lMvKenh2F9XfExTgnUGC5HWQ4X0SYiftasaVTQOHt5/OVUqzev6ke95hUiAOLOVd/qkDFF5Jht9tRaRBmX203DSjbk1WveZqWlWDxKbdKsXblQdC6Xlx4qnE+hCTk1v9TlWGwWxekn0ACIMpaaiLHG3jMiOGjte/OqYYxBncARcAI3qGkVb5usV7kRdndfkloyzEkp0cH7yDa33NNMkJ9eivbFwU2IOb2fqRm1sFAybcqBx5JL6OuggOQaGtlRVDFReuRCjZhrp0+fhnPnzllt3rxqDOL/UffUDPRiTXI7xd0NHsRtpagITcZXBwYmxFcqI1AOfki0hHa/AmRPu81w5YK2Eqm5pM9bu3YN4JyKSqUC2pJMPFhAXL1xG5LsRmIZqmwjjxMOgTViZv3d3/4i1bbB172qGzyjauJSEAibY9yx+zU7t0gyh6gfLgHE/auSf55eFs0yuVxST71cenJRcjhx96J5ValERniYlZai+0vrU7c1mDLCTfVQ/NGIWeRGz33VxAbBG4vjCQNCxjeopygeOGDP0BMtOy8FDxFjcGyRo4xlzwpMTof4mRNhsSqcSFvR9mAZc8pEqLXSSYQlXjYESbu23BrzQhmJY9rdW8910HOFuWEUvih1Y4hYYzNf8X92WO/oty95cyfpGgz61nR23gHNBodxs0WQwS8sM9BoDDW61TbTrlVzYmACjspq02ZbfNlECGRCoAqAmHsaPoKcpl4zC004zW8acfe+/vrrqbbePl/3qm5g1cQGk2yDx7797XHkIbgjorbUo2VCwRqViO+FJkMM18wAJCdTY10O4XAOLcQ4CrXHijMnKMiYWRJBXSM2nXR2v+YdGU9oXMX1ahF9D30d/CH4z5I9YiffP2nt+6qJDYLBfmgQMXsE2E8TFRmr6o8sfP2hh/dAE3HbbQNj4maTQN7uCuRtn5QKZSrthLqANbfQ52TnZ+mUFZCzBTWnUCYVJ31AW5xxNRF9Cc5wbcJ6EJP0gGgl6UFb5M+b4P3330+ZVz0+9tEQsopSLxVSQAQBf8aQcwUAqBJ/gL3Du3cXoYngQZxdyReZTw6w+Awm7TGClHybCvBGwNC9i0QdB696y7PEa5Vok2SFKv1dX2YuxzLTQoOEYWCi+3jtrq7OmlrkzTffTLX5otQNYWw5c5ikgHz/0UfHxL9zDLed0UWDdiYpSgytJ5pZuJqVy09mNLtuZ+pqS7mkqfYhvMTskmuwSqUs+3bJQgeGkzheLKpVZFauJO31e5AYS5Iu4wV1UIvUOss1r3xZnwbB60stcUEz6B4xjaq8IYBVMI6eV2hmdXfxj0eifs65Dx3UtifLXiIZQEfRTTUiKRSQleSIQA2CH5xeGwTMIuYq3QRsEyvRZBhDWSpiV3LsDUOCrmOwYrAvqkFOTJxImVe+rE9jqFXWpxaMgMRaBMaIojDQJpejXQoVFhz/+kMPDcMyMTAwMCnGzg/VvWRbhp3OwMq1SpwImngr1k05B/VI0QAgzM7OSM8UCom5gdQascsXCHdJrhfHUJYaE4mLKzCmKiOaZ8AX0GKa6O1jvmpikzC23CniVg52JQru1yzXaI4gILFDk3tOItzBDx58+JvHH9j9+0VYBsoLYJlZ3K6fa2mMxHTS/ew0eJvsMxLRlvtSCEQknWOyYrwwTqj66RgKnZ0IJhYCyvRaakRcp7yDZvnMLBXFOzs7qp43cXzC2vfmVYNYpnmFSL2mYy8V36MFBWxaYvEBTuZh4NtYfMbzYbA/YmsPf/uR3687rP/8odEnxFWHXFLNsxMWSQSccR3bZCn3ribHsf2Ppg5X3l58Zpxui33QpEm0V0CuF/+6+K3ndKDpdObMmZq/D3q9rrnmGoBEwZnfB2Mk7zs8A/HWW2/BCwdfsNqu3bTJZ+/Wj7HvP/rdAVgmMsniN3Y/PCqGSpG6fk12IGkjwLkVshlNECS0uI8CI74nQxwYIiLJxJs6H+QgEA0hC7EmjqxhG5/DYE1+TWHTpk0FPbA5rx0ySARUkuDkl7KFwxISdX25jffesCG276empulEJ67fDXS1Wl2798yZs6xWQeurrroKPVayYETWnw1rb83P25Ubn/3TZ1N1d7fcUPAapA5g3lUEfKAZFXgy/+pl4PeKITUq/qEF3ebGSEyEjWiTOIPWpKkg4vnuMfFFkcCkECaLrsQ/pT0TC0IgTLyIT1+8COuEO7Me4WAmdqHaxXO4afvahEr8D7HmwZVosTg1VjXBGYa4BjoS+MSsjL1QtleMcSFUHIWk2rNhULG7u0v/bVwhkQKHFRxPnvzAFKhDYfFFqZcJETWPGOxoVnmqzHmgeHGUQPEPnYDMZ7DrZ4GSG54Vq7BWTSCDOjliDH/8zM7M8DjLdmlw38pa8zCV2kEPJxzE/B6yOw5QXCAH74sDMuYHTHMOcBStNL+EADAs+JA1mQpNq2uvvUZrIf1MlubCfjjwN2++3gjA8XeOp67lvVdLBWalw97vf+/RW5pZu40tdhCLygmDYlS8/grgkGbXZkDtYcwrMTKDeFu3m7YwkGaVfJVje2C+hYbBKl3CNOtYu5b39vZmWHLOw6e4hjK3SPQvg5842bsBqZwecnTj4uDH58aU+LffPobV1JM/FiO5KgKRECok+zi3Pa5gkpcCovopvmMeWOfPpH4x1Fzj40dS7l1cc9AXhqsOMQwnSwul8YsXp8fE33cSKqVnRkZGJqBJYLU6SCER5pbYLDD7wSwBwYGHvCOUQiAEI+EioIRADlx5XAiEFBDVL1RCFBCh6e7u5uKz6PNlE3JKrLOPGa5C3uha44DiJeiGxUGP2uTkyZPw97/4ezh27Jg0iTxaGGj18MpAs4SkpoBofGP3N38g2MJw+nliQZHFlVFAEq0BejvI5aQGCeM+sl0LSCiOyf4xf2FiX20Hghf0WHGK1MM7wlBLWKgQpPtqz1XcduLEu/An//9P4BNbPwGf++xn5TcCZ/dhlBuFBj+4f1Z85mbn4NimrfDu1R+HcpBwho9/9C786gf/CB6XFftGfvb0/dAELFlAEA/s3l0U1v0T4qSCk9xoCLrSENTkomZWrFlQoIimWexYl+AETjDPci9XM7PSWkN7pRKhiQm7lfmrzC4Gr7zyKvzxM39s7tvX1yeF5DOf/jT0bewT3GFz6u9zy/9+IfPv9q+O/jWsm6t/lSqPRsH3j/zsp/dCE1CXe0RF22/4+oMPD7GAiXgJFOTjKE+UsZVNpjo3KejG7karHIUJrESveFeV6NGXQBte2OYyBReFRAuHvmeaoOtva6otU8FCRo4rHkUfJfZiE1JuXRw1BZpZ+EHg83zsY5vFd6cUmE6xfy1U4HTGnzRfKYHHykRD/sPHH/vufvG1XwoK4/eIETcAakwnw1uZMYSmUq8VtgZkgPPs5Q5ktjjGG4QLFKe9purlUkHRt+LWkmzyy3VJK9Iu3csmxEMFo1DYQiP4KSCpdqsd/mq+AzqEiTWb74RymINcpQwbL56DjtIceFxGRPVXL6mGukysakAiL4ZuUZhE23NhcLPQJLcEdsAw4SWJR4trc4qSdyToavae2ZakXkC3adOtuklFPVXJPlPVElV3rS2YfZ2EvL90+CV2+PBL4LGiMCL4R9PWsGmKgGThW9/61pYSY31BPr8hn5NFRuNSo7nY/y9+QMws4ja5r+IB8ieeY/VTbXi0g5xLvpJuObqTbEKWysylv/Q54vvPXxjDKvTg0foQhsP5kZGnml5D2sPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw2MV458BRLg4pgumMhUAAAAASUVORK5CYII=", + "name": "Cat-PC.png", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "1c09dc21-4a02-4919-af00-361d6c296c61", + "content": "{\"disablepagevalidation\":false,\"displayimageonly\":false,\"displayorder\":1,\"displaypagechildlinks\":false,\"openinnewwindow\":false,\"pageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"robotsfollowlink\":true,\"weblinksetid\":\"3b8343ca-c04c-4768-a2f9-73b9a01bde4f\"}", + "name": "Home", + "powerpagecomponenttype": "5", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "230c16df-fb1b-4828-8be1-b0a87016a6a3", + "content": "{\"entityname\":\"adx_webpage\",\"isdefault\":false,\"rewriteurl\":\"~/Pages/Profile.aspx\",\"usewebsiteheaderandfooter\":true}", + "name": "Profile", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "2ef3c1a4-e3b2-45bd-932f-76adc12751c4", + "content": "{\"disablepagevalidation\":false,\"displayimageonly\":false,\"displayorder\":1,\"displaypagechildlinks\":false,\"openinnewwindow\":false,\"pageid\":\"6942c943-cc5d-44dc-883a-13ff114978e4\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"robotsfollowlink\":true,\"weblinksetid\":\"c04c7a09-83f3-4258-bd37-c9b164587996\"}", + "name": "Profile", + "powerpagecomponenttype": "5", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "30a5e35e-28b2-48d7-a983-6b2c275a6e57", + "content": "{\"display_name\":\"Mobile Header\",\"type\":756150001,\"value\":\"\\r\\n {%- if snippets['Logo URL'] %}{{ snippets[{% endif %}\\r\\n {% if snippets['Site name'] -%}\\r\\n

{{ snippets['Site name'] }}

\\r\\n {%- endif %}\\r\\n
\\r\\n\"}", + "name": "Mobile Header", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "32646387-95d6-4279-b9c9-435823a1c4d8", + "content": "{\"source\":\"{% assign current_page = current_page | default: 1 %}\\r\\n{% assign page_size = page_size | default: 10 %}\\r\\n{% assign total = total | default: 0 %}\\r\\n{% assign limit = 5 %}\\r\\n\\r\\n{% assign total_pages_remainder = total | modulo: page_size %}\\r\\n{% if total_pages_remainder > 0 %}\\r\\n {% assign total_pages = total | divided_by: page_size | plus: 1 %}\\r\\n{% else %}\\r\\n {% assign total_pages = total | divided_by: page_size %}\\r\\n{% endif %}\\r\\n\\r\\n{% if total_pages > 1 %}\\r\\n {% assign prev_page = current_page | minus: 1 %}\\r\\n {% assign next_page = current_page | plus: 1 %}\\r\\n\\r\\n {% assign start_page = 0 %}\\r\\n {% assign offset = limit | divided_by: 2 %}\\r\\n {% assign page_offset = current_page | minus: 1 %}\\r\\n {% if page_offset > offset %}\\r\\n {% assign start_page = current_page | minus: offset | minus: 1 %}\\r\\n {% endif %}\\r\\n\\r\\n
    \\r\\n {% if current_page == 1 %}\\r\\n
  • «
  • \\r\\n
  • \\r\\n {% else %}\\r\\n
  • «
  • \\r\\n
  • \\r\\n {% endif %}\\r\\n\\r\\n {% for page in (1..total_pages) offset: start_page limit: limit %}\\r\\n \\r\\n {{ page }}\\r\\n \\r\\n {% endfor -%}\\r\\n\\r\\n {% if current_page == total_pages %}\\r\\n
  • \\r\\n
  • »
  • \\r\\n {% else %}\\r\\n
  • \\r\\n
  • »
  • \\r\\n {% endif %}\\r\\n
\\r\\n{% endif %}\\r\\n\"}", + "name": "Pagination", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "33b351a2-b34c-4a43-8847-2e197c21d4d3", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"access-denied\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false}", + "name": "Access Denied", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "3639737b-f9d4-4fea-a546-1b4f74551574", + "content": "{\"description\":\"Blank Template\",\"entityname\":\"adx_webpage\",\"isdefault\":false,\"type\":756150001,\"usewebsiteheaderandfooter\":true,\"webtemplateid\":\"ad212595-91f1-4e7c-9d99-b0925011cfd9\"}", + "name": "Default studio template", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "3abfb98a-151c-4d03-a718-3c1036351f75", + "content": "{\"displayorder\":2,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"theme.css\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "LyohDQogKiBCb290c3RyYXAgdjMuMy42IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSkNCiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLg0KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkNCiAqLw0KLyogbGluZSAxOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQpoMS51bmRlcmxpbmUsIGg0LnVuZGVybGluZSB7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNiY2JjYmM7DQogICAgcGFkZGluZy1ib3R0b206IDIxcHg7DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgew0KICAgIC8qIGxpbmUgMjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC50ZXh0X2NlbnRlci1tb2JpbGUgew0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgfQ0KfQ0KDQovKiBsaW5lIDM0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5idG4tbGctaG9tZSB7DQogICAgcGFkZGluZzogMjBweCA0MHB4Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCn0NCg0KLyogbGluZSAzOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouYnRuLWluZm8taG9tZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KfQ0KICAgIC8qIGxpbmUgNDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5idG4taW5mby1ob21lOmhvdmVyIHsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSA0OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmJ0bi1pbmZvLWhvbWU6YWN0aXZlIHsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSA1NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmJ0bi1pbmZvLWhvbWU6Zm9jdXMgew0KICAgICAgICBjb2xvcjogIzAwMDsNCiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgIH0NCg0KLyogbGluZSA2NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouYnJlYWRjcnVtYiA+IGxpIGEgew0KICAgIGNvbG9yOiAjMzAyY2UxOw0KICAgIHBhZGRpbmc6IDJweCA0cHg7DQp9DQogLmJyZWFkY3J1bWIgPiBsaSBhOmhvdmVyIHsNCiAgICBjb2xvcjogIzMwMmNlMTsNCn0NCg0KLyogbGluZSA4NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoucGFnaW5hdGlvbiA+IGxpID4gYSwNCi5wYWdpbmF0aW9uID4gbGkgPiBzcGFuIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICBib3JkZXI6IDBweDsNCiAgICBtYXJnaW4tbGVmdDogMTBweDsNCiAgICB3aWR0aDogNDBweDsNCiAgICBoZWlnaHQ6IDQwcHg7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQovKiBsaW5lIDk2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5wYWdpbmF0aW9uID4gbGk6Zmlyc3QtY2hpbGQgPiBhOmhvdmVyLA0KLnBhZ2luYXRpb24gPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW46aG92ZXIgew0KICAgIGJhY2tncm91bmQ6IG5vbmU7DQp9DQoNCi8qIGxpbmUgMTAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5wYWdpbmF0aW9uID4gbGk6bGFzdC1jaGlsZCA+IGE6aG92ZXIsDQoucGFnaW5hdGlvbiA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KfQ0KDQovKiBsaW5lIDExMiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoucGFnaW5hdGlvbiA+IGxpID4gYTpob3ZlciwNCi5wYWdpbmF0aW9uID4gbGkgPiBhOmZvY3VzLA0KLnBhZ2luYXRpb24gPiBsaSA+IHNwYW46aG92ZXIsDQoucGFnaW5hdGlvbiA+IGxpID4gc3Bhbjpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCn0NCg0KLyogbGluZSAxMjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYSwNCi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGE6aG92ZXIsDQoucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhOmZvY3VzLA0KLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3BhbiwNCi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW46aG92ZXIsDQoucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuOmZvY3VzIHsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1yYWRpdXM6IDUwJTsNCglib3JkZXI6IHNvbGlkIDFweDsNCn0NCg0KLmxvZ28tY29udGFpbmVyIHsNCiAgICBoZWlnaHQ6IDUxcHg7DQogICAgd2lkdGg6IDE4N3B4Ow0KICAgIG1hcmdpbi1sZWZ0OiA5cHg7DQp9DQoNCi8qIGxpbmUgMTMyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wIHsNCiAgICBib3JkZXItd2lkdGg6IDA7DQp9DQoNCi8qIGxpbmUgMTM2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItc3RhdGljLXRvcCB7DQogICAgYm9yZGVyLXdpZHRoOiAwOw0KICAgIG1hcmdpbi1ib3R0b206IDA7DQp9DQoNCi8qIGxpbmUgMTQwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZGVmYXVsdCB7DQogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCn0NCg0KLyogbGluZSAxNDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmhvbWVsaW5rLCBhLmhvbWVsaW5rOmhvdmVyLCBhLmhvbWVsaW5rOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCi8qIGxpbmUgMTQ5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5yZWdpc3Rlci1iYXIgew0KICAgIGNsZWFyOiBib3RoOw0KfQ0KDQovKiBsaW5lIDE1MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgew0KICAgIG1pbi1oZWlnaHQ6IDY3cHg7DQp9DQogICAgLyogbGluZSAxNTYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhciAubmF2YmFyLWNvbGxhcHNlIHsNCiAgICAgICAgbWF4LWhlaWdodDogNTEwcHg7DQogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgICAgIGJvcmRlci10b3A6IG5vbmU7DQogICAgICAgIHBhZGRpbmctdG9wOiA4cHg7DQogICAgfQ0KICAgIC8qIGxpbmUgMTYzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm5hdmJhci1mb3JtIHsNCiAgICAgICAgYm9yZGVyOiBub25lOw0KICAgICAgICBtYXJnaW4tbGVmdDogMDsNCiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOw0KICAgIH0NCiAgICAgICAgLyogbGluZSAxNjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICAgICAgZm9udC1zaXplOiAxZW07DQogICAgICAgIH0NCg0KLyogbGluZSAxNzUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciAubmF2YmFyLWNvbGxhcHNlIHsNCiAgICBtYXgtaGVpZ2h0OiA1MTBweDsNCiAgICBib3gtc2hhZG93OiBub25lOw0KICAgIGJvcmRlci10b3A6IG5vbmU7DQp9DQoNCi8qIGxpbmUgMTgxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXIgLm5hdmJhci1mb3JtIHsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgbWFyZ2luLWxlZnQ6IDA7DQogICAgbWFyZ2luLXJpZ2h0OiAwOw0KfQ0KICAgIC8qIGxpbmUgMTg2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sIHsNCiAgICAgICAgZm9udC1zaXplOiAxZW07DQogICAgfQ0KDQpAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHsNCiAgICAvKiBsaW5lIDE5MSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmZpeC1uYXZiYXIgLnJlZ2lzdGVyLWJhciB7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgfQ0KfQ0KDQovKiBsaW5lIDE5NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgPiAuY29udGFpbmVyID4gLnJvdyA+IGRpdiB7DQogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsNCn0NCg0KLyogbGluZSAyMDIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciA+IC5jb250YWluZXIgPiAucm93ID4gZGl2IHsNCiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50Ow0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOw0KfQ0KDQovKiBsaW5lIDIxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm1lbnUtYmFyID4gLm5hdmJhci1uYXYgPiBsaSA+IGEgew0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgU2VtaWJvbGQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMWVtOw0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQovKiBsaW5lIDIxOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm1lbnUtYmFyID4gLm5hdmJhci1uYXYgPiAuZGl2aWRlci12ZXJ0aWNhbCB7DQogICAgaGVpZ2h0OiAyMXB4Ow0KICAgIG1hcmdpbjogMCA0cHg7DQogICAgbWFyZ2luLXRvcDogMTQuNXB4Ow0KICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNmZmY7DQogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNjY2Ow0KfQ0KDQovKiBsaW5lIDIzMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyIC5tZW51LWJhciA+IC5uYXZiYXItbmF2ID4gbGkgPiBhIHsNCiAgICBmb250LWZhbWlseTogIlNlZ29lIFVJIFNlbWlib2xkIiwgIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDFlbTsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KLyogbGluZSAyMzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciAubWVudS1iYXIgPiAubmF2YmFyLW5hdiA+IC5kaXZpZGVyLXZlcnRpY2FsIHsNCiAgICBoZWlnaHQ6IDIxcHg7DQogICAgbWFyZ2luOiAwIDRweDsNCiAgICBtYXJnaW4tdG9wOiAxNC41cHg7DQogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2ZmZjsNCiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICM2NjY7DQp9DQoNCi8qIGxpbmUgMjQ3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItYnJhbmQgew0KICAgIGZvbnQtc2l6ZTogMi4xMWVtOw0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgTGlnaHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGNvbG9yOiAjMjMyMjIyOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCkgew0KICAgIC8qIGxpbmUgMjQ3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWJyYW5kIHsNCiAgICAgICAgcG9zaXRpb246IGluaXRpYWw7DQogICAgICAgIGhlaWdodDogNDJweDsNCiAgICB9DQp9DQoNCi8qIGxpbmUgMjU5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaGVhZGVyIHsNCiAgICBwYWRkaW5nLXRvcDogOHB4Ow0KfQ0KDQovKiBsaW5lIDI2NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1icmFuZCB7DQogICAgZm9udC1zaXplOiAyLjExZW07DQogICAgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSBMaWdodCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgY29sb3I6ICMyMzIyMjI7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogMTIwMHB4KSB7DQogICAgLyogbGluZSAyNjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWJyYW5kIHsNCiAgICAgICAgcG9zaXRpb246IGluaXRpYWw7DQogICAgICAgIGhlaWdodDogNDJweDsNCiAgICB9DQp9DQoNCi8qIGxpbmUgMjg0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wLm5hdmJhci1pbnZlcnNlIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjMyMjIyOw0KICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQp9DQogICAgLyogbGluZSAyODgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSAyOTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhci1pbnZlcnNlIC5kaXZpZGVyLXZlcnRpY2FsIHsNCiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmOw0KICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogIzExMTsNCiAgICB9DQoNCi8qIGxpbmUgMjk2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggNXB4IHJnYmEoNTcsIDYzLCA3MiwgMC4zKTsNCiAgICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDVweCByZ2JhKDU3LCA2MywgNzIsIDAuMyk7DQogICAgYm94LXNoYWRvdzogMCAzcHggNXB4IHJnYmEoNTcsIDYzLCA3MiwgMC4zKTsNCn0NCiAgICAvKiBsaW5lIDMwMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSAzMDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAuZGl2aWRlci12ZXJ0aWNhbCB7DQogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2ZmZjsNCiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICMxMTE7DQogICAgfQ0KDQovKiBsaW5lIDMxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEgew0KICAgIGNvbG9yOiAjMDAwOw0KfQ0KICAgIC8qIGxpbmUgMzE0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMkNFMTsNCiAgICAgICAgLypib3JkZXItYm90dG9tOiA0cHggc29saWQgIzJGNUZFRjsNCiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsqLw0KICAgIH0NCiAgICAvKiBsaW5lIDMyMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHsNCiAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMDJDRTE7DQogICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjayAhaW1wb3J0YW50Ow0KICAgICAgICBvdXRsaW5lOiAxcHggZGFzaGVkICNGRkZGRkY7DQogICAgfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogMTE5OXB4KSB7DQogICAgLyogbGluZSAzMzEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyY2UxOw0KICAgICAgICAvKmJvcmRlci1ib3R0b206IDRweCBzb2xpZCAjMkY1RkVGOw0KICAgIHBhZGRpbmctYm90dG9tOiA2cHg7Ki8NCiAgICB9DQp9DQoNCi8qIGxpbmUgMzQyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5tZW51LWJhciAuc2hvcHBpbmdfbGluayB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KICAgIC8qIGxpbmUgMzQ1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubWVudS1iYXIgLnNob3BwaW5nX2xpbmsgLmNhcnRfYW1vdW50IHsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsNCiAgICAgICAgaGVpZ2h0OiAxN3B4Ow0KICAgICAgICB3aWR0aDogMTdweDsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBib3R0b206IDZweDsNCiAgICAgICAgcmlnaHQ6IC02cHg7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWY7DQogICAgICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyOw0KICAgICAgICBsaW5lLWhlaWdodDogMTdweDsNCiAgICAgICAgZm9udC1zaXplOiA5cHg7DQogICAgICAgIHBhZGRpbmctbGVmdDogMS45cHg7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgIH0NCiAgICAgICAgLyogbGluZSAzNTksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubWVudS1iYXIgLnNob3BwaW5nX2xpbmsgLmNhcnRfYW1vdW50OmhvdmVyIHsNCiAgICAgICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICB9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiAxMTk5cHgpIHsNCiAgICAvKiBsaW5lIDM2NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSAubmF2ID4gLmRpdmlkZXItdmVydGljYWwgew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgew0KICAgIC8qIGxpbmUgMzcyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1jb2xsYXBzZSAubmF2ID4gLmRpdmlkZXItdmVydGljYWwgew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7DQogICAgLyogbGluZSAzNzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhciA+IC5jb250YWluZXIgPiAucm93ID4gZGl2IHsNCiAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgfQ0KICAgIC8qIGxpbmUgMzgxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWhlYWRlciB7DQogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgew0KICAgIC8qIGxpbmUgMzg2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyID4gLmNvbnRhaW5lciA+IC5yb3cgPiBkaXYgew0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICB9DQogICAgLyogbGluZSAzOTAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItaGVhZGVyIHsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIH0NCn0NCg0KLyogbGluZSAzOTcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnBhbmVsIHsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMHB4IDBweCB0cmFuc3BhcmVudDsNCiAgICBib3gtc2hhZG93OiAwIDBweCAwcHggdHJhbnNwYXJlbnQ7DQp9DQoNCi8qIGxpbmUgNDA0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5wYW5lbC1ncm91cCB7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCn0NCiAgICAvKiBsaW5lIDQwNywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnBhbmVsLWdyb3VwLmJvcmRlci1ib3R0b20gew0KICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDg0cHg7DQogICAgfQ0KICAgIC8qIGxpbmUgNDEyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAucGFuZWwtZ3JvdXAgLnBhbmVsIHsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMHB4Ow0KICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDQxNywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwgKyAucGFuZWwgew0KICAgICAgICAgICAgbWFyZ2luLXRvcDogNXB4Ow0KICAgICAgICB9DQogICAgLyogbGluZSA0MjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyB7DQogICAgICAgIGJvcmRlci1ib3R0b206IDA7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDQyNiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyAucGFuZWwtdGl0bGUgYSB7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgIH0NCiAgICAgICAgICAgIC8qIGxpbmUgNDI5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyAucGFuZWwtdGl0bGUgYTpob3ZlciB7DQogICAgICAgICAgICAgICAgY29sb3I6ICMyZjVmZWY7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDQzMywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgICAgICAucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcgLnBhbmVsLXRpdGxlIGE6YmVmb3JlIHsNCiAgICAgICAgICAgICAgICBjb250ZW50OiAnICc7DQogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICAgICAgd2lkdGg6IDIycHg7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMnB4Ow0KICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MnB4IC01cHg7DQogICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMC41cHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDQ0NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgICAgICAucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcgLnBhbmVsLXRpdGxlIGEuY29sbGFwc2VkOmJlZm9yZSB7DQogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTVweCAtMTI2cHg7DQogICAgICAgICAgICB9DQogICAgICAgIC8qIGxpbmUgNDUyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHksDQogICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHsNCiAgICAgICAgICAgIGJvcmRlci10b3A6IG5vbmU7DQogICAgICAgIH0NCiAgICAvKiBsaW5lIDQ1NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXIgew0KICAgICAgICBib3JkZXItdG9wOiAwOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA0NjAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSAucGFuZWwtYm9keSB7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lOw0KICAgICAgICB9DQogICAgLyogbGluZSA0NjUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wYW5lbC1ncm91cCAucGFuZWwtZGVmYXVsdCB7DQogICAgICAgIGJvcmRlci1jb2xvcjogbm9uZTsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgNiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC9taXhpbnMvcGFuZWxzLnNjc3MgKi8NCiAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgew0KICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICAgICAgLyogbGluZSAxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC9taXhpbnMvcGFuZWxzLnNjc3MgKi8NCiAgICAgICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtZGVmYXVsdCA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkgew0KICAgICAgICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6IG5vbmU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDE0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL21peGlucy9wYW5lbHMuc2NzcyAqLw0KICAgICAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHsNCiAgICAgICAgICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgLyogbGluZSAyMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC9taXhpbnMvcGFuZWxzLnNjc3MgKi8NCiAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG5vbmU7DQogICAgICAgIH0NCg0KLyogbGluZSA0NzMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KYm9keSB7DQogICAgcGFkZGluZy10b3A6IDBweDsNCiAgICAvKiBCZWxvdyBjaGFuZ2VzIGluIGJvZHkgdGFnIHRvIHN1cHBvcnQgRGVmYXVsdFBvcnRhbFRlbXBsYXRlIGluIG1ha2VyKi8NCiAgICBtYXJnaW46IDA7DQogICAgaGVpZ2h0OiAxMDAlOw0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsNCiAgICAvKiBsaW5lIDQ3MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgYm9keSB7DQogICAgICAgIHBhZGRpbmctdG9wOiAwcHg7DQogICAgfQ0KfQ0KDQovKiBsaW5lIDQ4MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubGF5ZXJfZG93biB7DQogICAgaGVpZ2h0OiA1MHB4Ow0KICAgIGJhY2tncm91bmQ6IHVybCgibGF5ZXJfZG93bi5wbmciKSBuby1yZXBlYXQgYm90dG9tIGNlbnRlcjsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgYm90dG9tOiAwOw0KICAgIHotaW5kZXg6IDkwMDsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KLyogbGluZSA0OTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmxheWVyX3VwIHsNCiAgICBoZWlnaHQ6IDQwcHg7DQogICAgYmFja2dyb3VuZDogdXJsKCJsYXllcl91cC5wbmciKSBuby1yZXBlYXQgYm90dG9tIGNlbnRlcjsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgei1pbmRleDogMjA7DQp9DQoNCi8qIGxpbmUgNDk4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLW1hcmdpbiB7DQogICAgbWFyZ2luOiAyMXB4IDA7DQp9DQoNCi8qIGxpbmUgNTEzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWlubGluZS1zZWFyY2ggew0KICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQp9DQogICAgLyogbGluZSA1MTgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiB7DQogICAgICAgIG1hcmdpbi10b3A6IDEwMHB4Ow0KICAgIH0NCiAgICAgICAgLyogbGluZSA1MjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuc2VjdGlvbi1pbmxpbmUtc2VhcmNoIC5yb3cgPiBkaXYgaDEgew0KICAgICAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDUyMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24taW5saW5lLXNlYXJjaCAucm93ID4gZGl2IGgxIHsNCiAgICAgICAgZm9udC1zaXplOiAxNnZ3Ow0KICAgIH0NCn0NCi8qIGxpbmUgNTMxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAgLmlucHV0LWdyb3VwIHsNCiAgICBtYXJnaW4tcmlnaHQ6IDIxcHg7DQp9DQogICAgLyogbGluZSA1MzQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbiB7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsNCiAgICB9DQogICAgLyogbGluZSA1MzksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICBoZWlnaHQ6IDYwcHg7DQogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOw0KICAgICAgICBib3gtc2hhZG93OiBub25lOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA1NDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuc2VjdGlvbi1pbmxpbmUtc2VhcmNoIC5yb3cgPiBkaXYgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZvY3VzIHsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICNjY2M7DQogICAgICAgIH0NCg0KLyogbGluZSA1NTcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLndyYXBwZXIgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIG1hcmdpbjogMCBhdXRvOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAtbW96LXRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZS1vdXQ7DQogICAgLW8tdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlLW91dDsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZS1vdXQ7DQogICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlLW91dDsNCn0NCg0KICAgIC8qIGxpbmUgNTY3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAud3JhcHBlciAuY29udGFpbmVkIHsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICBoZWlnaHQ6IDQwMHB4Ow0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlOw0KICAgIH0NCg0KICAgICAgICAvKiBsaW5lIDU3MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC53cmFwcGVyIC5jb250YWluZWQgPiBzdmcgew0KICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEwMHB4Ow0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgIH0NCg0KLyogbGluZSA1NzksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmNvbnRhaW5lZCAucm93IHsNCiAgICBtYXJnaW4tdG9wOiA4MHB4Ow0KfQ0KDQovKiBsaW5lIDU4MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQpmb290ZXIgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBjb2xvcjogIzIyMjIxRTsNCn0NCiAgICAvKiBsaW5lIDU4NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgZm9vdGVyIC5mb290ZXItdG9wIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1pbi1oZWlnaHQ6IDEzMHB4Ow0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjMyMjIyOw0KICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA1OTQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICBmb290ZXIgLmZvb3Rlci10b3AgaDMsIGZvb3RlciAuZm9vdGVyLXRvcCBoNCB7DQogICAgICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgfQ0KICAgICAgICAvKiBsaW5lIDU5OCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIGZvb3RlciAuZm9vdGVyLXRvcCAubGlzdC1zb2NpYWwtbGlua3Mgew0KICAgICAgICAgICAgbWFyZ2luLXRvcDogMjVweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEyLjVweDsNCiAgICAgICAgfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5OTFweCkgew0KICAgIC8qIGxpbmUgNjA1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICBmb290ZXIgLmZvb3Rlci10b3AgaDMsDQogICAgZm9vdGVyIC5mb290ZXItdG9wIC5saXN0LXNvY2lhbC1saW5rcyB7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB9DQp9DQovKiBsaW5lIDYxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQpmb290ZXIgLmZvb3Rlci1ib3R0b20gew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIG1pbi1oZWlnaHQ6IDY4cHg7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0QyRDJDRTsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KfQ0KICAgIC8qIGxpbmUgNjE5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICBmb290ZXIgLmZvb3Rlci1ib3R0b20gcCB7DQogICAgICAgIG1hcmdpbjogMDsNCiAgICB9DQogICAgLyogbGluZSA2MjMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIGZvb3RlciAuZm9vdGVyLWJvdHRvbSBoNCB7DQogICAgICAgIG1hcmdpbi10b3A6IDA7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgIH0NCiAgICAvKiBsaW5lIDYyOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgZm9vdGVyIC5mb290ZXItYm90dG9tIHVsIHsNCiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOw0KICAgICAgICBtYXJnaW46IDA7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDYzOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIGZvb3RlciAuZm9vdGVyLWJvdHRvbSB1bCBsaSBhLA0KICAgICAgICBmb290ZXIgLmZvb3Rlci1ib3R0b20gdWwgbGkgYTpob3ZlciwNCiAgICAgICAgZm9vdGVyIC5mb290ZXItYm90dG9tIHVsIGxpIGE6Zm9jdXMsDQogICAgICAgIGZvb3RlciAuZm9vdGVyLWJvdHRvbSB1bCBsaSBhOmFjdGl2ZSwNCiAgICAgICAgZm9vdGVyIC5mb290ZXItYm90dG9tIHVsIGxpIGEuYWN0aXZlIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICAgICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICB9DQoNCi8qIGxpbmUgNjQ4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5saXN0LXNvY2lhbC1saW5rcyB7DQogICAgbGlzdC1zdHlsZS10eXBlOiBub25lOw0KICAgIHBhZGRpbmctbGVmdDogMDsNCn0NCiAgICAvKiBsaW5lIDY1MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmxpc3Qtc29jaWFsLWxpbmtzIGxpIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBtYXJnaW46IDAgMTBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgNjYxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLmxpc3Qtc29jaWFsLWxpbmtzIGxpIGEsDQogICAgICAgIC5saXN0LXNvY2lhbC1saW5rcyBsaSBhOmhvdmVyLA0KICAgICAgICAubGlzdC1zb2NpYWwtbGlua3MgbGkgYTpmb2N1cywNCiAgICAgICAgLmxpc3Qtc29jaWFsLWxpbmtzIGxpIGE6YWN0aXZlLA0KICAgICAgICAubGlzdC1zb2NpYWwtbGlua3MgbGkgYS5hY3RpdmUgew0KICAgICAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTkzcHgpIHsNCiAgICAvKiBsaW5lIDY2OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tbGFuZGluZyBoMSB7DQogICAgICAgIGZvbnQtc2l6ZTogNjVweDsNCiAgICB9DQogICAgLyogbGluZSA2NzMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWxhbmRpbmcgaDIgew0KICAgICAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOw0KICAgICAgICBtYXJnaW4tbGVmdDogLTNweDsNCiAgICB9DQp9DQoNCi8qIGxpbmUgNjc5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi51c2VyLWljb24gew0KICAgIHdpZHRoOiAxNnB4Ow0KICAgIGhlaWdodDogMTZweDsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgbWFyZ2luLXJpZ2h0OiA3cHg7DQp9DQoNCi8qIGxpbmUgNjg3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5hcnRpY2xlLXRpdGxlLWNvbnRhaW5lciB7DQogICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNiY2JjYmM7DQogICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNiY2JjYmM7DQogICAgcGFkZGluZy1sZWZ0OiAxNXB4Ow0KICAgIHBhZGRpbmctdG9wOiAyOHB4Ow0KICAgIHBhZGRpbmctYm90dG9tOiAyOHB4Ow0KfQ0KDQovKiBsaW5lIDY5NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouYXJ0aWNsZS10aXRsZSB7DQogICAgbWFyZ2luLWxlZnQ6IC0zNXB4Ow0KfQ0KICAgIC8qIGxpbmUgNjk4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuYXJ0aWNsZS10aXRsZSA+IHNwYW4gew0KICAgICAgICBtYXJnaW4tbGVmdDogM3B4Ow0KICAgIH0NCiAgICAgICAgLyogbGluZSA3MDEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuYXJ0aWNsZS10aXRsZSA+IHNwYW4gLmFydGljbGUtYXV0aG9yIHsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgICAgICAgICAgY29sb3I6ICMyZjVmZWY7DQogICAgICAgIH0NCg0KLyogbGluZSA3MDgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmFydGljbGUtY29udGVudCB7DQogICAgbWFyZ2luLXRvcDogMTVweDsNCn0NCiAgICAvKiBsaW5lIDcxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmFydGljbGUtY29udGVudCA+IHAgew0KICAgICAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTkzcHgpIHsNCiAgICAvKiBsaW5lIDcxNywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmFydGljbGUtdGl0bGUgew0KICAgICAgICBtYXJnaW4tbGVmdDogMDsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIH0NCiAgICAvKiBsaW5lIDcyMiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmFydGljbGUtYXV0aG9yIHsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIH0NCn0NCg0KLyogbGluZSA3MjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC5oZWFkZXItc2VhcmNoIHsNCiAgICBwYWRkaW5nLXRvcDogNDBweDsNCiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDsNCiAgICBtYXJnaW4tYm90dG9tOiA0MHB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7DQp9DQogICAgLyogbGluZSA3MzQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLXNlYXJjaCAuaGVhZGVyLXNlYXJjaCBpbWcgew0KICAgICAgICBtYXgtd2lkdGg6IDM1MHB4Ow0KICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDczOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tc2VhcmNoIC5oZWFkZXItc2VhcmNoIGgxIHsNCiAgICAgICAgZm9udC1zaXplOiAxM3Z3Ow0KICAgIH0NCn0NCg0KLyogbGluZSA3NDUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC50aXRsZS1zZWFyY2ggew0KICAgIGZvbnQtc2l6ZTogMjZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KLyogbGluZSA3NTAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIGlucHV0IHsNCiAgICBib3JkZXItc3R5bGU6IG5vbmU7DQogICAgcGFkZGluZy1sZWZ0OiAxMHB4Ow0KICAgIGhlaWdodDogNjBweDsNCn0NCg0KLyogbGluZSA3NTgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC5tZWRpYSAubWVkaWEtbGVmdCA+IGltZyB7DQogICAgbWF4LXdpZHRoOiAyNDBweDsNCn0NCg0KLyogbGluZSA3NjMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC5tZWRpYSAubWVkaWEtYm9keSB7DQogICAgcGFkZGluZy1sZWZ0OiAyMHB4Ow0KfQ0KICAgIC8qIGxpbmUgNzY2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1zZWFyY2ggLm1lZGlhIC5tZWRpYS1ib2R5ID4gYSB7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgfQ0KICAgIC8qIGxpbmUgNzcxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1zZWFyY2ggLm1lZGlhIC5tZWRpYS1ib2R5IC5tZWRpYS1oZWFkaW5nIHsNCiAgICAgICAgbWFyZ2luLXRvcDogNXB4Ow0KICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgIH0NCg0KLyogbGluZSA3ODAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmNhcmRzLWNvbnRhaW5lciB7DQogICAgbWFyZ2luLXRvcDogODRweDsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5OTFweCkgew0KICAgIC8qIGxpbmUgNzgwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuY2FyZHMtY29udGFpbmVyIHsNCiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICB9DQp9DQoNCi8qIGxpbmUgNzk1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5jYXJvdXNlbC1jdXN0b20gLmNhcm91c2VsLWlubmVyID4gLml0ZW0gew0KICAgIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgICBtYXJnaW4tbGVmdDogYXV0bzsNCn0NCiAgICAvKiBsaW5lIDc5OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmNhcm91c2VsLWN1c3RvbSAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSAuY2Fyb3VzZWwtY2FwdGlvbiB7DQogICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgIHRvcDogNSU7DQogICAgICAgIGxlZnQ6IDUlOw0KICAgICAgICByaWdodDogNSU7DQogICAgfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgew0KICAgIC8qIGxpbmUgNzk5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuY2Fyb3VzZWwtY3VzdG9tIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtIC5jYXJvdXNlbC1jYXB0aW9uIHsNCiAgICAgICAgbGVmdDogNSU7DQogICAgICAgIHJpZ2h0OiA1JTsNCiAgICB9DQp9DQoNCi8qIGxpbmUgODE1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5jYXJvdXNlbC1jdXN0b20gLmNhcm91c2VsLWluZGljYXRvcnMgbGkgew0KICAgIGJvcmRlci1jb2xvcjogIzIzMjIyMjsNCn0NCg0KLyogbGluZSA4MjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnRhYmxlLnRhYmxlLWZvcm1zIHRkIHsNCiAgICBwYWRkaW5nOiAxNXB4IDhweDsNCn0NCg0KLyogbGluZSA4MzAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnRhYmxlLnRhYmxlLWZvcm1zIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHsNCiAgICBib3JkZXItdG9wOiBub25lOw0KfQ0KDQovKiBsaW5lIDgzOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoucG9sbCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsNCiAgICBib3JkZXItdG9wOiA3cHggc29saWQgIzBiODBkMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgcGFkZGluZy1sZWZ0OiAxNXB4Ow0KICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQp9DQogICAgLyogbGluZSA4NDYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wb2xsIC5wb2xsLWhlYWRlciB7DQogICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7DQogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgODU2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtaGVhZGVyIGg0IHsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB9DQogICAgLyogbGluZSA4NjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wb2xsIC5wb2xsLWNvbnRlbnQgew0KICAgICAgICBwYWRkaW5nLXRvcDogMjVweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgODY1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtY29udGVudCBwIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgfQ0KICAgICAgICAvKiBsaW5lIDg2OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC5wb2xsIC5wb2xsLWNvbnRlbnQgZm9ybSB7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIC8qIGxpbmUgODc0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtY29udGVudCAucG9sbC1idXR0b25zIHsNCiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAyMHB4Ow0KICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxMXB4Ow0KICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDg3OCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgICAgICAucG9sbCAucG9sbC1jb250ZW50IC5wb2xsLWJ1dHRvbnMgLmJ0biB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDE0cHg7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLyogbGluZSA4ODMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAgICAgLnBvbGwgLnBvbGwtY29udGVudCAucG9sbC1idXR0b25zIC5idG4tZGVmYXVsdCB7DQogICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8qIGxpbmUgODg3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgICAgICAgICAucG9sbCAucG9sbC1jb250ZW50IC5wb2xsLWJ1dHRvbnMgLmJ0bi1kZWZhdWx0OmhvdmVyIHsNCiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAgICAgICAgICAgICB9DQogICAgLyogbGluZSA4OTUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wb2xsIC5wb2xsLXRhZ3Mgew0KICAgICAgICBwYWRkaW5nLXRvcDogMTBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgODk4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtdGFncyBoNCB7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIC8qIGxpbmUgOTAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtdGFncyAudGFnIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMWUxZTE7DQogICAgICAgICAgICBjb2xvcjogIzIzMjIyMjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxNHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA1cHggMHB4Ow0KICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICAgICAgfQ0KDQovKiBsaW5lIDkxNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2LXNpZGViYXIgew0KICAgIHBhZGRpbmctbGVmdDogMjBweDsNCiAgICBtYXJnaW4tdG9wOiAyMHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQp9DQogICAgLyogbGluZSA5MjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXYtc2lkZWJhciAubmF2ID4gbGkgPiBhIHsNCiAgICAgICAgcGFkZGluZzogNHB4IDIwcHg7DQogICAgICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjZWVlZWVlOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA5MjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiA+IGxpID4gYTpob3ZlciwNCiAgICAgICAgLm5hdi1zaWRlYmFyIC5uYXYgPiBsaSA+IGE6Zm9jdXMgew0KICAgICAgICAgICAgY29sb3I6ICMyMzIyMjI7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM1NTU1NTU7DQogICAgICAgIH0NCiAgICAgICAgLyogbGluZSA5MzUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiA+IGxpID4gYTpiZWZvcmUgew0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgdG9wOiAxcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJzsNCiAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMTsNCiAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICJcZTI1MCI7DQogICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDdweDsNCiAgICAgICAgfQ0KICAgIC8qIGxpbmUgOTUyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiA+IC5hY3RpdmUgPiBhIHsNCiAgICAgICAgY29sb3I6ICMyMzIyMjI7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM1NTU1NTU7DQogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA5NTksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiA+IC5hY3RpdmUgPiBhOmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAiXGUyNTIiOw0KICAgICAgICB9DQogICAgLyogbGluZSA5NjYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXYtc2lkZWJhciAubmF2ID4gLmFjdGl2ZTpob3ZlciA+IGEsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgPiAuYWN0aXZlZm9jdXMgPiBhIHsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgfQ0KICAgIC8qIGxpbmUgOTcyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiA+IC5hY3RpdmUgPiB1bC5uYXYgew0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICB9DQogICAgLyogbGluZSA5NzksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXYtc2lkZWJhciAubmF2IHVsLm5hdiB7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgfQ0KICAgIC8qIGxpbmUgOTg2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2ID4gbGkgPiBhIHsNCiAgICAgICAgcGFkZGluZy10b3A6IDFweDsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDFweDsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMHB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDk5NiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiA+IC5hY3RpdmUsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiA+IC5hY3RpdmU6aG92ZXIsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiA+IC5hY3RpdmU6Zm9jdXMgew0KICAgICAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICB9DQogICAgLyogbGluZSAxMDAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2IC5uYXYgPiBsaSA+IGEgew0KICAgICAgICBwYWRkaW5nLXRvcDogMXB4Ow0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDEwMDgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2IC5uYXYgPiBsaSA+IGE6YmVmb3JlIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICIiOw0KICAgICAgICB9DQogICAgLyogbGluZSAxMDE3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2IC5uYXYgPiAuYWN0aXZlLA0KICAgIC5uYXYtc2lkZWJhciAubmF2IC5uYXYgLm5hdiA+IC5hY3RpdmU6aG92ZXIsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiAubmF2ID4gLmFjdGl2ZTpmb2N1cyB7DQogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIH0NCg0KLyogbGluZSAxMDI4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiNuYXZiYXIgLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IDhweDsNCn0NCg0KLyogbGluZSAxMDMyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiNuYXZiYXIgLmRyb3Bkb3duLXNlYXJjaCB7DQogICAgcGFkZGluZy10b3A6IDA7DQogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyOiAwOw0KICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgbWFyZ2luOiA5cHg7DQp9DQogICAgLyogbGluZSAxMDM5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAjbmF2YmFyIC5kcm9wZG93bi1zZWFyY2ggI3Egew0KICAgICAgICBtaW4td2lkdGg6IDIwMHB4Ow0KICAgIH0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgew0KICAgIC8qIGxpbmUgMTA0NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgI25hdmJhciAuZHJvcGRvd24tc2VhcmNoIC5pbnB1dC1ncm91cC1idG4gew0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KICAgIH0NCiAgICAvKiBsaW5lIDEwNDcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICNuYXZiYXIgLmRyb3Bkb3duLXNlYXJjaCAjc2VhcmNoLWZpbHRlciB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7DQogICAgfQ0KICAgIC8qIGxpbmUgMTA1MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgI25hdmJhciAuZHJvcGRvd24tc2VhcmNoLmRyb3Bkb3duLW1lbnUgPiBsaTpob3ZlciwgI25hdmJhciAuZHJvcGRvd24tc2VhcmNoIC5kcm9wZG93bi1tZW51ID4gbGk6aG92ZXIgew0KICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIH0NCn0NCg0KLyogbGluZSAxMDYwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi50YWJzLWhlYWRlciB7DQogICAgcGFkZGluZy1ib3R0b206IDkuNXB4Ow0KICAgIG1hcmdpbjogNDJweCAwIDIxcHg7DQp9DQoNCi8qIGxpbmUgMTA3MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouaGVscC1ibG9jay5lcnJvciwNCmxhYmVsLmNvbnRyb2wtbGFiZWwucmVxdWlyZWQ6YmVmb3JlLA0KLmNybUVudGl0eUZvcm1WaWV3IC5jZWxsIGRpdi5pbmZvLnJlcXVpcmVkIGxhYmVsOmFmdGVyLA0KLmNybUVudGl0eUZvcm1WaWV3IC5jZWxsIGRpdi5pbmZvIGRpdi52YWxpZGF0b3JzLA0KLmNybUVudGl0eUZvcm1WaWV3IC52YWxpZGF0b3ItdGV4dCwNCi5jcm1FbnRpdHlGb3JtVmlldyAucmFuay1vcmRlci1jZWxsIC52YWxpZGF0b3ItdGV4dCwNCi5jcm1FbnRpdHlGb3JtVmlldyAuY29uc3RhbnQtc3VtLWNlbGwgLnZhbGlkYXRvci10ZXh0LA0KLmNybUVudGl0eUZvcm1WaWV3IC5zdGFjay1yYW5rLWNlbGwgLnZhbGlkYXRvci10ZXh0IHsNCiAgICBjb2xvcjogI2E5NDQ0MjsNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHsNCiAgICAvKiBsaW5lIDEwNzgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODg4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDEwODIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIH0NCn0NCg0KLyogbGluZSAxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQoucHItY29sb3Igew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KfQ0KDQovKiBsaW5lIDE2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5ibHVlX2JvcmRlciB7DQogICAgcGFkZGluZy1ib3R0b206IDEwcHg7DQogICAgYm9yZGVyLWJvdHRvbTogN3B4IHNvbGlkICMwYjgwZDA7DQp9DQoNCi8qIGxpbmUgMjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnBhZ2Vfc2VjdGlvbiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQogICAgY29sb3I6ICMwMDA7DQp9DQogICAgLyogbGluZSAyNiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnBhZ2Vfc2VjdGlvbiAucm93IHsNCiAgICAgICAgcGFkZGluZy10b3A6IDQwcHg7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgMzEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgICAgICAucGFnZV9zZWN0aW9uIC5yb3cuc2lkZWJhci1ob21lIHsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwOw0KICAgICAgICB9DQogICAgLyogbGluZSAzNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnBhZ2Vfc2VjdGlvbiBoMSB7DQogICAgICAgIGZvbnQtc2l6ZTogMzJweDsNCiAgICB9DQogICAgLyogbGluZSAzOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnBhZ2Vfc2VjdGlvbiBoMiB7DQogICAgICAgIGNvbG9yOiAjNjY2NjY2Ow0KICAgICAgICBmb250LXNpemU6IDQwcHg7DQogICAgfQ0KICAgIC8qIGxpbmUgNDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5wYWdlX3NlY3Rpb24gaDMgew0KICAgICAgICBmb250LXNpemU6IDY2cHg7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgTGlnaHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIH0NCiAgICAvKiBsaW5lIDQ5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAucGFnZV9zZWN0aW9uIHAgew0KICAgICAgICBwYWRkaW5nLXRvcDogNXB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDU0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAucGFnZV9zZWN0aW9uIC5idG4gew0KICAgICAgICBtYXJnaW4tdG9wOiA1MHB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDU4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAucGFnZV9zZWN0aW9uIC5mb3JtLXNlYXJjaCAuYnRuIHsNCiAgICAgICAgcGFkZGluZzogNHB4IDEycHg7DQogICAgICAgIG1hcmdpbi10b3A6IDA7DQogICAgfQ0KICAgIC8qIGxpbmUgNjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5wYWdlX3NlY3Rpb24gLnNlY3Rpb24tbGFuZGluZy1oZWFkaW5nIHAsDQogICAgLnBhZ2Vfc2VjdGlvbiAuc2VjdGlvbi1sYW5kaW5nLXN1Yi1oZWFkaW5nIHAgew0KICAgICAgICBib3JkZXItdG9wOiAwOw0KICAgIH0NCg0KLyogbGluZSA3MSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZm9ybS1zZWFyY2ggLmJ0biB7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCn0NCg0KLyogbGluZSA3NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZm9ybS1zZWFyY2ggLmJ0bi1kZWZhdWx0OmhvdmVyIHsNCiAgICBib3JkZXItY29sb3I6ICNjY2M7DQp9DQoNCi8qIGxpbmUgNzgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmZvcm0tc2VhcmNoIC5kcm9wZG93bi1zdWJtZW51IHsNCiAgICByaWdodDogLTJweDsNCn0NCg0KLyogbGluZSA4MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZm9ybS1zZWFyY2ggLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IDBweDsNCn0NCg0KLyogbGluZSA4NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZHJvcGRvd24tc2VhcmNoLmRyb3Bkb3duLW1lbnUgPiBsaTpob3ZlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQp9DQoNCi8qIGxpbmUgOTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KI25hdmJhciAuZm9ybS1zZWFyY2ggLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IDBweDsNCn0NCg0KLyogbGluZSA5NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1kaWFnb25hbC1sZWZ0IHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICAtbXMtdHJhbnNmb3JtOiBza2V3KDBkZWcsIC0xLjNkZWcpOw0KICAgIHRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIG1hcmdpbi10b3A6IC02MHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IC0yMHB4Ow0KfQ0KICAgIC8qIGxpbmUgMTAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kaWFnb25hbC1sZWZ0IC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQtY29udGVudCB7DQogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgICAgIC1tcy10cmFuc2Zvcm06IHNrZXcoMGRlZywgMS4zZGVnKTsNCiAgICAgICAgdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQogICAgICAgIG1hcmdpbi10b3A6IC03MHB4Ow0KICAgIH0NCiAgICAgICAgLyogbGluZSAxMTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuc2VjdGlvbi1kaWFnb25hbC1sZWZ0IC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQtY29udGVudDpiZWZvcmUgew0KICAgICAgICAgICAgY29udGVudDogIiI7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBvcGFjaXR5OiAuMjsNCiAgICAgICAgICAgIHotaW5kZXg6IC0xOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICAgICAgfQ0KDQovKiBsaW5lIDEyNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1kaWFnb25hbC1yaWdodCB7DQogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNrZXcoMGRlZywgMS4zZGVnKTsNCiAgICAtbXMtdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBtYXJnaW4tdG9wOiA2MHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IC0yMHB4Ow0KfQ0KICAgIC8qIGxpbmUgMTMzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodC5ob21lLXNlY3Rpb24gew0KICAgICAgICBtYXJnaW4tdG9wOiAtNjBweDsNCiAgICB9DQogICAgLyogbGluZSAxMzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWRpYWdvbmFsLXJpZ2h0IC5zZWN0aW9uLWRpYWdvbmFsLXJpZ2h0LWNvbnRlbnQgew0KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICAgICAgLW1zLXRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICAgICAgdHJhbnNmb3JtOiBza2V3KDBkZWcsIC0xLjNkZWcpOw0KICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KICAgICAgICBtYXJnaW4tdG9wOiAtNzBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgMTQ1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnNlY3Rpb24tZGlhZ29uYWwtcmlnaHQgLnNlY3Rpb24tZGlhZ29uYWwtcmlnaHQtY29udGVudDpiZWZvcmUgew0KICAgICAgICAgICAgY29udGVudDogIiI7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBvcGFjaXR5OiAuODsNCiAgICAgICAgICAgIHotaW5kZXg6IC0xOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZjsNCiAgICAgICAgfQ0KDQogICAgLyogbGluZSAxNjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQgLnJvdywNCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodCAucm93IHsNCiAgICAgICAgcGFkZGluZy10b3A6IDEyNXB4Ow0KICAgIH0NCg0KICAgIC8qIGxpbmUgMTY1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kaWFnb25hbC1sZWZ0IC5jb2wtbWQtNSwNCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodCAuY29sLW1kLTUgew0KICAgICAgICBmbG9hdDogbm9uZTsNCiAgICAgICAgbWFyZ2luOiAwIGF1dG87DQogICAgfQ0KDQogICAgLyogbGluZSAxNzAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQgcCwNCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodCBwIHsNCiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsNCiAgICB9DQoNCi8qIGxpbmUgMTc2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWxhbmRpbmcgew0KICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQpOw0KICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQp9DQogICAgLyogbGluZSAxODEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWxhbmRpbmcgLnJvdyA+IGRpdiB7DQogICAgICAgIG1hcmdpbi10b3A6IDgwcHg7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDE4NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgICAgIC5zZWN0aW9uLWxhbmRpbmcgLnJvdyA+IGRpdiAuc2VjdGlvbi1sYW5kaW5nLWhlYWRpbmcgew0KICAgICAgICAgICAgZm9udC1zaXplOiA0cmVtOw0KICAgICAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDE4NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tbGFuZGluZyAucm93ID4gZGl2IC5zZWN0aW9uLWxhbmRpbmctaGVhZGluZyB7DQogICAgICAgIGZvbnQtc2l6ZTogMTZ2dzsNCiAgICB9DQp9DQovKiBsaW5lIDE5NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1sYW5kaW5nIC5yb3cgPiBkaXYgLnNlY3Rpb24tbGFuZGluZy1zdWItaGVhZGluZyB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiA1MHB4Ow0KICAgIGZvbnQtc2l6ZTogMS41cmVtOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGZvbnQtd2VpZ2h0OiBTZW1pYm9sZDsNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDE5NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tbGFuZGluZyAucm93ID4gZGl2IC5zZWN0aW9uLWxhbmRpbmctc3ViLWhlYWRpbmcgew0KICAgICAgICBmb250LXNpemU6IDR2dzsNCiAgICB9DQp9DQoNCi8qIGxpbmUgMjEwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLXN1Yi1sYW5kaW5nIHsNCiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KfQ0KDQovKiBsaW5lIDIxNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1kZWZhdWx0IHsNCiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgew0KICAgIC8qIGxpbmUgMjIwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kZWZhdWx0OmJlZm9yZSB7DQogICAgICAgIGNvbnRlbnQ6ICIgIjsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICB6LWluZGV4OiAwOw0KICAgICAgICB0b3A6IDA7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMCwgMCwgMCwgMC41OSkgNDElLCByZ2JhKDAsIDAsIDAsIDAuNjIpIDQzJSwgYmxhY2sgMTAwJSk7DQogICAgICAgIC8qIEZGMy42LTE1ICovDQogICAgICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMCwgMCwgMCwgMC41OSkgNDElLCByZ2JhKDAsIDAsIDAsIDAuNjIpIDQzJSwgYmxhY2sgMTAwJSk7DQogICAgICAgIC8qIENocm9tZTEwLTI1LFNhZmFyaTUuMS02ICovDQogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNTkpIDQxJSwgcmdiYSgwLCAwLCAwLCAwLjYyKSA0MyUsIGJsYWNrIDEwMCUpOw0KICAgICAgICAvKiBXM0MsIElFMTArLCBGRjE2KywgQ2hyb21lMjYrLCBPcGVyYTEyKywgU2FmYXJpNysgKi8NCiAgICAgICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoIHN0YXJ0Q29sb3JzdHI9JyMwMDAwMDAwMCcsIGVuZENvbG9yc3RyPScjMDAwMDAwJyxHcmFkaWVudFR5cGU9MCApOw0KICAgICAgICAvKiBJRTYtOSAqLw0KICAgIH0NCn0NCi8qIGxpbmUgMjM1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWRlZmF1bHQgLnJvdyB7DQogICAgcGFkZGluZy1ib3R0b206IDE1MHB4Ow0KfQ0KDQovKiBsaW5lIDI0MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1rbm93bGVkZ2Ugew0KICAgIG1hcmdpbi1ib3R0b206IDQwcHg7DQp9DQoNCi8qIGxpbmUgMjQ3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5jb250ZW50LWhvbWUgLmJ0biB7DQogICAgbWFyZ2luLXRvcDogMDsNCn0NCg0KLyogbGluZSAyNTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmNvbnRlbnQtaG9tZSAucGFuZWwgew0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlcjogMDsNCiAgICBib3gtc2hhZG93OiBub25lOw0KfQ0KICAgIC8qIGxpbmUgMjU2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuY29udGVudC1ob21lIC5wYW5lbCBwIHsNCiAgICAgICAgYm9yZGVyOiAwOw0KICAgIH0NCg0KLyogbGluZSAyNjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmNvbnRlbnQtaG9tZSAucGFuZWwtaGVhZGluZyB7DQogICAgZGlzcGxheTogbm9uZTsNCn0NCg0KLyogbGluZSAyNjUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmNvbnRlbnQtaG9tZSAubGlzdC1ncm91cC1pdGVtIHsNCiAgICBwYWRkaW5nOiAyMHB4IDA7DQogICAgZm9udC1zaXplOiAyMHB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlcjogMDsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsNCn0NCiAgICAvKiBsaW5lIDI3MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLmNvbnRlbnQtaG9tZSAubGlzdC1ncm91cC1pdGVtIGltZyB7DQogICAgICAgIG1hcmdpbi1yaWdodDogMjVweDsNCiAgICB9DQoNCiAgICAvKiBsaW5lIDI3OCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLmNvbnRlbnQtaG9tZSBhLmxpc3QtZ3JvdXAtaXRlbSwNCiAgICAuY29udGVudC1ob21lIC5saXN0LWdyb3VwLWl0ZW0gYS50aXRsZSB7DQogICAgICAgIGNvbG9yOiAjMjMyMjIyOw0KICAgIH0NCiAgICAgICAgLyogbGluZSAyODIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuY29udGVudC1ob21lIGEubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KICAgICAgICAuY29udGVudC1ob21lIGEubGlzdC1ncm91cC1pdGVtOmZvY3VzLA0KICAgICAgICAuY29udGVudC1ob21lIC5saXN0LWdyb3VwLWl0ZW0gYS50aXRsZTpob3ZlciwNCiAgICAgICAgLmNvbnRlbnQtaG9tZSAubGlzdC1ncm91cC1pdGVtIGEudGl0bGU6Zm9jdXMgew0KICAgICAgICAgICAgY29sb3I6ICMyMzIyMjI7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgICAgICB9DQoNCi8qIGxpbmUgMjkwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5jb250ZW50LWhvbWUgLnRpdGxlLA0KLmNvbnRlbnQtaG9tZSAuZGVzY3JpcHRpb24gew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQovKiBsaW5lIDI5NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouY29udGVudC1ob21lIC50aXRsZSB7DQogICAgZm9udC1zaXplOiAyNHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgTGlnaHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KfQ0KDQovKiBsaW5lIDI5OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouY29udGVudC1ob21lIC5kZXNjcmlwdGlvbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQovKiBsaW5lIDMwNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2lkZWJhci1ob21lIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOw0KICAgIGJvcmRlci10b3A6IDdweCBzb2xpZCAjMGI4MGQwOw0KICAgIG1hcmdpbi10b3A6IDM2cHg7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KICAgIC8qIGxpbmUgMzExLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2lkZWJhci1ob21lIGgzIHsNCiAgICAgICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDMxNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNpZGViYXItaG9tZSAucGFuZWwgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgYm9yZGVyOiAwOw0KICAgICAgICBib3gtc2hhZG93OiBub25lOw0KICAgIH0NCiAgICAvKiBsaW5lIDMyMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNpZGViYXItaG9tZSAucGFuZWwtaGVhZGluZyB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlcjogMDsNCiAgICB9DQogICAgLyogbGluZSAzMjcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zaWRlYmFyLWhvbWUgLnBhbmVsLXRpdGxlIHsNCiAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICBjb2xvcjogIzJmNWZlZjsNCiAgICAgICAgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSBTZW1pYm9sZCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgfQ0KICAgIC8qIGxpbmUgMzMzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2lkZWJhci1ob21lIC5saXN0LWdyb3VwLWl0ZW0gew0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlcjogMDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgMzQwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnNpZGViYXItaG9tZSAubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KICAgICAgICAuc2lkZWJhci1ob21lIC5saXN0LWdyb3VwLWl0ZW06Zm9jdXMgew0KICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgfQ0KICAgICAgICAvKiBsaW5lIDM0NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgICAgIC5zaWRlYmFyLWhvbWUgLmxpc3QtZ3JvdXAtaXRlbSAuZGF0ZSB7DQogICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47DQogICAgICAgIH0NCg0KLyogbGluZSAzNTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tbGFuZGluZy1zZWFyY2ggew0KICAgIG1pbi1oZWlnaHQ6IDI1MHB4Ow0KICAgIGJhY2tncm91bmQ6IHVybChob21laGVyby5qcGcpIG5vLXJlcGVhdCAwIDI1JTsNCiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KfQ0KDQovKiBsaW5lIDM1NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1sYW5kaW5nLWZvcnVtcyB7DQogICAgbWluLWhlaWdodDogMjUwcHg7DQogICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsNCn0NCg0KLyogbGluZSAzNjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24ta25vd2xlZGdlIC5saXN0LWdyb3VwIGEubGlzdC1ncm91cC1pdGVtIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCn0NCg0KLyogbGluZSAzNjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24ta25vd2xlZGdlIC5wYW5lbC10aXRsZSB7DQogICAgY29sb3I6ICMwMDA7DQp9DQoNCi8qIGxpbmUgMzczLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5wYWdlX3NlY3Rpb24uc2VjdGlvbi1sYW5kaW5nIC5yb3cgew0KICAgIHBhZGRpbmctYm90dG9tOiA2MHB4Ow0KfQ0KDQogICAgLyogbGluZSAzNzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5wYWdlX3NlY3Rpb24uc2VjdGlvbi1sYW5kaW5nIC5yb3cgPiBkaXYgew0KICAgICAgICBtYXJnaW4tdG9wOiAwcHg7DQogICAgfQ0KDQovKiBsaW5lIDM4MSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQp1bC50cmVlLCBvbC50cmVlIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCn0NCg0KLyogbGluZSAzODYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnRyZWUgdWwsIC50cmVlIG9sLCAudHJlZSB1bCB1bCwgLnRyZWUgb2wgdWwsIC50cmVlIG9sIG9sIHVsLCAudHJlZSBvbCB1bCB1bCwgLnRyZWUgdWwgb2wgdWwsIC50cmVlIHVsIHVsIHVsIHsNCiAgICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7DQogICAgY29sb3I6ICMyZjVmZWY7DQp9DQoNCi8qIEFEWF9GT1JNUyAgKi8NCi8qIGxpbmUgMzkyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5hZHhfZm9ybXNfZm9udF9jYWxpYnJpIHsNCiAgICBmb250LWZhbWlseTogQ2FsaWJyaTsNCn0NCg0KLyogbGluZSAzOTYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmFkeF9mb3Jtc19mb250X25ld19yb21hbiB7DQogICAgZm9udC1mYW1pbHk6IFRpbWVzIE5ldyBSb21hbjsNCn0NCg0KLyogbGluZSAzOTksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmFkeF9mb3Jtc19mb250X2hlbHZldGljYSB7DQogICAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EnLCBzYW5zLXNlcmlmOw0KfQ0KDQovKiBCZWxvdyBjaGFuZ2VzIGFyZSBkb25lIHRvIHN1cHBvcnQgRGVmYXVsdFBvcnRhbFRlbXBsYXRlIGluIG1ha2VyICovDQpodG1sIHsNCiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsNCiAgICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsNCiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIG1hcmdpbjogMDsNCn0NCg0KLndyYXBwZXItYm9keSB7DQogICAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMTMycHgpOw0KICAgIG1hcmdpbi1ib3R0b206IDBweDsNCn0NCg0KLmZvb3RlciAucHVzaCB7DQogICAgaGVpZ2h0OiA0M3B4Ow0KfQ0KDQouZm9vdGVyIHsNCiAgICBtYXJnaW4tdG9wOiAwcHg7DQp9DQoNCi5wYWdlLWNvcHkgew0KICAgIG1hcmdpbi10b3A6IDBweDsNCiAgICBtYXJnaW4tYm90dG9tOiAwcHg7DQp9DQoNCi5uYXZiYXItYnJhbmQgew0KICAgIGxpbmUtaGVpZ2h0OiAzN3B4Ow0KfQ0KDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsNCiAgICBjb2xvcjogdW5zZXQ7DQp9DQoNCmJvZHksIGxlZ2VuZCB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi5uYXYtdGFicyA+IGxpID4gYTpob3ZlciwgLm5hdi10YWJzID4gbGkgPiBhOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgIGNvbG9yOiAjMzAyQ0UxOw0KfQ0KDQouYnRuLWRlZmF1bHQgew0KICAgIGNvbG9yOiAjMzAyQ0UxOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KICAgIGJvcmRlci1jb2xvcjogIzMwMkNFMTsNCn0NCg0KLmJ0bi1kZWZhdWx0OmhvdmVyLA0KLmJ0bi1kZWZhdWx0OmFjdGl2ZSwNCi5idG4tZGVmYXVsdC5hY3RpdmUsDQouYnRuLWRlZmF1bHQ6Zm9jdXMsDQouYnRuLWRlZmF1bHQuZm9jdXMgew0KICAgIGNvbG9yOiAjMzAyQ0UxOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogICAgYm9yZGVyLWNvbG9yOiAjMzAyQ0UxOw0KfQ0KDQouYnRuLXByaW1hcnkgew0KICAgIGNvbG9yOiB3aGl0ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyQ0UxOw0KICAgIGJvcmRlci1jb2xvcjogIzMwMkNFMTsNCn0NCg0KLmJ0bi1wcmltYXJ5OmhvdmVyLA0KLmJ0bi1wcmltYXJ5OmFjdGl2ZSwNCi5idG4tcHJpbWFyeS5hY3RpdmUsDQouYnRuLXByaW1hcnk6YWN0aXZlOmhvdmVyLA0KLmJ0bi1wcmltYXJ5LmFjdGl2ZTpob3ZlciwNCi5idG4tcHJpbWFyeTphY3RpdmU6Zm9jdXMsDQouYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLA0KLmJ0bi1wcmltYXJ5OmFjdGl2ZS5mb2N1cywNCi5idG4tcHJpbWFyeS5hY3RpdmUuZm9jdXMsDQouYnRuLXByaW1hcnk6Zm9jdXMsDQouYnRuLXByaW1hcnkuZm9jdXMgew0KICAgIGNvbG9yOiB3aGl0ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWM1OWU3Ow0KICAgIGJvcmRlci1jb2xvcjogIzVjNTllNzsNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlIHsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzAyQ0UxOw0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NjQyZTQ7DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7DQogICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQ2NDJlNDsNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyQ0UxOw0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEgew0KICAgIGNvbG9yOiAjZmZmOw0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGENCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMkNFMTsNCiAgICBjb2xvcjogI2ZmZjsNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7DQogICAgY29sb3I6ICMzMDJDRTE7DQp9DQoNCi5uYXYgPiBsaSA+IGE6aG92ZXIsIC5uYXYgPiBsaSA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQp9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7DQp9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEgew0KICAgIGNvbG9yOiBibGFjazsNCn0NCg0KLm5hdiA+IC5vcGVuID4gYQ0KLm5hdiA+IC5vcGVuID4gYTpob3ZlciwNCi5uYXYgPiAub3BlbiA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQp9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cywNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsDQoubmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgIGNvbG9yOiBibGFjazsNCn0NCg0KI2ZpbHRlckRyb3Bkb3duSWQgPiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7DQoJYm9yZGVyOiAxcHggc29saWQ7DQp9DQoNCiNmaWx0ZXJEcm9wZG93bklkID4gYTpmb2N1c3sNCglib3JkZXI6IDFweCBzb2xpZDsNCn0NCg0KLmNybUVudGl0eUZvcm1WaWV3LCAuZW50aXR5bGlzdCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjZjJmMmYyOw0KfQ0KDQouc2VjdGlvblByaW1hcnlDb2xvciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMmNlMTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCn0NCg0KLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDEsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGgyLCAuc2VjdGlvblByaW1hcnlDb2xvciBoMywgLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDQsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGg1LCAuc2VjdGlvblByaW1hcnlDb2xvciBoNiB7DQogICAgY29sb3I6ICNmZmZmZmY7DQp9DQoNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMSwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMiwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMywNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNCwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNSwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNiB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGgxLA0KLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDIsDQouc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoMywNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGg0LA0KLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDUsDQouc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoNiB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi5zZWN0aW9uRml4ZWRTdHlsZSB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCmEgew0KICAgIGNvbG9yOiAjMzAyY2UxOw0KfQ0KDQphOm5vdCguYnRuKSB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCltyb2xlPSJuYXZpZ2F0aW9uIl0gYSwNCltyb2xlPSJjb250ZW50aW5mbyJdIGEsDQoudG9vbGJhciBhLA0KYS5saXN0LWdyb3VwLWl0ZW0gew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCg0KYTpob3ZlciwgYTpmb2N1cyB7DQogICAgY29sb3I6ICMzMDJjZTE7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCi5icmVhZGNydW1iID4gLmFjdGl2ZSB7DQogICAgY29sb3I6ICMwMDAwMDA7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoNCnAgew0KICAgIGZvbnQtc2l6ZTogMTZweA0KfQ0KDQpoMSB7DQogICAgZm9udC1zaXplOiAzNnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIG1hcmdpbi1sZWZ0OiAwcHg7DQogICAgbWFyZ2luLXJpZ2h0OiAwcHg7DQp9DQoNCmgyIHsNCiAgICBmb250LXNpemU6IDI4cHg7DQogICAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KaDMgew0KICAgIGZvbnQtc2l6ZTogMjRweDsNCiAgICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQoucGFnZS1oZWFkZXIgew0KICAgIGJvcmRlci1ib3R0b206IDBweDsNCn0NCg0KLm5hdmJhci1icmFuZCB7DQogICAgcGFkZGluZzogOHB4DQp9DQoNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIHsNCiAgICBmb250LXNpemU6IDI0cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6IHVuc2V0Ow0KfQ0KDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIHsNCiAgICBjb2xvcjogYmxhY2s7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KLmhlbHAtYmxvY2sNCnsNCiAgICBjb2xvcjpibGFjazsNCn0NCg0KLnNraXAtdG8tY29udGVudCBhIA0Kew0KICAgIHBhZGRpbmc6IDEwcHggMjBweDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOi00M3B4Ow0KICAgIGxlZnQ6MHB4Ow0KICAgIGNvbG9yOiNGRkZGRkY7DQogICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgIGJhY2tncm91bmQ6Izc0Mjc3NDsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHRvcCAxcyBlYXNlLW91dDsNCiAgICB0cmFuc2l0aW9uOiB0b3AgMXMgZWFzZS1vdXQ7DQogICAgei1pbmRleDogMTAwOw0KICAgIGZvbnQtZmFtaWx5OiBTZWdvZSBVSTsNCiAgICBmb250LXNpemU6IDE0cHg7DQp9DQoNCi5za2lwLXRvLWNvbnRlbnQgYTpmb2N1cyANCnsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICBsZWZ0OjBweDsNCiAgICB0b3A6MHB4Ow0KICAgIG91dGxpbmU6IG5vbmU7DQogICAgY29sb3I6I0ZGRkZGRjsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHRvcCAuMXMgZWFzZS1pbjsNCiAgICB0cmFuc2l0aW9uOiB0b3AgLjFzIGVhc2UtaW47DQp9DQoNCkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7DQogICAgLm5hdi10YWJzPmxpLmFjdGl2ZT5hLCAubmF2LXRhYnM+bGkuYWN0aXZlPmE6aG92ZXIsIC5uYXYtdGFicz5saS5hY3RpdmU+YTpmb2N1cw0KICAgIHsNCiAgICAgYm9yZGVyLWJvdHRvbTogMHB4IDsgDQogICAgfQ0KICAgIA0KICAgIC5uYXYtdGFicz5saT5hDQogICAgeyAgDQogICAgIGJvcmRlcjogMHB4Ow0KICAgIH0NCg0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkOw0KICAgIH0NCg0KICAgIC5mYWNldC1saXN0LWdyb3VwLWl0ZW0gDQogICAgew0KICAgICAgICBtYXJnaW46IDFweDsNCiAgICAgICAgYm9yZGVyOiAwcHg7DQogICAgfQ0KfQ0KDQouZnJlbmNoQWNjZXNzaWJpbGl0eUxpbmt7DQogICAgZmxvYXQ6IHJpZ2h0Ow0KICAgIHdpZHRoOiAyOTdweDsNCiAgICBoZWlnaHQ6IDI0cHg7DQogICAgZm9udC1mYW1pbHk6IFNlZ29lIFVJOw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBsaW5lLWhlaWdodDogMjFweDsNCiAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOw0KICAgIGNvbG9yOiAjMkMzM0Q4Ow0KfQ0KDQoNCi8qIFBvd2VyIFZpcnR1YWwgQWdlbnQgc3R5bGVzICovDQoucHZhLWZsb2F0aW5nLXN0eWxlIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBib3R0b206IDBweDsNCiAgcmlnaHQ6IDBweDsNCiAgbWFyZ2luLXJpZ2h0OiAxNnB4Ow0KICBtYXJnaW4tYm90dG9tOiAxOHB4Ow0KICB6LWluZGV4OiA5OTk5Ow0KfQ0KLyogUG93ZXIgVmlydHVhbCBBZ2VudCBzdHlsZXMgZW5kcyAqLw0KDQoudmlzaWJsZS1sZy1ibG9ja3sNCiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCn0=", + "name": "theme.css", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "3b8343ca-c04c-4768-a2f9-73b9a01bde4f", + "content": "{\"display_name\":\"Default\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "name": "Default", + "powerpagecomponenttype": "4", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "3d2aec03-5980-4d48-b780-cd25390ccf49", + "content": "{\"anonymoususersrole\":true,\"authenticatedusersrole\":false}", + "name": "Anonymous Users", + "powerpagecomponenttype": "11", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "41c9526c-f123-4b59-994f-ad06698902b2", + "content": "{\"source\":\"
\\r\\n
\\r\\n {% block breadcrumbs %}\\r\\n {% include 'Breadcrumbs' %}\\r\\n {% endblock %}\\r\\n {% block title %}\\r\\n {% include 'Page Header' %}\\r\\n {% endblock %}\\r\\n
\\r\\n
\\r\\n
\\r\\n {% block main %}\\r\\n {% include 'Page Copy' %}\\r\\n {% endblock %}\\r\\n
\\r\\n
\\r\\n {% block aside -%}\\r\\n {%- endblock %}\\r\\n
\\r\\n
\\r\\n
\\r\\n\"}", + "name": "Layout 2 Column Wide Left", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "4fdc558d-cbc6-49da-aeb5-314a59fb6e99", + "content": "{\"value\":\"False\"}", + "name": "Search/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "549b7114-711a-4096-8de5-8dae1575a67d", + "content": "{\"displayorder\":1,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"bootstrap.min.css\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "LyohDQogKiBCb290c3RyYXAgdjMuMy42IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSkNCiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLg0KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkNCiAqLw0KDQoNCi8qISBub3JtYWxpemUuY3NzIHYzLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi8NCg0KYXJ0aWNsZSwNCmFzaWRlLA0KZGV0YWlscywNCmZpZ2NhcHRpb24sDQpmaWd1cmUsDQpmb290ZXIsDQpoZWFkZXIsDQpoZ3JvdXAsDQptYWluLA0KbWVudSwNCm5hdiwNCnNlY3Rpb24sDQpzdW1tYXJ5IHsNCiAgICBkaXNwbGF5OiBibG9jaw0KfQ0KDQphdWRpbywNCmNhbnZhcywNCnByb2dyZXNzLA0KdmlkZW8gew0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmUNCn0NCg0KYXVkaW86bm90KFtjb250cm9sc10pIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIGhlaWdodDogMA0KfQ0KDQpbaGlkZGVuXSwNCnRlbXBsYXRlIHsNCiAgICBkaXNwbGF5OiBub25lDQp9DQoNCmEgew0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCmE6YWN0aXZlLA0KYTpob3ZlciB7DQogICAgb3V0bGluZTogMA0KfQ0KDQphYmJyW3RpdGxlXSB7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZA0KfQ0KDQpiLA0Kc3Ryb25nIHsNCiAgICBmb250LXdlaWdodDogYm9sZA0KfQ0KDQpkZm4gew0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYw0KfQ0KDQpoMSB7DQogICAgZm9udC1zaXplOiAyZW07DQogICAgbWFyZ2luOiAuNjdlbTsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KbWFyayB7DQogICAgYmFja2dyb3VuZDogI2ZmMDsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQpzbWFsbCB7DQogICAgZm9udC1zaXplOiA4MCUNCn0NCg0Kc3ViLA0Kc3VwIHsNCiAgICBmb250LXNpemU6IDc1JTsNCiAgICBsaW5lLWhlaWdodDogMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lDQp9DQoNCnN1cCB7DQogICAgdG9wOiAtLjVlbQ0KfQ0KDQpzdWIgew0KICAgIGJvdHRvbTogLS4yNWVtDQp9DQoNCmltZyB7DQogICAgYm9yZGVyOiAwDQp9DQoNCnN2Zzpub3QoOnJvb3QpIHsNCiAgICBvdmVyZmxvdzogaGlkZGVuDQp9DQoNCmZpZ3VyZSB7DQogICAgbWFyZ2luOiAxZW0gNDBweA0KfQ0KDQpociB7DQogICAgYm94LXNpemluZzogY29udGVudC1ib3g7DQogICAgaGVpZ2h0OiAwDQp9DQoNCnByZSB7DQogICAgb3ZlcmZsb3c6IGF1dG8NCn0NCg0KY29kZSwNCmtiZCwNCnByZSwNCnNhbXAgew0KICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsNCiAgICBmb250LXNpemU6IDFlbQ0KfQ0KDQpidXR0b24sDQppbnB1dCwNCm9wdGdyb3VwLA0Kc2VsZWN0LA0KdGV4dGFyZWEgew0KICAgIGNvbG9yOiBpbmhlcml0Ow0KICAgIGZvbnQ6IGluaGVyaXQ7DQogICAgbWFyZ2luOiAwDQp9DQoNCmJ1dHRvbiB7DQogICAgb3ZlcmZsb3c6IHZpc2libGUNCn0NCg0KYnV0dG9uLA0Kc2VsZWN0IHsNCiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZQ0KfQ0KDQpidXR0b24sDQpodG1sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLA0KaW5wdXRbdHlwZT0icmVzZXQiXSwNCmlucHV0W3R5cGU9InN1Ym1pdCJdIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsNCiAgICBjdXJzb3I6IHBvaW50ZXINCn0NCg0KYnV0dG9uW2Rpc2FibGVkXSwNCmh0bWwgaW5wdXRbZGlzYWJsZWRdIHsNCiAgICBjdXJzb3I6IGRlZmF1bHQNCn0NCg0KYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLA0KaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIgew0KICAgIGJvcmRlcjogMDsNCiAgICBwYWRkaW5nOiAwDQp9DQoNCmlucHV0IHsNCiAgICBsaW5lLWhlaWdodDogbm9ybWFsDQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0sDQppbnB1dFt0eXBlPSJyYWRpbyJdIHsNCiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIHBhZGRpbmc6IDANCn0NCg0KaW5wdXRbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sDQppbnB1dFt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCmlucHV0W3R5cGU9InNlYXJjaCJdIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsNCiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveA0KfQ0KDQppbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwNCmlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmUNCn0NCg0KZmllbGRzZXQgew0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7DQogICAgbWFyZ2luOiAwIDJweDsNCiAgICBwYWRkaW5nOiAuMzVlbSAuNjI1ZW0gLjc1ZW0NCn0NCg0KbGVnZW5kIHsNCiAgICBib3JkZXI6IDA7DQogICAgcGFkZGluZzogMA0KfQ0KDQp0ZXh0YXJlYSB7DQogICAgb3ZlcmZsb3c6IGF1dG8NCn0NCg0Kb3B0Z3JvdXAgew0KICAgIGZvbnQtd2VpZ2h0OiBib2xkDQp9DQoNCnRhYmxlIHsNCiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KICAgIGJvcmRlci1zcGFjaW5nOiAwDQp9DQoNCnRkLA0KdGggew0KICAgIHBhZGRpbmc6IDANCn0NCg0KLyoNCi5maXhlZC1ib3R0b217DQoJDQoJcG9zaXRpb246IGZpeGVkOw0KCXJpZ2h0OiAwOw0KCWJvdHRvbTogMDsNCglsZWZ0OiAwOw0KCXdpZHRoOjEwMCU7DQoJaGVpZ2h0OjQzcHg7ICAgIEhlaWdodCBvZiB0aGUgZm9vdGVyIA0KfQ0KKi8NCg0KDQovKiEgU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9ibG9iL21hc3Rlci9zcmMvY3NzL21haW4uY3NzICovDQoNCkBtZWRpYSBwcmludCB7DQoNCiAgICAqLA0KICAgICo6YmVmb3JlLA0KICAgICo6YWZ0ZXIgew0KICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Ow0KICAgICAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50Ow0KICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICBhLA0KICAgIGE6dmlzaXRlZCB7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lDQogICAgfQ0KDQogICAgYVtocmVmXTphZnRlciB7DQogICAgICAgIGNvbnRlbnQ6ICIgKCJhdHRyKGhyZWYpICIpIg0KICAgIH0NCg0KICAgIGFiYnJbdGl0bGVdOmFmdGVyIHsNCiAgICAgICAgY29udGVudDogIiAoImF0dHIodGl0bGUpICIpIg0KICAgIH0NCg0KICAgIGFbaHJlZl49IiMiXTphZnRlciwNCiAgICBhW2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyIHsNCiAgICAgICAgY29udGVudDogIiINCiAgICB9DQoNCiAgICBwcmUsDQogICAgYmxvY2txdW90ZSB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7DQogICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZA0KICAgIH0NCg0KICAgIHRoZWFkIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwDQogICAgfQ0KDQogICAgdHIsDQogICAgaW1nIHsNCiAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkDQogICAgfQ0KDQogICAgaW1nIHsNCiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICBwLA0KICAgIGgyLA0KICAgIGgzIHsNCiAgICAgICAgb3JwaGFuczogMzsNCiAgICAgICAgd2lkb3dzOiAzDQogICAgfQ0KDQogICAgaDIsDQogICAgaDMgew0KICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZA0KICAgIH0NCg0KICAgIGgzIHsNCiAgICAgICAgZm9udC1zaXplOiAxLjVlbTsNCiAgICB9DQoNCiAgICBwIHsNCiAgICAgICAgZm9udC1zaXplOiAxZW07DQogICAgICAgIGNvbG9yOiAjMjAxZjFlOw0KICAgIH0NCg0KICAgIC5uYXZiYXIgew0KICAgICAgICBkaXNwbGF5OiBub25lDQogICAgfQ0KDQogICAgLmJ0bj4uY2FyZXQsDQogICAgLmRyb3B1cD4uYnRuPi5jYXJldCB7DQogICAgICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIC5sYWJlbCB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDANCiAgICB9DQoNCiAgICAudGFibGUgew0KICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICAudGFibGUgdGQsDQogICAgLnRhYmxlIHRoIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZiAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgLnRhYmxlLWJvcmRlcmVkIHRoLA0KICAgIC50YWJsZS1ib3JkZXJlZCB0ZCB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQGZvbnQtZmFjZSB7DQogICAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7DQogICAgc3JjOiB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90Iik7DQogICAgc3JjOiB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90PyNpZWZpeCIpIGZvcm1hdCgiZW1iZWRkZWQtb3BlbnR5cGUiKSwgdXJsKCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpLCB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZiIpIGZvcm1hdCgid29mZiIpLCB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmIikgZm9ybWF0KCJ0cnVldHlwZSIpLCB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnI2dseXBoaWNvbnNfaGFsZmxpbmdzcmVndWxhciIpIGZvcm1hdCgic3ZnIikNCn0NCg0KLmdseXBoaWNvbiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogMXB4Ow0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJzsNCiAgICBmb250LXN0eWxlOiBub3JtYWw7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMTsNCiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlDQp9DQoNCi5nbHlwaGljb24tYXN0ZXJpc2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAiKiINCn0NCg0KLmdseXBoaWNvbi1wbHVzOmJlZm9yZSB7DQogICAgY29udGVudDogIisiDQp9DQoNCi5nbHlwaGljb24tZXVybzpiZWZvcmUsDQouZ2x5cGhpY29uLWV1cjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLigqwiDQp9DQoNCi5nbHlwaGljb24tbWludXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi4oiSIg0KfQ0KDQouZ2x5cGhpY29uLWNsb3VkOmJlZm9yZSB7DQogICAgY29udGVudDogIuKYgSINCn0NCg0KLmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLinIkiDQp9DQoNCi5nbHlwaGljb24tcGVuY2lsOmJlZm9yZSB7DQogICAgY29udGVudDogIuKcjyINCn0NCg0KLmdseXBoaWNvbi1nbGFzczpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugIEiDQp9DQoNCi5nbHlwaGljb24tbXVzaWM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCCIg0KfQ0KDQouZ2x5cGhpY29uLXNlYXJjaDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugIMiDQp9DQoNCi5nbHlwaGljb24taGVhcnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCFIg0KfQ0KDQouZ2x5cGhpY29uLXN0YXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCGIg0KfQ0KDQouZ2x5cGhpY29uLXN0YXItZW1wdHk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCHIg0KfQ0KDQouZ2x5cGhpY29uLXVzZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCIIg0KfQ0KDQouZ2x5cGhpY29uLWZpbG06YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCJIg0KfQ0KDQouZ2x5cGhpY29uLXRoLWxhcmdlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AkCINCn0NCg0KLmdseXBoaWNvbi10aDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJEiDQp9DQoNCi5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJIiDQp9DQoNCi5nbHlwaGljb24tb2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCTIg0KfQ0KDQouZ2x5cGhpY29uLXJlbW92ZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJQiDQp9DQoNCi5nbHlwaGljb24tem9vbS1pbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJUiDQp9DQoNCi5nbHlwaGljb24tem9vbS1vdXQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCWIg0KfQ0KDQouZ2x5cGhpY29uLW9mZjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJciDQp9DQoNCi5nbHlwaGljb24tc2lnbmFsOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AmCINCn0NCg0KLmdseXBoaWNvbi1jb2c6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCZIg0KfQ0KDQouZ2x5cGhpY29uLXRyYXNoOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoCINCn0NCg0KLmdseXBoaWNvbi1ob21lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoSINCn0NCg0KLmdseXBoaWNvbi1maWxlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoiINCn0NCg0KLmdseXBoaWNvbi10aW1lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoyINCn0NCg0KLmdseXBoaWNvbi1yb2FkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ApCINCn0NCg0KLmdseXBoaWNvbi1kb3dubG9hZC1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oClIg0KfQ0KDQouZ2x5cGhpY29uLWRvd25sb2FkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ApiINCn0NCg0KLmdseXBoaWNvbi11cGxvYWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCnIg0KfQ0KDQouZ2x5cGhpY29uLWluYm94OmJlZm9yZSB7DQogICAgY29udGVudDogIu6AqCINCn0NCg0KLmdseXBoaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugKkiDQp9DQoNCi5nbHlwaGljb24tcmVwZWF0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6AsCINCn0NCg0KLmdseXBoaWNvbi1yZWZyZXNoOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AsSINCn0NCg0KLmdseXBoaWNvbi1saXN0LWFsdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLIiDQp9DQoNCi5nbHlwaGljb24tbG9jazpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLMiDQp9DQoNCi5nbHlwaGljb24tZmxhZzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLQiDQp9DQoNCi5nbHlwaGljb24taGVhZHBob25lczpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLUiDQp9DQoNCi5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLYiDQp9DQoNCi5nbHlwaGljb24tdm9sdW1lLWRvd246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oC3Ig0KfQ0KDQouZ2x5cGhpY29uLXZvbHVtZS11cDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLgiDQp9DQoNCi5nbHlwaGljb24tcXJjb2RlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AuSINCn0NCg0KLmdseXBoaWNvbi1iYXJjb2RlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BgCINCn0NCg0KLmdseXBoaWNvbi10YWc6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGBIg0KfQ0KDQouZ2x5cGhpY29uLXRhZ3M6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGCIg0KfQ0KDQouZ2x5cGhpY29uLWJvb2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGDIg0KfQ0KDQouZ2x5cGhpY29uLWJvb2ttYXJrOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BhCINCn0NCg0KLmdseXBoaWNvbi1wcmludDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugYUiDQp9DQoNCi5nbHlwaGljb24tY2FtZXJhOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BhiINCn0NCg0KLmdseXBoaWNvbi1mb250OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BhyINCn0NCg0KLmdseXBoaWNvbi1ib2xkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BiCINCn0NCg0KLmdseXBoaWNvbi1pdGFsaWM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGJIg0KfQ0KDQouZ2x5cGhpY29uLXRleHQtaGVpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BkCINCn0NCg0KLmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BkSINCn0NCg0KLmdseXBoaWNvbi1hbGlnbi1sZWZ0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BkiINCn0NCg0KLmdseXBoaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGTIg0KfQ0KDQouZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BlCINCn0NCg0KLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BlSINCn0NCg0KLmdseXBoaWNvbi1saXN0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BliINCn0NCg0KLmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugZciDQp9DQoNCi5nbHlwaGljb24taW5kZW50LXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BmCINCn0NCg0KLmdseXBoaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugZkiDQp9DQoNCi5nbHlwaGljb24tcGljdHVyZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugaAiDQp9DQoNCi5nbHlwaGljb24tbWFwLW1hcmtlcjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugaIiDQp9DQoNCi5nbHlwaGljb24tYWRqdXN0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BoyINCn0NCg0KLmdseXBoaWNvbi10aW50OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BpCINCn0NCg0KLmdseXBoaWNvbi1lZGl0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BpSINCn0NCg0KLmdseXBoaWNvbi1zaGFyZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugaYiDQp9DQoNCi5nbHlwaGljb24tY2hlY2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGnIg0KfQ0KDQouZ2x5cGhpY29uLW1vdmU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGoIg0KfQ0KDQouZ2x5cGhpY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGpIg0KfQ0KDQouZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGwIg0KfQ0KDQouZ2x5cGhpY29uLWJhY2t3YXJkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BsSINCn0NCg0KLmdseXBoaWNvbi1wbGF5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BsiINCn0NCg0KLmdseXBoaWNvbi1wYXVzZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugbMiDQp9DQoNCi5nbHlwaGljb24tc3RvcDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugbQiDQp9DQoNCi5nbHlwaGljb24tZm9yd2FyZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugbUiDQp9DQoNCi5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BtiINCn0NCg0KLmdseXBoaWNvbi1zdGVwLWZvcndhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oG3Ig0KfQ0KDQouZ2x5cGhpY29uLWVqZWN0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BuCINCn0NCg0KLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oG5Ig0KfQ0KDQouZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKAIg0KfQ0KDQouZ2x5cGhpY29uLXBsdXMtc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugoEiDQp9DQoNCi5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugoIiDQp9DQoNCi5nbHlwaGljb24tcmVtb3ZlLXNpZ246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKDIg0KfQ0KDQouZ2x5cGhpY29uLW9rLXNpZ246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKEIg0KfQ0KDQouZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKFIg0KfQ0KDQouZ2x5cGhpY29uLWluZm8tc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugoYiDQp9DQoNCi5nbHlwaGljb24tc2NyZWVuc2hvdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugociDQp9DQoNCi5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugogiDQp9DQoNCi5nbHlwaGljb24tb2stY2lyY2xlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6CiSINCn0NCg0KLmdseXBoaWNvbi1iYW4tY2lyY2xlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6CkCINCn0NCg0KLmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6CkSINCn0NCg0KLmdseXBoaWNvbi1hcnJvdy1yaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugpIiDQp9DQoNCi5nbHlwaGljb24tYXJyb3ctdXA6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKTIg0KfQ0KDQouZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKUIg0KfQ0KDQouZ2x5cGhpY29uLXNoYXJlLWFsdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugpUiDQp9DQoNCi5nbHlwaGljb24tcmVzaXplLWZ1bGw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKWIg0KfQ0KDQouZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugpciDQp9DQoNCi5nbHlwaGljb24tZXhjbGFtYXRpb24tc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIEiDQp9DQoNCi5nbHlwaGljb24tZ2lmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIIiDQp9DQoNCi5nbHlwaGljb24tbGVhZjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIMiDQp9DQoNCi5nbHlwaGljb24tZmlyZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIQiDQp9DQoNCi5nbHlwaGljb24tZXllLW9wZW46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSFIg0KfQ0KDQouZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIYiDQp9DQoNCi5nbHlwaGljb24td2FybmluZy1zaWduOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EhyINCn0NCg0KLmdseXBoaWNvbi1wbGFuZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIgiDQp9DQoNCi5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSJIg0KfQ0KDQouZ2x5cGhpY29uLXJhbmRvbTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJAiDQp9DQoNCi5nbHlwaGljb24tY29tbWVudDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJEiDQp9DQoNCi5nbHlwaGljb24tbWFnbmV0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6EkiINCn0NCg0KLmdseXBoaWNvbi1jaGV2cm9uLXVwOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EkyINCn0NCg0KLmdseXBoaWNvbi1jaGV2cm9uLWRvd246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSUIg0KfQ0KDQouZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSVIg0KfQ0KDQouZ2x5cGhpY29uLXNob3BwaW5nLWNhcnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSWIg0KfQ0KDQouZ2x5cGhpY29uLWZvbGRlci1jbG9zZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJciDQp9DQoNCi5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSYIg0KfQ0KDQouZ2x5cGhpY29uLXJlc2l6ZS12ZXJ0aWNhbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJkiDQp9DQoNCi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSgIg0KfQ0KDQouZ2x5cGhpY29uLWhkZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhKEiDQp9DQoNCi5nbHlwaGljb24tYnVsbGhvcm46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSiIg0KfQ0KDQouZ2x5cGhpY29uLWJlbGw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSjIg0KfQ0KDQouZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EpCINCn0NCg0KLmdseXBoaWNvbi10aHVtYnMtdXA6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSlIg0KfQ0KDQouZ2x5cGhpY29uLXRodW1icy1kb3duOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EpiINCn0NCg0KLmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6EpyINCn0NCg0KLmdseXBoaWNvbi1oYW5kLWxlZnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSoIg0KfQ0KDQouZ2x5cGhpY29uLWhhbmQtdXA6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSpIg0KfQ0KDQouZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLAiDQp9DQoNCi5nbHlwaGljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6EsSINCn0NCg0KLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLIiDQp9DQoNCi5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EsyINCn0NCg0KLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93bjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLQiDQp9DQoNCi5nbHlwaGljb24tZ2xvYmU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oS1Ig0KfQ0KDQouZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLYiDQp9DQoNCi5nbHlwaGljb24tdGFza3M6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oS3Ig0KfQ0KDQouZ2x5cGhpY29uLWZpbHRlcjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLgiDQp9DQoNCi5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EuSINCn0NCg0KLmdseXBoaWNvbi1mdWxsc2NyZWVuOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FgCINCn0NCg0KLmdseXBoaWNvbi1kYXNoYm9hcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWBIg0KfQ0KDQouZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhYIiDQp9DQoNCi5nbHlwaGljb24taGVhcnQtZW1wdHk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWDIg0KfQ0KDQouZ2x5cGhpY29uLWxpbms6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWEIg0KfQ0KDQouZ2x5cGhpY29uLXBob25lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FhSINCn0NCg0KLmdseXBoaWNvbi1wdXNocGluOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FhiINCn0NCg0KLmdseXBoaWNvbi11c2Q6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWIIg0KfQ0KDQouZ2x5cGhpY29uLWdicDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhYkiDQp9DQoNCi5nbHlwaGljb24tc29ydDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhZAiDQp9DQoNCi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhZEiDQp9DQoNCi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWSIg0KfQ0KDQouZ2x5cGhpY29uLXNvcnQtYnktb3JkZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWTIg0KfQ0KDQouZ2x5cGhpY29uLXNvcnQtYnktb3JkZXItYWx0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6FlCINCn0NCg0KLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWVIg0KfQ0KDQouZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcy1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWWIg0KfQ0KDQouZ2x5cGhpY29uLXVuY2hlY2tlZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhZciDQp9DQoNCi5nbHlwaGljb24tZXhwYW5kOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FmCINCn0NCg0KLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FmSINCn0NCg0KLmdseXBoaWNvbi1jb2xsYXBzZS11cDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaAiDQp9DQoNCi5nbHlwaGljb24tbG9nLWluOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FoSINCn0NCg0KLmdseXBoaWNvbi1mbGFzaDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaIiDQp9DQoNCi5nbHlwaGljb24tbG9nLW91dDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaMiDQp9DQoNCi5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaQiDQp9DQoNCi5nbHlwaGljb24tcmVjb3JkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FpSINCn0NCg0KLmdseXBoaWNvbi1zYXZlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FpiINCn0NCg0KLmdseXBoaWNvbi1vcGVuOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FpyINCn0NCg0KLmdseXBoaWNvbi1zYXZlZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhagiDQp9DQoNCi5nbHlwaGljb24taW1wb3J0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6FqSINCn0NCg0KLmdseXBoaWNvbi1leHBvcnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWwIg0KfQ0KDQouZ2x5cGhpY29uLXNlbmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWxIg0KfQ0KDQouZ2x5cGhpY29uLWZsb3BweS1kaXNrOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FsiINCn0NCg0KLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWzIg0KfQ0KDQouZ2x5cGhpY29uLWZsb3BweS1yZW1vdmU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oW0Ig0KfQ0KDQouZ2x5cGhpY29uLWZsb3BweS1zYXZlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FtSINCn0NCg0KLmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhbYiDQp9DQoNCi5nbHlwaGljb24tY3JlZGl0LWNhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oW3Ig0KfQ0KDQouZ2x5cGhpY29uLXRyYW5zZmVyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FuCINCn0NCg0KLmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6FuSINCn0NCg0KLmdseXBoaWNvbi1oZWFkZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaAIg0KfQ0KDQouZ2x5cGhpY29uLWNvbXByZXNzZWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaBIg0KfQ0KDQouZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GgiINCn0NCg0KLmdseXBoaWNvbi1waG9uZS1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaDIg0KfQ0KDQouZ2x5cGhpY29uLXRvd2VyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GhCINCn0NCg0KLmdseXBoaWNvbi1zdGF0czpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhoUiDQp9DQoNCi5nbHlwaGljb24tc2QtdmlkZW86YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaGIg0KfQ0KDQouZ2x5cGhpY29uLWhkLXZpZGVvOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GhyINCn0NCg0KLmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaIIg0KfQ0KDQouZ2x5cGhpY29uLXNvdW5kLXN0ZXJlbzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhokiDQp9DQoNCi5nbHlwaGljb24tc291bmQtZG9sYnk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaQIg0KfQ0KDQouZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhpEiDQp9DQoNCi5nbHlwaGljb24tc291bmQtNi0xOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GkiINCn0NCg0KLmdseXBoaWNvbi1zb3VuZC03LTE6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaTIg0KfQ0KDQouZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GlCINCn0NCg0KLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyazpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhpUiDQp9DQoNCi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaXIg0KfQ0KDQouZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhpgiDQp9DQoNCi5nbHlwaGljb24tdHJlZS1jb25pZmVyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GmSINCn0NCg0KLmdseXBoaWNvbi10cmVlLWRlY2lkdW91czpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIAiDQp9DQoNCi5nbHlwaGljb24tY2Q6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiBIg0KfQ0KDQouZ2x5cGhpY29uLXNhdmUtZmlsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIIiDQp9DQoNCi5nbHlwaGljb24tb3Blbi1maWxlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IgyINCn0NCg0KLmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIQiDQp9DQoNCi5nbHlwaGljb24tY29weTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIUiDQp9DQoNCi5nbHlwaGljb24tcGFzdGU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiGIg0KfQ0KDQouZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6IiSINCn0NCg0KLmdseXBoaWNvbi1lcXVhbGl6ZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiQIg0KfQ0KDQouZ2x5cGhpY29uLWtpbmc6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiRIg0KfQ0KDQouZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IkiINCn0NCg0KLmdseXBoaWNvbi1wYXduOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IkyINCn0NCg0KLmdseXBoaWNvbi1iaXNob3A6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiUIg0KfQ0KDQouZ2x5cGhpY29uLWtuaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiJUiDQp9DQoNCi5nbHlwaGljb24tYmFieS1mb3JtdWxhOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IliINCn0NCg0KLmdseXBoaWNvbi10ZW50OmJlZm9yZSB7DQogICAgY29udGVudDogIuKbuiINCn0NCg0KLmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ImCINCn0NCg0KLmdseXBoaWNvbi1iZWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiZIg0KfQ0KDQouZ2x5cGhpY29uLWFwcGxlOmJlZm9yZSB7DQogICAgY29udGVudDogIu+jvyINCn0NCg0KLmdseXBoaWNvbi1lcmFzZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiKEiDQp9DQoNCi5nbHlwaGljb24taG91cmdsYXNzOmJlZm9yZSB7DQogICAgY29udGVudDogIuKMmyINCn0NCg0KLmdseXBoaWNvbi1sYW1wOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IoyINCn0NCg0KLmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oikIg0KfQ0KDQouZ2x5cGhpY29uLXBpZ2d5LWJhbms6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oilIg0KfQ0KDQouZ2x5cGhpY29uLXNjaXNzb3JzOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IpiINCn0NCg0KLmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IpyINCn0NCg0KLmdseXBoaWNvbi1idGM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oinIg0KfQ0KDQouZ2x5cGhpY29uLXhidDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiKciDQp9DQoNCi5nbHlwaGljb24teWVuOmJlZm9yZSB7DQogICAgY29udGVudDogIsKlIg0KfQ0KDQouZ2x5cGhpY29uLWpweTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLCpSINCn0NCg0KLmdseXBoaWNvbi1ydWJsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLigr0iDQp9DQoNCi5nbHlwaGljb24tcnViOmJlZm9yZSB7DQogICAgY29udGVudDogIuKCvSINCn0NCg0KLmdseXBoaWNvbi1zY2FsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiLAiDQp9DQoNCi5nbHlwaGljb24taWNlLWxvbGx5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6IsSINCn0NCg0KLmdseXBoaWNvbi1pY2UtbG9sbHktdGFzdGVkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IsiINCn0NCg0KLmdseXBoaWNvbi1lZHVjYXRpb246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oizIg0KfQ0KDQouZ2x5cGhpY29uLW9wdGlvbi1ob3Jpem9udGFsOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ItCINCn0NCg0KLmdseXBoaWNvbi1vcHRpb24tdmVydGljYWw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oi1Ig0KfQ0KDQouZ2x5cGhpY29uLW1lbnUtaGFtYnVyZ2VyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ItiINCn0NCg0KLmdseXBoaWNvbi1tb2RhbC13aW5kb3c6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oi3Ig0KfQ0KDQouZ2x5cGhpY29uLW9pbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiLgiDQp9DQoNCi5nbHlwaGljb24tZ3JhaW46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oi5Ig0KfQ0KDQouZ2x5cGhpY29uLXN1bmdsYXNzZXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omAIg0KfQ0KDQouZ2x5cGhpY29uLXRleHQtc2l6ZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYEiDQp9DQoNCi5nbHlwaGljb24tdGV4dC1jb2xvcjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYIiDQp9DQoNCi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JgyINCn0NCg0KLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdG9wOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JhCINCn0NCg0KLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JhSINCn0NCg0KLmdseXBoaWNvbi1vYmplY3QtYWxpZ24taG9yaXpvbnRhbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYYiDQp9DQoNCi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWxlZnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omHIg0KfQ0KDQouZ2x5cGhpY29uLW9iamVjdC1hbGlnbi12ZXJ0aWNhbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYgiDQp9DQoNCi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6JiSINCn0NCg0KLmdseXBoaWNvbi10cmlhbmdsZS1yaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZAiDQp9DQoNCi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZEiDQp9DQoNCi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JkiINCn0NCg0KLmdseXBoaWNvbi10cmlhbmdsZS10b3A6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omTIg0KfQ0KDQouZ2x5cGhpY29uLWNvbnNvbGU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omUIg0KfQ0KDQouZ2x5cGhpY29uLXN1cGVyc2NyaXB0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6JlSINCn0NCg0KLmdseXBoaWNvbi1zdWJzY3JpcHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omWIg0KfQ0KDQouZ2x5cGhpY29uLW1lbnUtbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZciDQp9DQoNCi5nbHlwaGljb24tbWVudS1yaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZgiDQp9DQoNCi5nbHlwaGljb24tbWVudS1kb3duOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JmSINCn0NCg0KLmdseXBoaWNvbi1tZW51LXVwOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JoCINCn0NCg0KKiB7DQogICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94DQp9DQoNCio6YmVmb3JlLA0KKjphZnRlciB7DQogICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94DQp9DQoNCmh0bWwgew0KICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCmJvZHkgew0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBjb2xvcjogIzY2NjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmDQp9DQoNCmlucHV0LA0KYnV0dG9uLA0Kc2VsZWN0LA0KdGV4dGFyZWEgew0KICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Ow0KICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsNCiAgICBsaW5lLWhlaWdodDogaW5oZXJpdA0KfQ0KDQphIHsNCiAgICBjb2xvcjogIzAwMTQ3OTsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUNCn0NCg0KYTpob3ZlciwNCmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjMDAxMDVFOw0KICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lDQp9DQoNCmE6Zm9jdXMgew0KICAgIG91dGxpbmU6IHRoaW4gZG90dGVkOw0KICAgIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsNCiAgICBvdXRsaW5lLW9mZnNldDogLTJweA0KfQ0KDQpmaWd1cmUgew0KICAgIG1hcmdpbjogMA0KfQ0KDQppbWcgew0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUNCn0NCg0KLmltZy1yZXNwb25zaXZlIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtYXgtd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5pbWctcm91bmRlZCB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouaW1nLXRodW1ibmFpbCB7DQogICAgcGFkZGluZzogNHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlLWluLW91dDsNCiAgICAtby10cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2UtaW4tb3V0Ow0KICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZS1pbi1vdXQ7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIG1heC13aWR0aDogMTAwJTsNCiAgICBoZWlnaHQ6IGF1dG8NCn0NCg0KLmltZy1jaXJjbGUgew0KICAgIGJvcmRlci1yYWRpdXM6IDUwJQ0KfQ0KDQpociB7DQogICAgbWFyZ2luLXRvcDogMjFweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJvcmRlcjogMDsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZQ0KfQ0KDQouc3Itb25seSB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHdpZHRoOiAxcHg7DQogICAgaGVpZ2h0OiAxcHg7DQogICAgbWFyZ2luOiAtMXB4Ow0KICAgIHBhZGRpbmc6IDA7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBjbGlwOiByZWN0KDAsIDAsIDAsIDApOw0KICAgIGJvcmRlcjogMA0KfQ0KDQouc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLA0KLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzIHsNCiAgICBwb3NpdGlvbjogc3RhdGljOw0KICAgIHdpZHRoOiBhdXRvOw0KICAgIGhlaWdodDogYXV0bzsNCiAgICBtYXJnaW46IDA7DQogICAgb3ZlcmZsb3c6IHZpc2libGU7DQogICAgY2xpcDogYXV0bw0KfQ0KDQpbcm9sZT0iYnV0dG9uIl0gew0KICAgIGN1cnNvcjogcG9pbnRlcg0KfQ0KDQpoMSwNCmgyLA0KaDMsDQpoNCwNCmg1LA0KaDYsDQouaDEsDQouaDIsDQouaDMsDQouaDQsDQouaDUsDQouaDYgew0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgbGluZS1oZWlnaHQ6IDEuMTsNCiAgICBjb2xvcjogIzIzMjIyMg0KfQ0KDQpoMSBzbWFsbCwNCmgxIC5zbWFsbCwNCmgyIHNtYWxsLA0KaDIgLnNtYWxsLA0KaDMgc21hbGwsDQpoMyAuc21hbGwsDQpoNCBzbWFsbCwNCmg0IC5zbWFsbCwNCmg1IHNtYWxsLA0KaDUgLnNtYWxsLA0KaDYgc21hbGwsDQpoNiAuc21hbGwsDQouaDEgc21hbGwsDQouaDEgLnNtYWxsLA0KLmgyIHNtYWxsLA0KLmgyIC5zbWFsbCwNCi5oMyBzbWFsbCwNCi5oMyAuc21hbGwsDQouaDQgc21hbGwsDQouaDQgLnNtYWxsLA0KLmg1IHNtYWxsLA0KLmg1IC5zbWFsbCwNCi5oNiBzbWFsbCwNCi5oNiAuc21hbGwgew0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgbGluZS1oZWlnaHQ6IDE7DQogICAgY29sb3I6ICM1NTUNCn0NCg0KaDEsDQouaDEsDQpoMiwNCi5oMiwNCmgzLA0KLmgzIHsNCiAgICBtYXJnaW4tdG9wOiAyMXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDEwLjVweA0KfQ0KDQpoMSBzbWFsbCwNCmgxIC5zbWFsbCwNCi5oMSBzbWFsbCwNCi5oMSAuc21hbGwsDQpoMiBzbWFsbCwNCmgyIC5zbWFsbCwNCi5oMiBzbWFsbCwNCi5oMiAuc21hbGwsDQpoMyBzbWFsbCwNCmgzIC5zbWFsbCwNCi5oMyBzbWFsbCwNCi5oMyAuc21hbGwgew0KICAgIGZvbnQtc2l6ZTogNjUlDQp9DQoNCmg0LA0KLmg0LA0KaDUsDQouaDUsDQpoNiwNCi5oNiB7DQogICAgbWFyZ2luLXRvcDogMTAuNXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDEwLjVweA0KfQ0KDQpoNCBzbWFsbCwNCmg0IC5zbWFsbCwNCi5oNCBzbWFsbCwNCi5oNCAuc21hbGwsDQpoNSBzbWFsbCwNCmg1IC5zbWFsbCwNCi5oNSBzbWFsbCwNCi5oNSAuc21hbGwsDQpoNiBzbWFsbCwNCmg2IC5zbWFsbCwNCi5oNiBzbWFsbCwNCi5oNiAuc21hbGwgew0KICAgIGZvbnQtc2l6ZTogNzUlDQp9DQoNCmgxLA0KLmgxIHsNCiAgICBmb250LXNpemU6IDMycHg7DQogICAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KaDIsDQouaDIgew0KICAgIGZvbnQtc2l6ZTogMzRweA0KfQ0KDQpoMywNCi5oMyB7DQogICAgZm9udC1zaXplOiAyNHB4DQp9DQoNCmg0LA0KLmg0IHsNCiAgICBmb250LXNpemU6IDIwcHgNCn0NCg0KaDUsDQouaDUgew0KICAgIGZvbnQtc2l6ZTogMTVweA0KfQ0KDQpoNiwNCi5oNiB7DQogICAgZm9udC1zaXplOiAxNHB4DQp9DQoNCnAgew0KICAgIG1hcmdpbjogMCAwIDEwLjVweA0KfQ0KDQoubGVhZCB7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCiAgICBmb250LXNpemU6IDE3cHg7DQogICAgZm9udC13ZWlnaHQ6IDMwMDsNCiAgICBsaW5lLWhlaWdodDogMS40DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIHsNCiAgICAubGVhZCB7DQogICAgICAgIGZvbnQtc2l6ZTogMjIuNXB4DQogICAgfQ0KfQ0KDQpzbWFsbCwNCi5zbWFsbCB7DQogICAgZm9udC1zaXplOiA4NiUNCn0NCg0KbWFyaywNCi5tYXJrIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFlYmNjOw0KICAgIHBhZGRpbmc6IC4yZW0NCn0NCg0KLnRleHQtbGVmdCB7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQoudGV4dC1yaWdodCB7DQogICAgdGV4dC1hbGlnbjogcmlnaHQNCn0NCg0KLnRleHQtY2VudGVyIHsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXINCn0NCg0KLnRleHQtanVzdGlmeSB7DQogICAgdGV4dC1hbGlnbjoganVzdGlmeQ0KfQ0KDQoudGV4dC1ub3dyYXAgew0KICAgIHdoaXRlLXNwYWNlOiBub3dyYXANCn0NCg0KLnRleHQtbG93ZXJjYXNlIHsNCiAgICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlDQp9DQoNCi50ZXh0LXVwcGVyY2FzZSwNCi5pbml0aWFsaXNtIHsNCiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlDQp9DQoNCi50ZXh0LWNhcGl0YWxpemUgew0KICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplDQp9DQoNCi50ZXh0LW11dGVkIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoudGV4dC1wcmltYXJ5IHsNCiAgICBjb2xvcjogIzJmNWZlZg0KfQ0KDQphLnRleHQtcHJpbWFyeTpob3ZlciwNCmEudGV4dC1wcmltYXJ5OmZvY3VzIHsNCiAgICBjb2xvcjogIzExNDNkYQ0KfQ0KDQoudGV4dC1zdWNjZXNzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLnRleHQtc3VjY2Vzczpob3ZlciwNCmEudGV4dC1zdWNjZXNzOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQoudGV4dC1pbmZvIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLnRleHQtaW5mbzpob3ZlciwNCmEudGV4dC1pbmZvOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQoudGV4dC13YXJuaW5nIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLnRleHQtd2FybmluZzpob3ZlciwNCmEudGV4dC13YXJuaW5nOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQoudGV4dC1kYW5nZXIgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCmEudGV4dC1kYW5nZXI6aG92ZXIsDQphLnRleHQtZGFuZ2VyOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYmctcHJpbWFyeSB7DQogICAgY29sb3I6ICNmZmYNCn0NCg0KLmJnLXByaW1hcnkgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWYNCn0NCg0KYS5iZy1wcmltYXJ5OmhvdmVyLA0KYS5iZy1wcmltYXJ5OmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0M2RhDQp9DQoNCi5iZy1zdWNjZXNzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZlOWM2DQp9DQoNCmEuYmctc3VjY2Vzczpob3ZlciwNCmEuYmctc3VjY2Vzczpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZGJhMQ0KfQ0KDQouYmctaW5mbyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZThmMQ0KfQ0KDQphLmJnLWluZm86aG92ZXIsDQphLmJnLWluZm86Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM5MmRhZTgNCn0NCg0KLmJnLXdhcm5pbmcgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWViY2MNCn0NCg0KYS5iZy13YXJuaW5nOmhvdmVyLA0KYS5iZy13YXJuaW5nOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVkOTllDQp9DQoNCi5iZy1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjZDENCn0NCg0KYS5iZy1kYW5nZXI6aG92ZXIsDQphLmJnLWRhbmdlcjpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkYTdiMA0KfQ0KDQoucGFnZS1oZWFkZXIgew0KICAgIHBhZGRpbmctYm90dG9tOiA5LjVweDsNCiAgICBtYXJnaW46IDQycHggMCAyMXB4Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlDQp9DQoNCnVsLA0Kb2wgew0KICAgIG1hcmdpbi10b3A6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMTAuNXB4DQp9DQoNCnVsIHVsLA0KdWwgb2wsDQpvbCB1bCwNCm9sIG9sIHsNCiAgICBtYXJnaW4tYm90dG9tOiAwDQp9DQoNCi5saXN0LXVuc3R5bGVkIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZQ0KfQ0KDQoubGlzdC1pbmxpbmUgew0KICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICBsaXN0LXN0eWxlOiBub25lOw0KICAgIG1hcmdpbi1sZWZ0OiAtNXB4DQp9DQoNCi5saXN0LWlubGluZT5saSB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIHBhZGRpbmctbGVmdDogNXB4Ow0KICAgIHBhZGRpbmctcmlnaHQ6IDVweA0KfQ0KDQpkbCB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4DQp9DQoNCmR0LA0KZGQgew0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3DQp9DQoNCmR0IHsNCiAgICBmb250LXdlaWdodDogYm9sZA0KfQ0KDQpkZCB7DQogICAgbWFyZ2luLWxlZnQ6IDANCn0NCg0KLmRsLWhvcml6b250YWwgZGQ6YmVmb3JlLA0KLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouZGwtaG9yaXpvbnRhbCBkZDphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAuZGwtaG9yaXpvbnRhbCBkdCB7DQogICAgICAgIGZsb2F0OiBsZWZ0Ow0KICAgICAgICB3aWR0aDogMTYwcHg7DQogICAgICAgIGNsZWFyOiBsZWZ0Ow0KICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsNCiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXANCiAgICB9DQoNCiAgICAuZGwtaG9yaXpvbnRhbCBkZCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxODBweA0KICAgIH0NCn0NCg0KYWJiclt0aXRsZV0sDQphYmJyW2RhdGEtb3JpZ2luYWwtdGl0bGVdIHsNCiAgICBjdXJzb3I6IGhlbHA7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjNzc3DQp9DQoNCi5pbml0aWFsaXNtIHsNCiAgICBmb250LXNpemU6IDkwJQ0KfQ0KDQpibG9ja3F1b3RlIHsNCiAgICBwYWRkaW5nOiAxMC41cHggMjFweDsNCiAgICBtYXJnaW46IDAgMCAyMXB4Ow0KICAgIGZvbnQtc2l6ZTogMTguNzVweDsNCiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNlZWUNCn0NCg0KYmxvY2txdW90ZSBwOmxhc3QtY2hpbGQsDQpibG9ja3F1b3RlIHVsOmxhc3QtY2hpbGQsDQpibG9ja3F1b3RlIG9sOmxhc3QtY2hpbGQgew0KICAgIG1hcmdpbi1ib3R0b206IDANCn0NCg0KYmxvY2txdW90ZSBmb290ZXIsDQpibG9ja3F1b3RlIHNtYWxsLA0KYmxvY2txdW90ZSAuc21hbGwgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGZvbnQtc2l6ZTogODAlOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIGNvbG9yOiAjNzc3DQp9DQoNCmJsb2NrcXVvdGUgZm9vdGVyOmJlZm9yZSwNCmJsb2NrcXVvdGUgc21hbGw6YmVmb3JlLA0KYmxvY2txdW90ZSAuc21hbGw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAn4oCUwqAnDQp9DQoNCi5ibG9ja3F1b3RlLXJldmVyc2UsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgew0KICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICNlZWU7DQogICAgYm9yZGVyLWxlZnQ6IDA7DQogICAgdGV4dC1hbGlnbjogcmlnaHQNCn0NCg0KLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YmVmb3JlLA0KLmJsb2NrcXVvdGUtcmV2ZXJzZSBzbWFsbDpiZWZvcmUsDQouYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDpiZWZvcmUsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmJlZm9yZSwNCmJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmUsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgLnNtYWxsOmJlZm9yZSB7DQogICAgY29udGVudDogJycNCn0NCg0KLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YWZ0ZXIsDQouYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmFmdGVyLA0KLmJsb2NrcXVvdGUtcmV2ZXJzZSAuc21hbGw6YWZ0ZXIsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmFmdGVyLA0KYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVyLA0KYmxvY2txdW90ZS5wdWxsLXJpZ2h0IC5zbWFsbDphZnRlciB7DQogICAgY29udGVudDogJ8Kg4oCUJw0KfQ0KDQphZGRyZXNzIHsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1Nw0KfQ0KDQpjb2RlLA0Ka2JkLA0KcHJlLA0Kc2FtcCB7DQogICAgZm9udC1mYW1pbHk6IE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UNCn0NCg0KY29kZSB7DQogICAgcGFkZGluZzogMnB4IDRweDsNCiAgICBmb250LXNpemU6IDkwJTsNCiAgICBjb2xvcjogI2M3MjU0ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmMmY0Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0Ka2JkIHsNCiAgICBwYWRkaW5nOiAycHggNHB4Ow0KICAgIGZvbnQtc2l6ZTogOTAlOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIC4yNSkNCn0NCg0Ka2JkIGtiZCB7DQogICAgcGFkZGluZzogMDsNCiAgICBmb250LXNpemU6IDEwMCU7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgYm94LXNoYWRvdzogbm9uZQ0KfQ0KDQpwcmUgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IDEwcHg7DQogICAgbWFyZ2luOiAwIDAgMTAuNXB4Ow0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7DQogICAgd29yZC13cmFwOiBicmVhay13b3JkOw0KICAgIGNvbG9yOiAjMzMzOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCnByZSBjb2RlIHsNCiAgICBwYWRkaW5nOiAwOw0KICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsNCiAgICBjb2xvcjogaW5oZXJpdDsNCiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoucHJlLXNjcm9sbGFibGUgew0KICAgIG1heC1oZWlnaHQ6IDM0MHB4Ow0KICAgIG92ZXJmbG93LXk6IHNjcm9sbA0KfQ0KDQouY29udGFpbmVyIHsNCiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87DQogICAgbWFyZ2luLWxlZnQ6IGF1dG87DQogICAgcGFkZGluZy1sZWZ0OiAxNXB4Ow0KICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQp9DQoNCi5jb250YWluZXI6YmVmb3JlLA0KLmNvbnRhaW5lcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5jb250YWluZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIHsNCiAgICAuY29udGFpbmVyIHsNCiAgICAgICAgd2lkdGg6IDc1MHB4DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSB7DQogICAgLmNvbnRhaW5lciB7DQogICAgICAgIHdpZHRoOiA5NzBweA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAuY29udGFpbmVyIHsNCiAgICAgICAgd2lkdGg6IDExNzBweA0KICAgIH0NCn0NCg0KLmNvbnRhaW5lci1mbHVpZCB7DQogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICAgIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICAgIHBhZGRpbmctbGVmdDogMTVweDsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4DQp9DQoNCi5jb250YWluZXItZmx1aWQ6YmVmb3JlLA0KLmNvbnRhaW5lci1mbHVpZDphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5jb250YWluZXItZmx1aWQ6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5yb3cgew0KICAgIG1hcmdpbi1sZWZ0OiAtMTVweDsNCiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4DQp9DQoNCi5yb3c6YmVmb3JlLA0KLnJvdzphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5yb3c6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5jb2wteHMtMSwNCi5jb2wtc20tMSwNCi5jb2wtbWQtMSwNCi5jb2wtbGctMSwNCi5jb2wteHMtMiwNCi5jb2wtc20tMiwNCi5jb2wtbWQtMiwNCi5jb2wtbGctMiwNCi5jb2wteHMtMywNCi5jb2wtc20tMywNCi5jb2wtbWQtMywNCi5jb2wtbGctMywNCi5jb2wteHMtNCwNCi5jb2wtc20tNCwNCi5jb2wtbWQtNCwNCi5jb2wtbGctNCwNCi5jb2wteHMtNSwNCi5jb2wtc20tNSwNCi5jb2wtbWQtNSwNCi5jb2wtbGctNSwNCi5jb2wteHMtNiwNCi5jb2wtc20tNiwNCi5jb2wtbWQtNiwNCi5jb2wtbGctNiwNCi5jb2wteHMtNywNCi5jb2wtc20tNywNCi5jb2wtbWQtNywNCi5jb2wtbGctNywNCi5jb2wteHMtOCwNCi5jb2wtc20tOCwNCi5jb2wtbWQtOCwNCi5jb2wtbGctOCwNCi5jb2wteHMtOSwNCi5jb2wtc20tOSwNCi5jb2wtbWQtOSwNCi5jb2wtbGctOSwNCi5jb2wteHMtMTAsDQouY29sLXNtLTEwLA0KLmNvbC1tZC0xMCwNCi5jb2wtbGctMTAsDQouY29sLXhzLTExLA0KLmNvbC1zbS0xMSwNCi5jb2wtbWQtMTEsDQouY29sLWxnLTExLA0KLmNvbC14cy0xMiwNCi5jb2wtc20tMTIsDQouY29sLW1kLTEyLA0KLmNvbC1sZy0xMiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIG1pbi1oZWlnaHQ6IDFweDsNCiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7DQogICAgcGFkZGluZy1yaWdodDogMTVweA0KfQ0KDQouY29sLXhzLTEsDQouY29sLXhzLTIsDQouY29sLXhzLTMsDQouY29sLXhzLTQsDQouY29sLXhzLTUsDQouY29sLXhzLTYsDQouY29sLXhzLTcsDQouY29sLXhzLTgsDQouY29sLXhzLTksDQouY29sLXhzLTEwLA0KLmNvbC14cy0xMSwNCi5jb2wteHMtMTIgew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5jb2wteHMtMSB7DQogICAgd2lkdGg6IDguMzMzMzMlDQp9DQoNCi5jb2wteHMtMiB7DQogICAgd2lkdGg6IDE2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLTMgew0KICAgIHdpZHRoOiAyNSUNCn0NCg0KLmNvbC14cy00IHsNCiAgICB3aWR0aDogMzMuMzMzMzMlDQp9DQoNCi5jb2wteHMtNSB7DQogICAgd2lkdGg6IDQxLjY2NjY3JQ0KfQ0KDQouY29sLXhzLTYgew0KICAgIHdpZHRoOiA1MCUNCn0NCg0KLmNvbC14cy03IHsNCiAgICB3aWR0aDogNTguMzMzMzMlDQp9DQoNCi5jb2wteHMtOCB7DQogICAgd2lkdGg6IDY2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLTkgew0KICAgIHdpZHRoOiA3NSUNCn0NCg0KLmNvbC14cy0xMCB7DQogICAgd2lkdGg6IDgzLjMzMzMzJQ0KfQ0KDQouY29sLXhzLTExIHsNCiAgICB3aWR0aDogOTEuNjY2NjclDQp9DQoNCi5jb2wteHMtMTIgew0KICAgIHdpZHRoOiAxMDAlDQp9DQoNCi5jb2wteHMtcHVsbC0wIHsNCiAgICByaWdodDogYXV0bw0KfQ0KDQouY29sLXhzLXB1bGwtMSB7DQogICAgcmlnaHQ6IDguMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVsbC0yIHsNCiAgICByaWdodDogMTYuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVsbC0zIHsNCiAgICByaWdodDogMjUlDQp9DQoNCi5jb2wteHMtcHVsbC00IHsNCiAgICByaWdodDogMzMuMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVsbC01IHsNCiAgICByaWdodDogNDEuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVsbC02IHsNCiAgICByaWdodDogNTAlDQp9DQoNCi5jb2wteHMtcHVsbC03IHsNCiAgICByaWdodDogNTguMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVsbC04IHsNCiAgICByaWdodDogNjYuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVsbC05IHsNCiAgICByaWdodDogNzUlDQp9DQoNCi5jb2wteHMtcHVsbC0xMCB7DQogICAgcmlnaHQ6IDgzLjMzMzMzJQ0KfQ0KDQouY29sLXhzLXB1bGwtMTEgew0KICAgIHJpZ2h0OiA5MS42NjY2NyUNCn0NCg0KLmNvbC14cy1wdWxsLTEyIHsNCiAgICByaWdodDogMTAwJQ0KfQ0KDQouY29sLXhzLXB1c2gtMCB7DQogICAgbGVmdDogYXV0bw0KfQ0KDQouY29sLXhzLXB1c2gtMSB7DQogICAgbGVmdDogOC4zMzMzMyUNCn0NCg0KLmNvbC14cy1wdXNoLTIgew0KICAgIGxlZnQ6IDE2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLXB1c2gtMyB7DQogICAgbGVmdDogMjUlDQp9DQoNCi5jb2wteHMtcHVzaC00IHsNCiAgICBsZWZ0OiAzMy4zMzMzMyUNCn0NCg0KLmNvbC14cy1wdXNoLTUgew0KICAgIGxlZnQ6IDQxLjY2NjY3JQ0KfQ0KDQouY29sLXhzLXB1c2gtNiB7DQogICAgbGVmdDogNTAlDQp9DQoNCi5jb2wteHMtcHVzaC03IHsNCiAgICBsZWZ0OiA1OC4zMzMzMyUNCn0NCg0KLmNvbC14cy1wdXNoLTggew0KICAgIGxlZnQ6IDY2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLXB1c2gtOSB7DQogICAgbGVmdDogNzUlDQp9DQoNCi5jb2wteHMtcHVzaC0xMCB7DQogICAgbGVmdDogODMuMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVzaC0xMSB7DQogICAgbGVmdDogOTEuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVzaC0xMiB7DQogICAgbGVmdDogMTAwJQ0KfQ0KDQouY29sLXhzLW9mZnNldC0wIHsNCiAgICBtYXJnaW4tbGVmdDogMCUNCn0NCg0KLmNvbC14cy1vZmZzZXQtMSB7DQogICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlDQp9DQoNCi5jb2wteHMtb2Zmc2V0LTIgew0KICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyUNCn0NCg0KLmNvbC14cy1vZmZzZXQtMyB7DQogICAgbWFyZ2luLWxlZnQ6IDI1JQ0KfQ0KDQouY29sLXhzLW9mZnNldC00IHsNCiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlDQp9DQoNCi5jb2wteHMtb2Zmc2V0LTUgew0KICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyUNCn0NCg0KLmNvbC14cy1vZmZzZXQtNiB7DQogICAgbWFyZ2luLWxlZnQ6IDUwJQ0KfQ0KDQouY29sLXhzLW9mZnNldC03IHsNCiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMlDQp9DQoNCi5jb2wteHMtb2Zmc2V0LTggew0KICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyUNCn0NCg0KLmNvbC14cy1vZmZzZXQtOSB7DQogICAgbWFyZ2luLWxlZnQ6IDc1JQ0KfQ0KDQouY29sLXhzLW9mZnNldC0xMCB7DQogICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJQ0KfQ0KDQouY29sLXhzLW9mZnNldC0xMSB7DQogICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY3JQ0KfQ0KDQouY29sLXhzLW9mZnNldC0xMiB7DQogICAgbWFyZ2luLWxlZnQ6IDEwMCUNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgew0KDQogICAgLmNvbC1zbS0xLA0KICAgIC5jb2wtc20tMiwNCiAgICAuY29sLXNtLTMsDQogICAgLmNvbC1zbS00LA0KICAgIC5jb2wtc20tNSwNCiAgICAuY29sLXNtLTYsDQogICAgLmNvbC1zbS03LA0KICAgIC5jb2wtc20tOCwNCiAgICAuY29sLXNtLTksDQogICAgLmNvbC1zbS0xMCwNCiAgICAuY29sLXNtLTExLA0KICAgIC5jb2wtc20tMTIgew0KICAgICAgICBmbG9hdDogbGVmdA0KICAgIH0NCg0KICAgIC5jb2wtc20tMSB7DQogICAgICAgIHdpZHRoOiA4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tMiB7DQogICAgICAgIHdpZHRoOiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTMgew0KICAgICAgICB3aWR0aDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1zbS00IHsNCiAgICAgICAgd2lkdGg6IDMzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tNSB7DQogICAgICAgIHdpZHRoOiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTYgew0KICAgICAgICB3aWR0aDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1zbS03IHsNCiAgICAgICAgd2lkdGg6IDU4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tOCB7DQogICAgICAgIHdpZHRoOiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTkgew0KICAgICAgICB3aWR0aDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1zbS0xMCB7DQogICAgICAgIHdpZHRoOiA4My4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTExIHsNCiAgICAgICAgd2lkdGg6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tMTIgew0KICAgICAgICB3aWR0aDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0wIHsNCiAgICAgICAgcmlnaHQ6IGF1dG8NCiAgICB9DQoNCiAgICAuY29sLXNtLXB1bGwtMSB7DQogICAgICAgIHJpZ2h0OiA4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0yIHsNCiAgICAgICAgcmlnaHQ6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0zIHsNCiAgICAgICAgcmlnaHQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC00IHsNCiAgICAgICAgcmlnaHQ6IDMzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC01IHsNCiAgICAgICAgcmlnaHQ6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC02IHsNCiAgICAgICAgcmlnaHQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC03IHsNCiAgICAgICAgcmlnaHQ6IDU4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC04IHsNCiAgICAgICAgcmlnaHQ6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC05IHsNCiAgICAgICAgcmlnaHQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0xMCB7DQogICAgICAgIHJpZ2h0OiA4My4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1bGwtMTEgew0KICAgICAgICByaWdodDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdWxsLTEyIHsNCiAgICAgICAgcmlnaHQ6IDEwMCUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtMCB7DQogICAgICAgIGxlZnQ6IGF1dG8NCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtMSB7DQogICAgICAgIGxlZnQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdXNoLTIgew0KICAgICAgICBsZWZ0OiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtMyB7DQogICAgICAgIGxlZnQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC00IHsNCiAgICAgICAgbGVmdDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdXNoLTUgew0KICAgICAgICBsZWZ0OiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtNiB7DQogICAgICAgIGxlZnQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC03IHsNCiAgICAgICAgbGVmdDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdXNoLTggew0KICAgICAgICBsZWZ0OiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtOSB7DQogICAgICAgIGxlZnQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC0xMCB7DQogICAgICAgIGxlZnQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC0xMSB7DQogICAgICAgIGxlZnQ6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC0xMiB7DQogICAgICAgIGxlZnQ6IDEwMCUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0wIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDAlDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtMSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tb2Zmc2V0LTIgew0KICAgICAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtMyB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAyNSUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC00IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tb2Zmc2V0LTUgew0KICAgICAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtNiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA1MCUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC03IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tb2Zmc2V0LTggew0KICAgICAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtOSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA3NSUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0xMCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0xMSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0xMiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxMDAlDQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSB7DQoNCiAgICAuY29sLW1kLTEsDQogICAgLmNvbC1tZC0yLA0KICAgIC5jb2wtbWQtMywNCiAgICAuY29sLW1kLTQsDQogICAgLmNvbC1tZC01LA0KICAgIC5jb2wtbWQtNiwNCiAgICAuY29sLW1kLTcsDQogICAgLmNvbC1tZC04LA0KICAgIC5jb2wtbWQtOSwNCiAgICAuY29sLW1kLTEwLA0KICAgIC5jb2wtbWQtMTEsDQogICAgLmNvbC1tZC0xMiB7DQogICAgICAgIGZsb2F0OiBsZWZ0DQogICAgfQ0KDQogICAgLmNvbC1tZC0xIHsNCiAgICAgICAgd2lkdGg6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC0yIHsNCiAgICAgICAgd2lkdGg6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtMyB7DQogICAgICAgIHdpZHRoOiAyNSUNCiAgICB9DQoNCiAgICAuY29sLW1kLTQgew0KICAgICAgICB3aWR0aDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC01IHsNCiAgICAgICAgd2lkdGg6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtNiB7DQogICAgICAgIHdpZHRoOiA1MCUNCiAgICB9DQoNCiAgICAuY29sLW1kLTcgew0KICAgICAgICB3aWR0aDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC04IHsNCiAgICAgICAgd2lkdGg6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtOSB7DQogICAgICAgIHdpZHRoOiA3NSUNCiAgICB9DQoNCiAgICAuY29sLW1kLTEwIHsNCiAgICAgICAgd2lkdGg6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtMTEgew0KICAgICAgICB3aWR0aDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC0xMiB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTAgew0KICAgICAgICByaWdodDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVsbC0xIHsNCiAgICAgICAgcmlnaHQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTIgew0KICAgICAgICByaWdodDogMTYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTMgew0KICAgICAgICByaWdodDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTQgew0KICAgICAgICByaWdodDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTUgew0KICAgICAgICByaWdodDogNDEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTYgew0KICAgICAgICByaWdodDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTcgew0KICAgICAgICByaWdodDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTggew0KICAgICAgICByaWdodDogNjYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTkgew0KICAgICAgICByaWdodDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTEwIHsNCiAgICAgICAgcmlnaHQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVsbC0xMSB7DQogICAgICAgIHJpZ2h0OiA5MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1bGwtMTIgew0KICAgICAgICByaWdodDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC0wIHsNCiAgICAgICAgbGVmdDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC0xIHsNCiAgICAgICAgbGVmdDogOC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1c2gtMiB7DQogICAgICAgIGxlZnQ6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC0zIHsNCiAgICAgICAgbGVmdDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTQgew0KICAgICAgICBsZWZ0OiAzMy4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1c2gtNSB7DQogICAgICAgIGxlZnQ6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC02IHsNCiAgICAgICAgbGVmdDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTcgew0KICAgICAgICBsZWZ0OiA1OC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1c2gtOCB7DQogICAgICAgIGxlZnQ6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC05IHsNCiAgICAgICAgbGVmdDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTEwIHsNCiAgICAgICAgbGVmdDogODMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTExIHsNCiAgICAgICAgbGVmdDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTEyIHsNCiAgICAgICAgbGVmdDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTAgew0KICAgICAgICBtYXJnaW4tbGVmdDogMCUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC0xIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1vZmZzZXQtMiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC0zIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTQgew0KICAgICAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1vZmZzZXQtNSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC02IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTcgew0KICAgICAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1vZmZzZXQtOCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC05IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTEwIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTExIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTEyIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMCUNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQoNCiAgICAuY29sLWxnLTEsDQogICAgLmNvbC1sZy0yLA0KICAgIC5jb2wtbGctMywNCiAgICAuY29sLWxnLTQsDQogICAgLmNvbC1sZy01LA0KICAgIC5jb2wtbGctNiwNCiAgICAuY29sLWxnLTcsDQogICAgLmNvbC1sZy04LA0KICAgIC5jb2wtbGctOSwNCiAgICAuY29sLWxnLTEwLA0KICAgIC5jb2wtbGctMTEsDQogICAgLmNvbC1sZy0xMiB7DQogICAgICAgIGZsb2F0OiBsZWZ0DQogICAgfQ0KDQogICAgLmNvbC1sZy0xIHsNCiAgICAgICAgd2lkdGg6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy0yIHsNCiAgICAgICAgd2lkdGg6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctMyB7DQogICAgICAgIHdpZHRoOiAyNSUNCiAgICB9DQoNCiAgICAuY29sLWxnLTQgew0KICAgICAgICB3aWR0aDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy01IHsNCiAgICAgICAgd2lkdGg6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctNiB7DQogICAgICAgIHdpZHRoOiA1MCUNCiAgICB9DQoNCiAgICAuY29sLWxnLTcgew0KICAgICAgICB3aWR0aDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy04IHsNCiAgICAgICAgd2lkdGg6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctOSB7DQogICAgICAgIHdpZHRoOiA3NSUNCiAgICB9DQoNCiAgICAuY29sLWxnLTEwIHsNCiAgICAgICAgd2lkdGg6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctMTEgew0KICAgICAgICB3aWR0aDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy0xMiB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTAgew0KICAgICAgICByaWdodDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVsbC0xIHsNCiAgICAgICAgcmlnaHQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTIgew0KICAgICAgICByaWdodDogMTYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTMgew0KICAgICAgICByaWdodDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTQgew0KICAgICAgICByaWdodDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTUgew0KICAgICAgICByaWdodDogNDEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTYgew0KICAgICAgICByaWdodDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTcgew0KICAgICAgICByaWdodDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTggew0KICAgICAgICByaWdodDogNjYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTkgew0KICAgICAgICByaWdodDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTEwIHsNCiAgICAgICAgcmlnaHQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVsbC0xMSB7DQogICAgICAgIHJpZ2h0OiA5MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1bGwtMTIgew0KICAgICAgICByaWdodDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC0wIHsNCiAgICAgICAgbGVmdDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC0xIHsNCiAgICAgICAgbGVmdDogOC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1c2gtMiB7DQogICAgICAgIGxlZnQ6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC0zIHsNCiAgICAgICAgbGVmdDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTQgew0KICAgICAgICBsZWZ0OiAzMy4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1c2gtNSB7DQogICAgICAgIGxlZnQ6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC02IHsNCiAgICAgICAgbGVmdDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTcgew0KICAgICAgICBsZWZ0OiA1OC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1c2gtOCB7DQogICAgICAgIGxlZnQ6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC05IHsNCiAgICAgICAgbGVmdDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTEwIHsNCiAgICAgICAgbGVmdDogODMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTExIHsNCiAgICAgICAgbGVmdDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTEyIHsNCiAgICAgICAgbGVmdDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTAgew0KICAgICAgICBtYXJnaW4tbGVmdDogMCUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC0xIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1vZmZzZXQtMiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC0zIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTQgew0KICAgICAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1vZmZzZXQtNSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC02IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTcgew0KICAgICAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1vZmZzZXQtOCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC05IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTEwIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTExIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTEyIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMCUNCiAgICB9DQp9DQoNCnRhYmxlIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQpjYXB0aW9uIHsNCiAgICBwYWRkaW5nLXRvcDogOHB4Ow0KICAgIHBhZGRpbmctYm90dG9tOiA4cHg7DQogICAgY29sb3I6ICM2NjY7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQp0aCB7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQoudGFibGUgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIG1heC13aWR0aDogMTAwJTsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4DQp9DQoNCi50YWJsZT50aGVhZD50cj50aCwNCi50YWJsZT50aGVhZD50cj50ZCwNCi50YWJsZT50Ym9keT50cj50aCwNCi50YWJsZT50Ym9keT50cj50ZCwNCi50YWJsZT50Zm9vdD50cj50aCwNCi50YWJsZT50Zm9vdD50cj50ZCB7DQogICAgcGFkZGluZzogOHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7DQogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQNCn0NCg0KLnRhYmxlPnRoZWFkPnRyPnRoIHsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOw0KICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGRkDQp9DQoNCi50YWJsZT5jYXB0aW9uK3RoZWFkPnRyOmZpcnN0LWNoaWxkPnRoLA0KLnRhYmxlPmNhcHRpb24rdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsDQoudGFibGU+Y29sZ3JvdXArdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGgsDQoudGFibGU+Y29sZ3JvdXArdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsDQoudGFibGU+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQ+dGgsDQoudGFibGU+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQ+dGQgew0KICAgIGJvcmRlci10b3A6IDANCn0NCg0KLnRhYmxlPnRib2R5K3Rib2R5IHsNCiAgICBib3JkZXItdG9wOiAycHggc29saWQgI2RkZA0KfQ0KDQoudGFibGUgLnRhYmxlIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmDQp9DQoNCi50YWJsZS1jb25kZW5zZWQ+dGhlYWQ+dHI+dGgsDQoudGFibGUtY29uZGVuc2VkPnRoZWFkPnRyPnRkLA0KLnRhYmxlLWNvbmRlbnNlZD50Ym9keT50cj50aCwNCi50YWJsZS1jb25kZW5zZWQ+dGJvZHk+dHI+dGQsDQoudGFibGUtY29uZGVuc2VkPnRmb290PnRyPnRoLA0KLnRhYmxlLWNvbmRlbnNlZD50Zm9vdD50cj50ZCB7DQogICAgcGFkZGluZzogNXB4DQp9DQoNCi50YWJsZS1ib3JkZXJlZCB7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZA0KfQ0KDQoudGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGgsDQoudGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQsDQoudGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGgsDQoudGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGQsDQoudGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGgsDQoudGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGQgew0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQNCn0NCg0KLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoLA0KLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkIHsNCiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHgNCn0NCg0KLnRhYmxlLXN0cmlwZWQ+dGJvZHk+dHI6bnRoLW9mLXR5cGUob2RkKSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYg0KfQ0KDQoudGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUNCn0NCg0KdGFibGUgY29sW2NsYXNzKj0iY29sLSJdIHsNCiAgICBwb3NpdGlvbjogc3RhdGljOw0KICAgIGZsb2F0OiBub25lOw0KICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbg0KfQ0KDQp0YWJsZSB0ZFtjbGFzcyo9ImNvbC0iXSwNCnRhYmxlIHRoW2NsYXNzKj0iY29sLSJdIHsNCiAgICBwb3NpdGlvbjogc3RhdGljOw0KICAgIGZsb2F0OiBub25lOw0KICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwNCn0NCg0KLnRhYmxlPnRoZWFkPnRyPnRkLmFjdGl2ZSwNCi50YWJsZT50aGVhZD50cj50aC5hY3RpdmUsDQoudGFibGU+dGhlYWQ+dHIuYWN0aXZlPnRkLA0KLnRhYmxlPnRoZWFkPnRyLmFjdGl2ZT50aCwNCi50YWJsZT50Ym9keT50cj50ZC5hY3RpdmUsDQoudGFibGU+dGJvZHk+dHI+dGguYWN0aXZlLA0KLnRhYmxlPnRib2R5PnRyLmFjdGl2ZT50ZCwNCi50YWJsZT50Ym9keT50ci5hY3RpdmU+dGgsDQoudGFibGU+dGZvb3Q+dHI+dGQuYWN0aXZlLA0KLnRhYmxlPnRmb290PnRyPnRoLmFjdGl2ZSwNCi50YWJsZT50Zm9vdD50ci5hY3RpdmU+dGQsDQoudGFibGU+dGZvb3Q+dHIuYWN0aXZlPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1DQp9DQoNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50ZC5hY3RpdmU6aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguYWN0aXZlOmhvdmVyLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLmFjdGl2ZTpob3Zlcj50ZCwNCi50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uYWN0aXZlLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLmFjdGl2ZTpob3Zlcj50aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZThlOA0KfQ0KDQoudGFibGU+dGhlYWQ+dHI+dGQuc3VjY2VzcywNCi50YWJsZT50aGVhZD50cj50aC5zdWNjZXNzLA0KLnRhYmxlPnRoZWFkPnRyLnN1Y2Nlc3M+dGQsDQoudGFibGU+dGhlYWQ+dHIuc3VjY2Vzcz50aCwNCi50YWJsZT50Ym9keT50cj50ZC5zdWNjZXNzLA0KLnRhYmxlPnRib2R5PnRyPnRoLnN1Y2Nlc3MsDQoudGFibGU+dGJvZHk+dHIuc3VjY2Vzcz50ZCwNCi50YWJsZT50Ym9keT50ci5zdWNjZXNzPnRoLA0KLnRhYmxlPnRmb290PnRyPnRkLnN1Y2Nlc3MsDQoudGFibGU+dGZvb3Q+dHI+dGguc3VjY2VzcywNCi50YWJsZT50Zm9vdD50ci5zdWNjZXNzPnRkLA0KLnRhYmxlPnRmb290PnRyLnN1Y2Nlc3M+dGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmU5YzYNCn0NCg0KLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRkLnN1Y2Nlc3M6aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguc3VjY2Vzczpob3ZlciwNCi50YWJsZS1ob3Zlcj50Ym9keT50ci5zdWNjZXNzOmhvdmVyPnRkLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyOmhvdmVyPi5zdWNjZXNzLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLnN1Y2Nlc3M6aG92ZXI+dGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNjOWUyYjQNCn0NCg0KLnRhYmxlPnRoZWFkPnRyPnRkLmluZm8sDQoudGFibGU+dGhlYWQ+dHI+dGguaW5mbywNCi50YWJsZT50aGVhZD50ci5pbmZvPnRkLA0KLnRhYmxlPnRoZWFkPnRyLmluZm8+dGgsDQoudGFibGU+dGJvZHk+dHI+dGQuaW5mbywNCi50YWJsZT50Ym9keT50cj50aC5pbmZvLA0KLnRhYmxlPnRib2R5PnRyLmluZm8+dGQsDQoudGFibGU+dGJvZHk+dHIuaW5mbz50aCwNCi50YWJsZT50Zm9vdD50cj50ZC5pbmZvLA0KLnRhYmxlPnRmb290PnRyPnRoLmluZm8sDQoudGFibGU+dGZvb3Q+dHIuaW5mbz50ZCwNCi50YWJsZT50Zm9vdD50ci5pbmZvPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNlOGYxDQp9DQoNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50ZC5pbmZvOmhvdmVyLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRoLmluZm86aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIuaW5mbzpob3Zlcj50ZCwNCi50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uaW5mbywNCi50YWJsZS1ob3Zlcj50Ym9keT50ci5pbmZvOmhvdmVyPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTdlMWVkDQp9DQoNCi50YWJsZT50aGVhZD50cj50ZC53YXJuaW5nLA0KLnRhYmxlPnRoZWFkPnRyPnRoLndhcm5pbmcsDQoudGFibGU+dGhlYWQ+dHIud2FybmluZz50ZCwNCi50YWJsZT50aGVhZD50ci53YXJuaW5nPnRoLA0KLnRhYmxlPnRib2R5PnRyPnRkLndhcm5pbmcsDQoudGFibGU+dGJvZHk+dHI+dGgud2FybmluZywNCi50YWJsZT50Ym9keT50ci53YXJuaW5nPnRkLA0KLnRhYmxlPnRib2R5PnRyLndhcm5pbmc+dGgsDQoudGFibGU+dGZvb3Q+dHI+dGQud2FybmluZywNCi50YWJsZT50Zm9vdD50cj50aC53YXJuaW5nLA0KLnRhYmxlPnRmb290PnRyLndhcm5pbmc+dGQsDQoudGFibGU+dGZvb3Q+dHIud2FybmluZz50aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZWJjYw0KfQ0KDQoudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQud2FybmluZzpob3ZlciwNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50aC53YXJuaW5nOmhvdmVyLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLndhcm5pbmc6aG92ZXI+dGQsDQoudGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXI+Lndhcm5pbmcsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIud2FybmluZzpob3Zlcj50aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZTJiNQ0KfQ0KDQoudGFibGU+dGhlYWQ+dHI+dGQuZGFuZ2VyLA0KLnRhYmxlPnRoZWFkPnRyPnRoLmRhbmdlciwNCi50YWJsZT50aGVhZD50ci5kYW5nZXI+dGQsDQoudGFibGU+dGhlYWQ+dHIuZGFuZ2VyPnRoLA0KLnRhYmxlPnRib2R5PnRyPnRkLmRhbmdlciwNCi50YWJsZT50Ym9keT50cj50aC5kYW5nZXIsDQoudGFibGU+dGJvZHk+dHIuZGFuZ2VyPnRkLA0KLnRhYmxlPnRib2R5PnRyLmRhbmdlcj50aCwNCi50YWJsZT50Zm9vdD50cj50ZC5kYW5nZXIsDQoudGFibGU+dGZvb3Q+dHI+dGguZGFuZ2VyLA0KLnRhYmxlPnRmb290PnRyLmRhbmdlcj50ZCwNCi50YWJsZT50Zm9vdD50ci5kYW5nZXI+dGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjZDENCn0NCg0KLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRkLmRhbmdlcjpob3ZlciwNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50aC5kYW5nZXI6aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIuZGFuZ2VyOmhvdmVyPnRkLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyOmhvdmVyPi5kYW5nZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIuZGFuZ2VyOmhvdmVyPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTRiYWMwDQp9DQoNCi50YWJsZS1yZXNwb25zaXZlIHsNCiAgICBvdmVyZmxvdy14OiBhdXRvOw0KICAgIG1pbi1oZWlnaHQ6IC4wMSUNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjdweCkgew0KICAgIC50YWJsZS1yZXNwb25zaXZlIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDE1Ljc1cHg7DQogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsNCiAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQNCiAgICB9DQoNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGUgew0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRoZWFkPnRyPnRoLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50aGVhZD50cj50ZCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGJvZHk+dHI+dGgsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRib2R5PnRyPnRkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50Zm9vdD50cj50aCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGZvb3Q+dHI+dGQgew0KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkIHsNCiAgICAgICAgYm9yZGVyOiAwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmZpcnN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50ZDpmaXJzdC1jaGlsZCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6Zmlyc3QtY2hpbGQsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmZpcnN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpmaXJzdC1jaGlsZCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGQ6Zmlyc3QtY2hpbGQgew0KICAgICAgICBib3JkZXItbGVmdDogMA0KICAgIH0NCg0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50ZDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50aDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50ZDpsYXN0LWNoaWxkIHsNCiAgICAgICAgYm9yZGVyLXJpZ2h0OiAwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGgsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQgew0KICAgICAgICBib3JkZXItYm90dG9tOiAwDQogICAgfQ0KfQ0KDQpmaWVsZHNldCB7DQogICAgcGFkZGluZzogMDsNCiAgICBtYXJnaW46IDA7DQogICAgYm9yZGVyOiAwOw0KICAgIG1pbi13aWR0aDogMA0KfQ0KDQpsZWdlbmQgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIHBhZGRpbmc6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCiAgICBmb250LXNpemU6IDIyLjVweDsNCiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsNCiAgICBjb2xvcjogIzMzMzsNCiAgICBib3JkZXI6IDA7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTUNCn0NCg0KbGFiZWwgew0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBtYXgtd2lkdGg6IDEwMCU7DQogICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkDQp9DQoNCmlucHV0W3R5cGU9InNlYXJjaCJdIHsNCiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7DQogICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3gNCn0NCg0KaW5wdXRbdHlwZT0icmFkaW8iXSwNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgIG1hcmdpbjogNHB4IDAgMDsNCiAgICBtYXJnaW4tdG9wOiAxcHggXDk7DQogICAgbGluZS1oZWlnaHQ6IG5vcm1hbA0KfQ0KDQppbnB1dFt0eXBlPSJmaWxlIl0gew0KICAgIGRpc3BsYXk6IGJsb2NrDQp9DQoNCmlucHV0W3R5cGU9InJhbmdlIl0gew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAxMDAlDQp9DQoNCnNlbGVjdFttdWx0aXBsZV0sDQpzZWxlY3Rbc2l6ZV0gew0KICAgIGhlaWdodDogYXV0bw0KfQ0KDQppbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXMsDQppbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLA0KaW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1cyB7DQogICAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7DQogICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOw0KICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4DQp9DQoNCm91dHB1dCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZy10b3A6IDdweDsNCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNDI4NTc7DQogICAgY29sb3I6ICM1NTUNCn0NCg0KLmZvcm0tY29udHJvbCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiAzNXB4Ow0KICAgIHBhZGRpbmc6IDZweCAxMnB4Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBjb2xvcjogIzU1NTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSk7DQogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzOw0KICAgIC1vLXRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7DQogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1cw0KfQ0KDQouZm9ybS1jb250cm9sOmZvY3VzIHsNCiAgICBib3JkZXItY29sb3I6ICM2NmFmZTk7DQogICAgb3V0bGluZTogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgLjYpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgLjYpDQp9DQoNCi5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIgew0KICAgIGNvbG9yOiAjNGE0OTQ5Ow0KICAgIG9wYWNpdHk6IDENCn0NCg0KLmZvcm0tY29udHJvbDotbXMtaW5wdXQtcGxhY2Vob2xkZXIgew0KICAgIGNvbG9yOiAjNGE0OTQ5DQp9DQoNCi5mb3JtLWNvbnRyb2w6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgew0KICAgIGNvbG9yOiAjNGE0OTQ5DQp9DQoNCi5mb3JtLWNvbnRyb2w6Oi1tcy1leHBhbmQgew0KICAgIGJvcmRlcjogMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouZm9ybS1jb250cm9sW2Rpc2FibGVkXSwNCi5mb3JtLWNvbnRyb2xbcmVhZG9ubHldLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7DQogICAgb3BhY2l0eTogMQ0KfQ0KDQouZm9ybS1jb250cm9sW2Rpc2FibGVkXSwNCmZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9sIHsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCnRleHRhcmVhLmZvcm0tY29udHJvbCB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCmlucHV0W3R5cGU9InNlYXJjaCJdIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmUNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7DQoNCiAgICBpbnB1dFt0eXBlPSJkYXRlIl0uZm9ybS1jb250cm9sLA0KICAgIGlucHV0W3R5cGU9InRpbWUiXS5mb3JtLWNvbnRyb2wsDQogICAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5mb3JtLWNvbnRyb2wsDQogICAgaW5wdXRbdHlwZT0ibW9udGgiXS5mb3JtLWNvbnRyb2wgew0KICAgICAgICBsaW5lLWhlaWdodDogMzVweA0KICAgIH0NCg0KICAgIGlucHV0W3R5cGU9ImRhdGUiXS5pbnB1dC1zbSwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0iZGF0ZSJdLmZvcm0tY29udHJvbCwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0iZGF0ZSJdLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPmlucHV0W3R5cGU9ImRhdGUiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9ImRhdGUiXSwNCiAgICBpbnB1dFt0eXBlPSJ0aW1lIl0uaW5wdXQtc20sDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9InRpbWUiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9InRpbWUiXS5pbnB1dC1ncm91cC1hZGRvbiwNCiAgICAuaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj5pbnB1dFt0eXBlPSJ0aW1lIl0uYnRuLA0KICAgIC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPSJ0aW1lIl0sDQogICAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5pbnB1dC1zbSwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sDQogICAgaW5wdXRbdHlwZT0ibW9udGgiXS5pbnB1dC1zbSwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0ibW9udGgiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9Im1vbnRoIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0ibW9udGgiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9Im1vbnRoIl0gew0KICAgICAgICBsaW5lLWhlaWdodDogMzFweA0KICAgIH0NCg0KICAgIGlucHV0W3R5cGU9ImRhdGUiXS5pbnB1dC1sZywNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0iZGF0ZSJdLmZvcm0tY29udHJvbCwNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0iZGF0ZSJdLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPmlucHV0W3R5cGU9ImRhdGUiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9ImRhdGUiXSwNCiAgICBpbnB1dFt0eXBlPSJ0aW1lIl0uaW5wdXQtbGcsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9InRpbWUiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9InRpbWUiXS5pbnB1dC1ncm91cC1hZGRvbiwNCiAgICAuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj5pbnB1dFt0eXBlPSJ0aW1lIl0uYnRuLA0KICAgIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPSJ0aW1lIl0sDQogICAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5pbnB1dC1sZywNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLWxnPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sDQogICAgaW5wdXRbdHlwZT0ibW9udGgiXS5pbnB1dC1sZywNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0ibW9udGgiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9Im1vbnRoIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLWxnPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0ibW9udGgiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9Im1vbnRoIl0gew0KICAgICAgICBsaW5lLWhlaWdodDogNDhweA0KICAgIH0NCn0NCg0KLmZvcm0tZ3JvdXAgew0KICAgIG1hcmdpbi1ib3R0b206IDE1cHgNCn0NCg0KLnJhZGlvLA0KLmNoZWNrYm94IHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbWFyZ2luLXRvcDogMTBweDsNCiAgICBtYXJnaW4tYm90dG9tOiAxMHB4DQp9DQoNCi5yYWRpbyBsYWJlbCwNCi5jaGVja2JveCBsYWJlbCB7DQogICAgbWluLWhlaWdodDogMjFweDsNCiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBmb250LXdlaWdodDogbm9ybWFsOw0KICAgIGN1cnNvcjogcG9pbnRlcg0KfQ0KDQoucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwNCi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT0icmFkaW8iXSwNCi5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJdLA0KLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgbWFyZ2luLWxlZnQ6IC0yMHB4Ow0KICAgIG1hcmdpbi10b3A6IDRweCBcOQ0KfQ0KDQoucmFkaW8rLnJhZGlvLA0KLmNoZWNrYm94Ky5jaGVja2JveCB7DQogICAgbWFyZ2luLXRvcDogLTVweA0KfQ0KDQoucmFkaW8taW5saW5lLA0KLmNoZWNrYm94LWlubGluZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgY3Vyc29yOiBwb2ludGVyDQp9DQoNCi5yYWRpby1pbmxpbmUrLnJhZGlvLWlubGluZSwNCi5jaGVja2JveC1pbmxpbmUrLmNoZWNrYm94LWlubGluZSB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tbGVmdDogMTBweA0KfQ0KDQppbnB1dFt0eXBlPSJyYWRpbyJdW2Rpc2FibGVkXSwNCmlucHV0W3R5cGU9InJhZGlvIl0uZGlzYWJsZWQsDQpmaWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT0icmFkaW8iXSwNCmlucHV0W3R5cGU9ImNoZWNrYm94Il1bZGlzYWJsZWRdLA0KaW5wdXRbdHlwZT0iY2hlY2tib3giXS5kaXNhYmxlZCwNCmZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCi5yYWRpby1pbmxpbmUuZGlzYWJsZWQsDQpmaWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvLWlubGluZSwNCi5jaGVja2JveC1pbmxpbmUuZGlzYWJsZWQsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94LWlubGluZSB7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZA0KfQ0KDQoucmFkaW8uZGlzYWJsZWQgbGFiZWwsDQpmaWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVsLA0KLmNoZWNrYm94LmRpc2FibGVkIGxhYmVsLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveCBsYWJlbCB7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZA0KfQ0KDQouZm9ybS1jb250cm9sLXN0YXRpYyB7DQogICAgcGFkZGluZy10b3A6IDdweDsNCiAgICBwYWRkaW5nLWJvdHRvbTogN3B4Ow0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgbWluLWhlaWdodDogMzZweA0KfQ0KDQouZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz4uZm9ybS1jb250cm9sLXN0YXRpYy5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uZm9ybS1jb250cm9sLXN0YXRpYy5idG4sDQouZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT4uZm9ybS1jb250cm9sLXN0YXRpYy5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtc20+LmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj4uZm9ybS1jb250cm9sLXN0YXRpYy5idG4gew0KICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICBwYWRkaW5nLXJpZ2h0OiAwDQp9DQoNCi5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT4uZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG4gew0KICAgIGhlaWdodDogMzFweDsNCiAgICBwYWRkaW5nOiA1cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNTsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCnNlbGVjdC5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT5zZWxlY3QuZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLXNtPnNlbGVjdC5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPnNlbGVjdC5idG4gew0KICAgIGhlaWdodDogMzFweDsNCiAgICBsaW5lLWhlaWdodDogMzFweA0KfQ0KDQp0ZXh0YXJlYS5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT50ZXh0YXJlYS5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtc20+dGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj50ZXh0YXJlYS5idG4sDQpzZWxlY3RbbXVsdGlwbGVdLmlucHV0LXNtLA0KLmlucHV0LWdyb3VwLXNtPnNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLXNtPnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj5zZWxlY3RbbXVsdGlwbGVdLmJ0biB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wgew0KICAgIGhlaWdodDogMzFweDsNCiAgICBwYWRkaW5nOiA1cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNTsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5mb3JtLWdyb3VwLXNtIHNlbGVjdC5mb3JtLWNvbnRyb2wgew0KICAgIGhlaWdodDogMzFweDsNCiAgICBsaW5lLWhlaWdodDogMzFweA0KfQ0KDQouZm9ybS1ncm91cC1zbSB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsDQouZm9ybS1ncm91cC1zbSBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHsNCiAgICBoZWlnaHQ6IDMxcHg7DQogICAgbWluLWhlaWdodDogMzRweDsNCiAgICBwYWRkaW5nOiA2cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNQ0KfQ0KDQouaW5wdXQtbGcsDQouaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbCwNCi5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRuIHsNCiAgICBoZWlnaHQ6IDQ4cHg7DQogICAgcGFkZGluZzogMTBweCAxNnB4Ow0KICAgIGZvbnQtc2l6ZTogMTlweDsNCiAgICBsaW5lLWhlaWdodDogMS4zMzMzMzsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCnNlbGVjdC5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz5zZWxlY3QuZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLWxnPnNlbGVjdC5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPnNlbGVjdC5idG4gew0KICAgIGhlaWdodDogNDhweDsNCiAgICBsaW5lLWhlaWdodDogNDhweA0KfQ0KDQp0ZXh0YXJlYS5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz50ZXh0YXJlYS5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtbGc+dGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj50ZXh0YXJlYS5idG4sDQpzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWxnLA0KLmlucHV0LWdyb3VwLWxnPnNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLWxnPnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj5zZWxlY3RbbXVsdGlwbGVdLmJ0biB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wgew0KICAgIGhlaWdodDogNDhweDsNCiAgICBwYWRkaW5nOiAxMHB4IDE2cHg7DQogICAgZm9udC1zaXplOiAxOXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmZvcm0tZ3JvdXAtbGcgc2VsZWN0LmZvcm0tY29udHJvbCB7DQogICAgaGVpZ2h0OiA0OHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiA0OHB4DQp9DQoNCi5mb3JtLWdyb3VwLWxnIHRleHRhcmVhLmZvcm0tY29udHJvbCwNCi5mb3JtLWdyb3VwLWxnIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHsNCiAgICBoZWlnaHQ6IGF1dG8NCn0NCg0KLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbC1zdGF0aWMgew0KICAgIGhlaWdodDogNDhweDsNCiAgICBtaW4taGVpZ2h0OiA0MHB4Ow0KICAgIHBhZGRpbmc6IDExcHggMTZweDsNCiAgICBmb250LXNpemU6IDE5cHg7DQogICAgbGluZS1oZWlnaHQ6IDEuMzMzMzMNCn0NCg0KLmhhcy1mZWVkYmFjayB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlDQp9DQoNCi5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbCB7DQogICAgcGFkZGluZy1yaWdodDogNDMuNzVweA0KfQ0KDQouZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAwOw0KICAgIHJpZ2h0OiAwOw0KICAgIHotaW5kZXg6IDI7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgd2lkdGg6IDM1cHg7DQogICAgaGVpZ2h0OiAzNXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAzNXB4Ow0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICBwb2ludGVyLWV2ZW50czogbm9uZQ0KfQ0KDQouaW5wdXQtbGcrLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1sZz4uZm9ybS1jb250cm9sKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWFkZG9uKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRuKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssDQouaW5wdXQtZ3JvdXAtbGcrLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wrLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgd2lkdGg6IDQ4cHg7DQogICAgaGVpZ2h0OiA0OHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiA0OHB4DQp9DQoNCi5pbnB1dC1zbSsuZm9ybS1jb250cm9sLWZlZWRiYWNrLA0KLmlucHV0LWdyb3VwLXNtPi5mb3JtLWNvbnRyb2wrLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24rLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG4rLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1zbSsuZm9ybS1jb250cm9sLWZlZWRiYWNrLA0KLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCsuZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICB3aWR0aDogMzFweDsNCiAgICBoZWlnaHQ6IDMxcHg7DQogICAgbGluZS1oZWlnaHQ6IDMxcHgNCn0NCg0KLmhhcy1zdWNjZXNzIC5oZWxwLWJsb2NrLA0KLmhhcy1zdWNjZXNzIC5jb250cm9sLWxhYmVsLA0KLmhhcy1zdWNjZXNzIC5yYWRpbywNCi5oYXMtc3VjY2VzcyAuY2hlY2tib3gsDQouaGFzLXN1Y2Nlc3MgLnJhZGlvLWlubGluZSwNCi5oYXMtc3VjY2VzcyAuY2hlY2tib3gtaW5saW5lLA0KLmhhcy1zdWNjZXNzLnJhZGlvIGxhYmVsLA0KLmhhcy1zdWNjZXNzLmNoZWNrYm94IGxhYmVsLA0KLmhhcy1zdWNjZXNzLnJhZGlvLWlubGluZSBsYWJlbCwNCi5oYXMtc3VjY2Vzcy5jaGVja2JveC1pbmxpbmUgbGFiZWwgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sIHsNCiAgICBib3JkZXItY29sb3I6ICMwMDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KTsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KQ0KfQ0KDQouaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbDpmb2N1cyB7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSksIDAgMCA2cHggIzMzMzsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KSwgMCAwIDZweCAjMzMzDQp9DQoNCi5oYXMtc3VjY2VzcyAuaW5wdXQtZ3JvdXAtYWRkb24gew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZlOWM2DQp9DQoNCi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouaGFzLXdhcm5pbmcgLmhlbHAtYmxvY2ssDQouaGFzLXdhcm5pbmcgLmNvbnRyb2wtbGFiZWwsDQouaGFzLXdhcm5pbmcgLnJhZGlvLA0KLmhhcy13YXJuaW5nIC5jaGVja2JveCwNCi5oYXMtd2FybmluZyAucmFkaW8taW5saW5lLA0KLmhhcy13YXJuaW5nIC5jaGVja2JveC1pbmxpbmUsDQouaGFzLXdhcm5pbmcucmFkaW8gbGFiZWwsDQouaGFzLXdhcm5pbmcuY2hlY2tib3ggbGFiZWwsDQouaGFzLXdhcm5pbmcucmFkaW8taW5saW5lIGxhYmVsLA0KLmhhcy13YXJuaW5nLmNoZWNrYm94LWlubGluZSBsYWJlbCB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wgew0KICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpDQp9DQoNCi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3VzIHsNCiAgICBib3JkZXItY29sb3I6ICMwMDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KSwgMCAwIDZweCAjMzMzOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgNnB4ICMzMzMNCn0NCg0KLmhhcy13YXJuaW5nIC5pbnB1dC1ncm91cC1hZGRvbiB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWViY2MNCn0NCg0KLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssDQouaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLA0KLmhhcy1lcnJvciAucmFkaW8sDQouaGFzLWVycm9yIC5jaGVja2JveCwNCi5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSwNCi5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSwNCi5oYXMtZXJyb3IucmFkaW8gbGFiZWwsDQouaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLA0KLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWwsDQouaGFzLWVycm9yLmNoZWNrYm94LWlubGluZSBsYWJlbCB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KLmhhcy1lcnJvciAuZm9ybS1jb250cm9sIHsNCiAgICBib3JkZXItY29sb3I6ICMwMDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KTsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KQ0KfQ0KDQouaGFzLWVycm9yIC5mb3JtLWNvbnRyb2w6Zm9jdXMgew0KICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgNnB4ICMzMzM7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSksIDAgMCA2cHggIzMzMw0KfQ0KDQouaGFzLWVycm9yIC5pbnB1dC1ncm91cC1hZGRvbiB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjZDENCn0NCg0KLmhhcy1lcnJvciAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouaGFzLWZlZWRiYWNrIGxhYmVsfi5mb3JtLWNvbnRyb2wtZmVlZGJhY2sgew0KICAgIHRvcDogMjZweA0KfQ0KDQouaGFzLWZlZWRiYWNrIGxhYmVsLnNyLW9ubHl+LmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgdG9wOiAwDQp9DQoNCi5oZWxwLWJsb2NrIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICBjb2xvcjogI2E2YTZhNg0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIHdpZHRoOiBhdXRvOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtc3RhdGljIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0biwNCiAgICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICB3aWR0aDogYXV0bw0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXA+LmZvcm0tY29udHJvbCB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5jb250cm9sLWxhYmVsIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAucmFkaW8sDQogICAgLmZvcm0taW5saW5lIC5jaGVja2JveCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAucmFkaW8gbGFiZWwsDQogICAgLmZvcm0taW5saW5lIC5jaGVja2JveCBsYWJlbCB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMA0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwNCiAgICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAwDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgICAgIHRvcDogMA0KICAgIH0NCn0NCg0KLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sDQouZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCwNCi5mb3JtLWhvcml6b250YWwgLnJhZGlvLWlubGluZSwNCi5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LWlubGluZSB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgIHBhZGRpbmctdG9wOiA3cHgNCn0NCg0KLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sDQouZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCB7DQogICAgbWluLWhlaWdodDogMjhweA0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwIHsNCiAgICBtYXJnaW4tbGVmdDogLTE1cHg7DQogICAgbWFyZ2luLXJpZ2h0OiAtMTVweA0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmJlZm9yZSwNCi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmFmdGVyIHsNCiAgICBjbGVhcjogYm90aA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbCB7DQogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0Ow0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICBwYWRkaW5nLXRvcDogN3B4DQogICAgfQ0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgcmlnaHQ6IDE1cHgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgew0KICAgIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtbGcgLmNvbnRyb2wtbGFiZWwgew0KICAgICAgICBwYWRkaW5nLXRvcDogMTFweDsNCiAgICAgICAgZm9udC1zaXplOiAxOXB4DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbCB7DQogICAgICAgIHBhZGRpbmctdG9wOiA2cHg7DQogICAgICAgIGZvbnQtc2l6ZTogMTNweA0KICAgIH0NCn0NCg0KLmJ0biB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIHBhZGRpbmc6IDZweCAxMnB4Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgdXNlci1zZWxlY3Q6IG5vbmUNCn0NCg0KLmJ0bjpmb2N1cywNCi5idG4uZm9jdXMsDQouYnRuOmFjdGl2ZTpmb2N1cywNCi5idG46YWN0aXZlLmZvY3VzLA0KLmJ0bi5hY3RpdmU6Zm9jdXMsDQouYnRuLmFjdGl2ZS5mb2N1cyB7DQogICAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7DQogICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOw0KICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4DQp9DQoNCi5idG46aG92ZXIsDQouYnRuOmZvY3VzLA0KLmJ0bi5mb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lDQp9DQoNCi5idG46YWN0aXZlLA0KLmJ0bi5hY3RpdmUgew0KICAgIG91dGxpbmU6IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIC4xMjUpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIC4xMjUpDQp9DQoNCi5idG4uZGlzYWJsZWQsDQouYnRuW2Rpc2FibGVkXSwNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuIHsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOw0KICAgIG9wYWNpdHk6IC42NTsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjUpOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsNCiAgICBib3gtc2hhZG93OiBub25lDQp9DQoNCmEuYnRuLmRpc2FibGVkLA0KZmllbGRzZXRbZGlzYWJsZWRdIGEuYnRuIHsNCiAgICBwb2ludGVyLWV2ZW50czogbm9uZQ0KfQ0KDQouYnRuLWRlZmF1bHQgew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5idG4tZGVmYXVsdDpmb2N1cywNCi5idG4tZGVmYXVsdC5mb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1kZWZhdWx0OmhvdmVyIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2Ow0KICAgIGJvcmRlci1jb2xvcjogIzEwNDBkMQ0KfQ0KDQouYnRuLWRlZmF1bHQ6YWN0aXZlLA0KLmJ0bi1kZWZhdWx0LmFjdGl2ZSwNCi5vcGVuPi5idG4tZGVmYXVsdC5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7DQogICAgYm9yZGVyLWNvbG9yOiAjMTA0MGQxDQp9DQoNCi5idG4tZGVmYXVsdDphY3RpdmU6aG92ZXIsDQouYnRuLWRlZmF1bHQ6YWN0aXZlOmZvY3VzLA0KLmJ0bi1kZWZhdWx0OmFjdGl2ZS5mb2N1cywNCi5idG4tZGVmYXVsdC5hY3RpdmU6aG92ZXIsDQouYnRuLWRlZmF1bHQuYWN0aXZlOmZvY3VzLA0KLmJ0bi1kZWZhdWx0LmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4tZGVmYXVsdC5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZDRkNDsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1kZWZhdWx0OmFjdGl2ZSwNCi5idG4tZGVmYXVsdC5hY3RpdmUsDQoub3Blbj4uYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4tZGVmYXVsdC5kaXNhYmxlZDpob3ZlciwNCi5idG4tZGVmYXVsdC5kaXNhYmxlZDpmb2N1cywNCi5idG4tZGVmYXVsdC5kaXNhYmxlZC5mb2N1cywNCi5idG4tZGVmYXVsdFtkaXNhYmxlZF06aG92ZXIsDQouYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdC5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLmJ0bi1kZWZhdWx0IC5iYWRnZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZg0KfQ0KDQouYnRuLXByaW1hcnkgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWY7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5idG4tcHJpbWFyeTpmb2N1cywNCi5idG4tcHJpbWFyeS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzExNDNkYTsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1wcmltYXJ5OmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0M2RhOw0KICAgIGJvcmRlci1jb2xvcjogIzEwNDBkMQ0KfQ0KDQouYnRuLXByaW1hcnk6YWN0aXZlLA0KLmJ0bi1wcmltYXJ5LmFjdGl2ZSwNCi5vcGVuPi5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMxMTQzZGE7DQogICAgYm9yZGVyLWNvbG9yOiAjMTA0MGQxDQp9DQoNCi5idG4tcHJpbWFyeTphY3RpdmU6aG92ZXIsDQouYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLA0KLmJ0bi1wcmltYXJ5OmFjdGl2ZS5mb2N1cywNCi5idG4tcHJpbWFyeS5hY3RpdmU6aG92ZXIsDQouYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLA0KLmJ0bi1wcmltYXJ5LmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzBlMzliOTsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1wcmltYXJ5OmFjdGl2ZSwNCi5idG4tcHJpbWFyeS5hY3RpdmUsDQoub3Blbj4uYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4tcHJpbWFyeS5kaXNhYmxlZDpob3ZlciwNCi5idG4tcHJpbWFyeS5kaXNhYmxlZDpmb2N1cywNCi5idG4tcHJpbWFyeS5kaXNhYmxlZC5mb2N1cywNCi5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsDQouYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZjsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLmJ0bi1wcmltYXJ5IC5iYWRnZSB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLXN1Y2Nlc3Mgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzYzc2M2Q7DQogICAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkDQp9DQoNCi5idG4tc3VjY2Vzczpmb2N1cywNCi5idG4tc3VjY2Vzcy5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJiNTQyYzsNCiAgICBib3JkZXItY29sb3I6ICMxMTIxMTENCn0NCg0KLmJ0bi1zdWNjZXNzOmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmI1NDJjOw0KICAgIGJvcmRlci1jb2xvcjogIzI3NGQyOA0KfQ0KDQouYnRuLXN1Y2Nlc3M6YWN0aXZlLA0KLmJ0bi1zdWNjZXNzLmFjdGl2ZSwNCi5vcGVuPi5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyYjU0MmM7DQogICAgYm9yZGVyLWNvbG9yOiAjMjc0ZDI4DQp9DQoNCi5idG4tc3VjY2VzczphY3RpdmU6aG92ZXIsDQouYnRuLXN1Y2Nlc3M6YWN0aXZlOmZvY3VzLA0KLmJ0bi1zdWNjZXNzOmFjdGl2ZS5mb2N1cywNCi5idG4tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsDQouYnRuLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLA0KLmJ0bi1zdWNjZXNzLmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzFmM2QxZjsNCiAgICBib3JkZXItY29sb3I6ICMxMTIxMTENCn0NCg0KLmJ0bi1zdWNjZXNzOmFjdGl2ZSwNCi5idG4tc3VjY2Vzcy5hY3RpdmUsDQoub3Blbj4uYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4tc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwNCi5idG4tc3VjY2Vzcy5kaXNhYmxlZDpmb2N1cywNCi5idG4tc3VjY2Vzcy5kaXNhYmxlZC5mb2N1cywNCi5idG4tc3VjY2Vzc1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3M6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcy5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzNjNzYzZDsNCiAgICBib3JkZXItY29sb3I6ICMzYzc2M2QNCn0NCg0KLmJ0bi1zdWNjZXNzIC5iYWRnZSB7DQogICAgY29sb3I6ICMzYzc2M2Q7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLWluZm8gew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGY7DQogICAgYm9yZGVyLWNvbG9yOiAjMzE3MDhmDQp9DQoNCi5idG4taW5mbzpmb2N1cywNCi5idG4taW5mby5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI0NTI2OTsNCiAgICBib3JkZXItY29sb3I6ICMxMDI2MzANCn0NCg0KLmJ0bi1pbmZvOmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQ1MjY5Ow0KICAgIGJvcmRlci1jb2xvcjogIzIxNGM2MQ0KfQ0KDQouYnRuLWluZm86YWN0aXZlLA0KLmJ0bi1pbmZvLmFjdGl2ZSwNCi5vcGVuPi5idG4taW5mby5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNDUyNjk7DQogICAgYm9yZGVyLWNvbG9yOiAjMjE0YzYxDQp9DQoNCi5idG4taW5mbzphY3RpdmU6aG92ZXIsDQouYnRuLWluZm86YWN0aXZlOmZvY3VzLA0KLmJ0bi1pbmZvOmFjdGl2ZS5mb2N1cywNCi5idG4taW5mby5hY3RpdmU6aG92ZXIsDQouYnRuLWluZm8uYWN0aXZlOmZvY3VzLA0KLmJ0bi1pbmZvLmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4taW5mby5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzFiM2Q0ZTsNCiAgICBib3JkZXItY29sb3I6ICMxMDI2MzANCn0NCg0KLmJ0bi1pbmZvOmFjdGl2ZSwNCi5idG4taW5mby5hY3RpdmUsDQoub3Blbj4uYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4taW5mby5kaXNhYmxlZDpob3ZlciwNCi5idG4taW5mby5kaXNhYmxlZDpmb2N1cywNCi5idG4taW5mby5kaXNhYmxlZC5mb2N1cywNCi5idG4taW5mb1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLWluZm9bZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1pbmZvW2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzMxNzA4ZjsNCiAgICBib3JkZXItY29sb3I6ICMzMTcwOGYNCn0NCg0KLmJ0bi1pbmZvIC5iYWRnZSB7DQogICAgY29sb3I6ICMzMTcwOGY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLXdhcm5pbmcgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4YTZkM2I7DQogICAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiDQp9DQoNCi5idG4td2FybmluZzpmb2N1cywNCi5idG4td2FybmluZy5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzY2NTEyYzsNCiAgICBib3JkZXItY29sb3I6ICMzMTI2MTUNCn0NCg0KLmJ0bi13YXJuaW5nOmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY1MTJjOw0KICAgIGJvcmRlci1jb2xvcjogIzVmNGIyOQ0KfQ0KDQouYnRuLXdhcm5pbmc6YWN0aXZlLA0KLmJ0bi13YXJuaW5nLmFjdGl2ZSwNCi5vcGVuPi5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjUxMmM7DQogICAgYm9yZGVyLWNvbG9yOiAjNWY0YjI5DQp9DQoNCi5idG4td2FybmluZzphY3RpdmU6aG92ZXIsDQouYnRuLXdhcm5pbmc6YWN0aXZlOmZvY3VzLA0KLmJ0bi13YXJuaW5nOmFjdGl2ZS5mb2N1cywNCi5idG4td2FybmluZy5hY3RpdmU6aG92ZXIsDQouYnRuLXdhcm5pbmcuYWN0aXZlOmZvY3VzLA0KLmJ0bi13YXJuaW5nLmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRkM2QyMTsNCiAgICBib3JkZXItY29sb3I6ICMzMTI2MTUNCn0NCg0KLmJ0bi13YXJuaW5nOmFjdGl2ZSwNCi5idG4td2FybmluZy5hY3RpdmUsDQoub3Blbj4uYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwNCi5idG4td2FybmluZy5kaXNhYmxlZDpmb2N1cywNCi5idG4td2FybmluZy5kaXNhYmxlZC5mb2N1cywNCi5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYjsNCiAgICBib3JkZXItY29sb3I6ICM4YTZkM2INCn0NCg0KLmJ0bi13YXJuaW5nIC5iYWRnZSB7DQogICAgY29sb3I6ICM4YTZkM2I7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLWRhbmdlciB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2E5NDQ0MjsNCiAgICBib3JkZXItY29sb3I6ICNhOTQ0NDINCn0NCg0KLmJ0bi1kYW5nZXI6Zm9jdXMsDQouYnRuLWRhbmdlci5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzg0MzUzNDsNCiAgICBib3JkZXItY29sb3I6ICM0ZDFmMWUNCn0NCg0KLmJ0bi1kYW5nZXI6aG92ZXIgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4NDM1MzQ7DQogICAgYm9yZGVyLWNvbG9yOiAjN2QzMjMxDQp9DQoNCi5idG4tZGFuZ2VyOmFjdGl2ZSwNCi5idG4tZGFuZ2VyLmFjdGl2ZSwNCi5vcGVuPi5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzg0MzUzNDsNCiAgICBib3JkZXItY29sb3I6ICM3ZDMyMzENCn0NCg0KLmJ0bi1kYW5nZXI6YWN0aXZlOmhvdmVyLA0KLmJ0bi1kYW5nZXI6YWN0aXZlOmZvY3VzLA0KLmJ0bi1kYW5nZXI6YWN0aXZlLmZvY3VzLA0KLmJ0bi1kYW5nZXIuYWN0aXZlOmhvdmVyLA0KLmJ0bi1kYW5nZXIuYWN0aXZlOmZvY3VzLA0KLmJ0bi1kYW5nZXIuYWN0aXZlLmZvY3VzLA0KLm9wZW4+LmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLA0KLm9wZW4+LmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlLmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmIyYjJhOw0KICAgIGJvcmRlci1jb2xvcjogIzRkMWYxZQ0KfQ0KDQouYnRuLWRhbmdlcjphY3RpdmUsDQouYnRuLWRhbmdlci5hY3RpdmUsDQoub3Blbj4uYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGUgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUNCn0NCg0KLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsDQouYnRuLWRhbmdlci5kaXNhYmxlZDpmb2N1cywNCi5idG4tZGFuZ2VyLmRpc2FibGVkLmZvY3VzLA0KLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmhvdmVyLA0KLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVyLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTk0NDQyOw0KICAgIGJvcmRlci1jb2xvcjogI2E5NDQ0Mg0KfQ0KDQouYnRuLWRhbmdlciAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjYTk0NDQyOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLmJ0bi1saW5rIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCiAgICBmb250LXdlaWdodDogbm9ybWFsOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1saW5rLA0KLmJ0bi1saW5rOmFjdGl2ZSwNCi5idG4tbGluay5hY3RpdmUsDQouYnRuLWxpbmtbZGlzYWJsZWRdLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluayB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOw0KICAgIGJveC1zaGFkb3c6IG5vbmUNCn0NCg0KLmJ0bi1saW5rLA0KLmJ0bi1saW5rOmhvdmVyLA0KLmJ0bi1saW5rOmZvY3VzLA0KLmJ0bi1saW5rOmFjdGl2ZSB7DQogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouYnRuLWxpbms6aG92ZXIsDQouYnRuLWxpbms6Zm9jdXMgew0KICAgIGNvbG9yOiAjMGYzY2MzOw0KICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCi5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluazpob3ZlciwNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6Zm9jdXMgew0KICAgIGNvbG9yOiAjNzc3Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZQ0KfQ0KDQouYnRuLWxnLA0KLmJ0bi1ncm91cC1sZz4uYnRuIHsNCiAgICBwYWRkaW5nOiAxMHB4IDE2cHg7DQogICAgZm9udC1zaXplOiAxOXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1zbSwNCi5idG4tZ3JvdXAtc20+LmJ0biB7DQogICAgcGFkZGluZzogNXB4IDEwcHg7DQogICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjU7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLXhzLA0KLmJ0bi1ncm91cC14cz4uYnRuIHsNCiAgICBwYWRkaW5nOiAxcHggNXB4Ow0KICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICBsaW5lLWhlaWdodDogMS41Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ibG9jayB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgd2lkdGg6IDEwMCUNCn0NCg0KLmJ0bi1ibG9jaysuYnRuLWJsb2NrIHsNCiAgICBtYXJnaW4tdG9wOiA1cHgNCn0NCg0KaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLWJsb2NrLA0KaW5wdXRbdHlwZT0icmVzZXQiXS5idG4tYmxvY2ssDQppbnB1dFt0eXBlPSJidXR0b24iXS5idG4tYmxvY2sgew0KICAgIHdpZHRoOiAxMDAlDQp9DQoNCi5mYWRlIHsNCiAgICBvcGFjaXR5OiAwOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAuMTVzIGxpbmVhcjsNCiAgICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IC4xNXMgbGluZWFyOw0KICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjE1cyBsaW5lYXINCn0NCg0KLmZhZGUuaW4gew0KICAgIG9wYWNpdHk6IDENCn0NCg0KLmNvbGxhcHNlIHsNCiAgICBkaXNwbGF5OiBub25lDQp9DQoNCi5jb2xsYXBzZS5pbiB7DQogICAgZGlzcGxheTogYmxvY2sNCn0NCg0KdHIuY29sbGFwc2UuaW4gew0KICAgIGRpc3BsYXk6IHRhYmxlLXJvdw0KfQ0KDQp0Ym9keS5jb2xsYXBzZS5pbiB7DQogICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwDQp9DQoNCi5jb2xsYXBzaW5nIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgaGVpZ2h0OiAwOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7DQogICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5Ow0KICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogLjM1czsNCiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuMzVzOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7DQogICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UNCn0NCg0KLmNhcmV0IHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgd2lkdGg6IDA7DQogICAgaGVpZ2h0OiAwOw0KICAgIG1hcmdpbi1sZWZ0OiAycHg7DQogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCiAgICBib3JkZXItdG9wOiA0cHggZGFzaGVkOw0KICAgIGJvcmRlci10b3A6IDRweCBzb2xpZCBcOTsNCiAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50DQp9DQoNCi5kcm9wdXAsDQouZHJvcGRvd24gew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZQ0KfQ0KDQouZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHsNCiAgICBvdXRsaW5lOiAwDQp9DQoNCi5kcm9wZG93bi1tZW51IHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAxMDAlOw0KICAgIGxlZnQ6IDA7DQogICAgei1pbmRleDogMTAwMDsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIG1pbi13aWR0aDogMTYwcHg7DQogICAgcGFkZGluZzogNXB4IDA7DQogICAgbWFyZ2luOiAycHggMCAwOw0KICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgZm9udC1zaXplOiAxNXB4Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjE1KTsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIC4xNzUpOw0KICAgIGJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLCAwLCAwLCAuMTc1KTsNCiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94DQp9DQoNCi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQgew0KICAgIHJpZ2h0OiAwOw0KICAgIGxlZnQ6IGF1dG8NCn0NCg0KLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgew0KICAgIGhlaWdodDogMXB4Ow0KICAgIG1hcmdpbjogOS41cHggMDsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTUNCn0NCg0KLmRyb3Bkb3duLW1lbnU+bGk+YSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZzogM3B4IDIwcHg7DQogICAgY2xlYXI6IGJvdGg7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBjb2xvcjogIzMzMzsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwDQp9DQoNCi5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXIsDQouZHJvcGRvd24tbWVudT5saT5hOmZvY3VzIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgY29sb3I6ICMyNjI2MjY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNQ0KfQ0KDQouZHJvcGRvd24tbWVudT4uYWN0aXZlPmEsDQouZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsDQouZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBvdXRsaW5lOiAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWYNCn0NCg0KLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsDQouZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwNCi5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICBjb2xvcjogIzc3Nw0KfQ0KDQouZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwNCi5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICBmaWx0ZXI6IHByb2dpZDogRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsNCn0NCg0KLm9wZW4+LmRyb3Bkb3duLW1lbnUgew0KICAgIGRpc3BsYXk6IGJsb2NrDQp9DQoNCi5vcGVuPmEgew0KICAgIG91dGxpbmU6IDANCn0NCg0KLmRyb3Bkb3duLW1lbnUtcmlnaHQgew0KICAgIGxlZnQ6IGF1dG87DQogICAgcmlnaHQ6IDANCn0NCg0KLmRyb3Bkb3duLW1lbnUtbGVmdCB7DQogICAgbGVmdDogMDsNCiAgICByaWdodDogYXV0bw0KfQ0KDQouZHJvcGRvd24taGVhZGVyIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBwYWRkaW5nOiAzcHggMjBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNDI4NTc7DQogICAgY29sb3I6ICM3Nzc7DQogICAgd2hpdGUtc3BhY2U6IG5vd3JhcA0KfQ0KDQouZHJvcGRvd24tYmFja2Ryb3Agew0KICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICBsZWZ0OiAwOw0KICAgIHJpZ2h0OiAwOw0KICAgIGJvdHRvbTogMDsNCiAgICB0b3A6IDA7DQogICAgei1pbmRleDogOTkwDQp9DQoNCi5wdWxsLXJpZ2h0Pi5kcm9wZG93bi1tZW51IHsNCiAgICByaWdodDogMDsNCiAgICBsZWZ0OiBhdXRvDQp9DQoNCi5kcm9wdXAgLmNhcmV0LA0KLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldCB7DQogICAgYm9yZGVyLXRvcDogMDsNCiAgICBib3JkZXItYm90dG9tOiA0cHggZGFzaGVkOw0KICAgIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCBcOTsNCiAgICBjb250ZW50OiAiIg0KfQ0KDQouZHJvcHVwIC5kcm9wZG93bi1tZW51LA0KLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHsNCiAgICB0b3A6IGF1dG87DQogICAgYm90dG9tOiAxMDAlOw0KICAgIG1hcmdpbi1ib3R0b206IDJweA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KICAgIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUgew0KICAgICAgICByaWdodDogMDsNCiAgICAgICAgbGVmdDogYXV0bw0KICAgIH0NCg0KICAgIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUtbGVmdCB7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIHJpZ2h0OiBhdXRvDQogICAgfQ0KfQ0KDQouYnRuLWdyb3VwLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQp9DQoNCi5idG4tZ3JvdXA+LmJ0biwNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0biB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bjpob3ZlciwNCi5idG4tZ3JvdXA+LmJ0bjpmb2N1cywNCi5idG4tZ3JvdXA+LmJ0bjphY3RpdmUsDQouYnRuLWdyb3VwPi5idG4uYWN0aXZlLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmhvdmVyLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmZvY3VzLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmFjdGl2ZSwNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi5hY3RpdmUgew0KICAgIHotaW5kZXg6IDINCn0NCg0KLmJ0bi1ncm91cCAuYnRuKy5idG4sDQouYnRuLWdyb3VwIC5idG4rLmJ0bi1ncm91cCwNCi5idG4tZ3JvdXAgLmJ0bi1ncm91cCsuYnRuLA0KLmJ0bi1ncm91cCAuYnRuLWdyb3VwKy5idG4tZ3JvdXAgew0KICAgIG1hcmdpbi1sZWZ0OiAtMXB4DQp9DQoNCi5idG4tdG9vbGJhciB7DQogICAgbWFyZ2luLWxlZnQ6IC01cHgNCn0NCg0KLmJ0bi10b29sYmFyOmJlZm9yZSwNCi5idG4tdG9vbGJhcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5idG4tdG9vbGJhcjphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KLmJ0bi10b29sYmFyIC5idG4sDQouYnRuLXRvb2xiYXIgLmJ0bi1ncm91cCwNCi5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAgew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5idG4tdG9vbGJhcj4uYnRuLA0KLmJ0bi10b29sYmFyPi5idG4tZ3JvdXAsDQouYnRuLXRvb2xiYXI+LmlucHV0LWdyb3VwIHsNCiAgICBtYXJnaW4tbGVmdDogNXB4DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGQgew0KICAgIG1hcmdpbi1sZWZ0OiAwDQp9DQoNCi5idG4tZ3JvdXA+LmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cD4uYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksDQouYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkgew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwPi5idG4tZ3JvdXAgew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpPi5idG4gew0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cD4uYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk+LmJ0bjpsYXN0LWNoaWxkLA0KLmJ0bi1ncm91cD4uYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk+LmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cD4uYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCk+LmJ0bjpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsDQouYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgb3V0bGluZTogMA0KfQ0KDQouYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgcGFkZGluZy1sZWZ0OiA4cHg7DQogICAgcGFkZGluZy1yaWdodDogOHB4DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bi1sZysuZHJvcGRvd24tdG9nZ2xlLA0KLmJ0bi1ncm91cC1sZy5idG4tZ3JvdXA+LmJ0bisuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7DQogICAgcGFkZGluZy1yaWdodDogMTJweA0KfQ0KDQouYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAuMTI1KTsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAuMTI1KQ0KfQ0KDQouYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tbGluayB7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOw0KICAgIGJveC1zaGFkb3c6IG5vbmUNCn0NCg0KLmJ0biAuY2FyZXQgew0KICAgIG1hcmdpbi1sZWZ0OiAwDQp9DQoNCi5idG4tbGcgLmNhcmV0LA0KLmJ0bi1ncm91cC1sZz4uYnRuIC5jYXJldCB7DQogICAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7DQogICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMA0KfQ0KDQouZHJvcHVwIC5idG4tbGcgLmNhcmV0LA0KLmRyb3B1cCAuYnRuLWdyb3VwLWxnPi5idG4gLmNhcmV0IHsNCiAgICBib3JkZXItd2lkdGg6IDAgNXB4IDVweA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4sDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXAsDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA+LmJ0biB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZmxvYXQ6IG5vbmU7DQogICAgd2lkdGg6IDEwMCU7DQogICAgbWF4LXdpZHRoOiAxMDAlDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDpiZWZvcmUsDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cD4uYnRuIHsNCiAgICBmbG9hdDogbm9uZQ0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4rLmJ0biwNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bisuYnRuLWdyb3VwLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwKy5idG4sDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXArLmJ0bi1ncm91cCB7DQogICAgbWFyZ2luLXRvcDogLTFweDsNCiAgICBtYXJnaW4tbGVmdDogMA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHsNCiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKT4uYnRuOmxhc3QtY2hpbGQsDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKT4uZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG46Zmlyc3QtY2hpbGQgew0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cC1qdXN0aWZpZWQgew0KICAgIGRpc3BsYXk6IHRhYmxlOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIHRhYmxlLWxheW91dDogZml4ZWQ7DQogICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZQ0KfQ0KDQouYnRuLWdyb3VwLWp1c3RpZmllZD4uYnRuLA0KLmJ0bi1ncm91cC1qdXN0aWZpZWQ+LmJ0bi1ncm91cCB7DQogICAgZmxvYXQ6IG5vbmU7DQogICAgZGlzcGxheTogdGFibGUtY2VsbDsNCiAgICB3aWR0aDogMSUNCn0NCg0KLmJ0bi1ncm91cC1qdXN0aWZpZWQ+LmJ0bi1ncm91cCAuYnRuIHsNCiAgICB3aWR0aDogMTAwJQ0KfQ0KDQouYnRuLWdyb3VwLWp1c3RpZmllZD4uYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHsNCiAgICBsZWZ0OiBhdXRvDQp9DQoNCltkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdPi5idG4gaW5wdXRbdHlwZT0icmFkaW8iXSwNCltkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdPi5idG4gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwNCltkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdPi5idG4tZ3JvdXA+LmJ0biBpbnB1dFt0eXBlPSJyYWRpbyJdLA0KW2RhdGEtdG9nZ2xlPSJidXR0b25zIl0+LmJ0bi1ncm91cD4uYnRuIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBjbGlwOiByZWN0KDAsIDAsIDAsIDApOw0KICAgIHBvaW50ZXItZXZlbnRzOiBub25lDQp9DQoNCi5pbnB1dC1ncm91cCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IHRhYmxlOw0KICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGUNCn0NCg0KLmlucHV0LWdyb3VwW2NsYXNzKj0iY29sLSJdIHsNCiAgICBmbG9hdDogbm9uZTsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgcGFkZGluZy1yaWdodDogMA0KfQ0KDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHotaW5kZXg6IDI7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgd2lkdGg6IDEwMCU7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmb2N1cyB7DQogICAgei1pbmRleDogMw0KfQ0KDQouaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtYnRuLA0KLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwNCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksDQouaW5wdXQtZ3JvdXAtYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1idG4gew0KICAgIHdpZHRoOiAxJTsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUNCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uIHsNCiAgICBwYWRkaW5nOiA2cHggMTJweDsNCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMTsNCiAgICBjb2xvcjogIzU1NTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LXNtLA0KLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5pbnB1dC1ncm91cC1hZGRvbi5idG4gew0KICAgIHBhZGRpbmc6IDVweCAxMHB4Ow0KICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uaW5wdXQtZ3JvdXAtYWRkb24uYnRuIHsNCiAgICBwYWRkaW5nOiAxMHB4IDE2cHg7DQogICAgZm9udC1zaXplOiAxOXB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uIGlucHV0W3R5cGU9InJhZGlvIl0sDQouaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7DQogICAgbWFyZ2luLXRvcDogMA0KfQ0KDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmaXJzdC1jaGlsZCwNCi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCwNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0biwNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0bi1ncm91cD4uYnRuLA0KLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xlLA0KLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksDQouaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpPi5idG4gew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwDQp9DQoNCi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLXJpZ2h0OiAwDQp9DQoNCi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsDQouaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCwNCi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLA0KLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5idG4tZ3JvdXA+LmJ0biwNCi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xlLA0KLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLA0KLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG4gew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQouaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLWxlZnQ6IDANCn0NCg0KLmlucHV0LWdyb3VwLWJ0biB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZvbnQtc2l6ZTogMDsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwDQp9DQoNCi5pbnB1dC1ncm91cC1idG4+LmJ0biB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlDQp9DQoNCi5pbnB1dC1ncm91cC1idG4+LmJ0bisuYnRuIHsNCiAgICBtYXJnaW4tbGVmdDogLTFweA0KfQ0KDQouaW5wdXQtZ3JvdXAtYnRuPi5idG46aG92ZXIsDQouaW5wdXQtZ3JvdXAtYnRuPi5idG46Zm9jdXMsDQouaW5wdXQtZ3JvdXAtYnRuPi5idG46YWN0aXZlIHsNCiAgICB6LWluZGV4OiAyDQp9DQoNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0biwNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0bi1ncm91cCB7DQogICAgbWFyZ2luLXJpZ2h0OiAtMXB4DQp9DQoNCi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLA0KLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5idG4tZ3JvdXAgew0KICAgIHotaW5kZXg6IDI7DQogICAgbWFyZ2luLWxlZnQ6IC0xcHgNCn0NCg0KLm5hdiB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZQ0KfQ0KDQoubmF2OmJlZm9yZSwNCi5uYXY6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQoubmF2OmFmdGVyIHsNCiAgICBjbGVhcjogYm90aA0KfQ0KDQoubmF2PmxpIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2sNCn0NCg0KLm5hdj5saT5hIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZzogMTBweCAxNXB4DQp9DQoNCi5uYXY+bGk+YTpob3ZlciwNCi5uYXY+bGk+YTpmb2N1cyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWUNCn0NCg0KLm5hdj5saS5kaXNhYmxlZD5hIHsNCiAgICBjb2xvcjogIzc3Nw0KfQ0KDQoubmF2PmxpLmRpc2FibGVkPmE6aG92ZXIsDQoubmF2PmxpLmRpc2FibGVkPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjNzc3Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCi5uYXYgLm9wZW4+YSwNCi5uYXYgLm9wZW4+YTpob3ZlciwNCi5uYXYgLm9wZW4+YTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLm5hdiAubmF2LWRpdmlkZXIgew0KICAgIGhlaWdodDogMXB4Ow0KICAgIG1hcmdpbjogOS41cHggMDsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTUNCn0NCg0KLm5hdj5saT5hPmltZyB7DQogICAgbWF4LXdpZHRoOiBub25lDQp9DQoNCi5uYXYtdGFicyB7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQNCn0NCg0KLm5hdi10YWJzPmxpIHsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBtYXJnaW4tYm90dG9tOiAtMXB4DQp9DQoNCi5uYXYtdGFicz5saT5hIHsNCiAgICBtYXJnaW4tcmlnaHQ6IDJweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItcmFkaXVzOiAwIDAgMCAwDQp9DQoNCi5uYXYtdGFicz5saT5hOmhvdmVyIHsNCiAgICBib3JkZXItY29sb3I6ICNlZWUgI2VlZSAjZGRkDQp9DQoNCi5uYXYtdGFicz5saS5hY3RpdmU+YSwNCi5uYXYtdGFicz5saS5hY3RpdmU+YTpob3ZlciwNCi5uYXYtdGFicz5saS5hY3RpdmU+YTpmb2N1cyB7DQogICAgY29sb3I6ICM1NTU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOw0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGN1cnNvcjogZGVmYXVsdA0KfQ0KDQoubmF2LXBpbGxzPmxpIHsNCiAgICBmbG9hdDogbGVmdA0KfQ0KDQoubmF2LXBpbGxzPmxpPmEgew0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLm5hdi1waWxscz5saStsaSB7DQogICAgbWFyZ2luLWxlZnQ6IDJweA0KfQ0KDQoubmF2LXBpbGxzPmxpLmFjdGl2ZT5hLA0KLm5hdi1waWxscz5saS5hY3RpdmU+YTpob3ZlciwNCi5uYXYtcGlsbHM+bGkuYWN0aXZlPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWYNCn0NCg0KLm5hdi1zdGFja2VkPmxpIHsNCiAgICBmbG9hdDogbm9uZQ0KfQ0KDQoubmF2LXN0YWNrZWQ+bGkrbGkgew0KICAgIG1hcmdpbi10b3A6IDJweDsNCiAgICBtYXJnaW4tbGVmdDogMA0KfQ0KDQoubmF2LWp1c3RpZmllZCwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHsNCiAgICB3aWR0aDogMTAwJQ0KfQ0KDQoubmF2LWp1c3RpZmllZD5saSwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpIHsNCiAgICBmbG9hdDogbm9uZQ0KfQ0KDQoubmF2LWp1c3RpZmllZD5saT5hLA0KLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGk+YSB7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIG1hcmdpbi1ib3R0b206IDVweA0KfQ0KDQoubmF2LWp1c3RpZmllZD4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgew0KICAgIHRvcDogYXV0bzsNCiAgICBsZWZ0OiBhdXRvDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIHsNCg0KICAgIC5uYXYtanVzdGlmaWVkPmxpLA0KICAgIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsNCiAgICAgICAgd2lkdGg6IDElDQogICAgfQ0KDQogICAgLm5hdi1qdXN0aWZpZWQ+bGk+YSwNCiAgICAubmF2LXRhYnMubmF2LWp1c3RpZmllZD5saT5hIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMA0KICAgIH0NCn0NCg0KLm5hdi10YWJzLWp1c3RpZmllZCwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHsNCiAgICBib3JkZXItYm90dG9tOiAwDQp9DQoNCi5uYXYtdGFicy1qdXN0aWZpZWQ+bGk+YSwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpPmEgew0KICAgIG1hcmdpbi1yaWdodDogMDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hLA0KLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hLA0KLm5hdi10YWJzLWp1c3RpZmllZD4uYWN0aXZlPmE6aG92ZXIsDQoubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6aG92ZXIsDQoubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cyB7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQoNCiAgICAubmF2LXRhYnMtanVzdGlmaWVkPmxpPmEsDQogICAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGk+YSB7DQogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOw0KICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgMCAwDQogICAgfQ0KDQogICAgLm5hdi10YWJzLWp1c3RpZmllZD4uYWN0aXZlPmEsDQogICAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hLA0KICAgIC5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmhvdmVyLA0KICAgIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YTpob3ZlciwNCiAgICAubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywNCiAgICAubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6Zm9jdXMgew0KICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmDQogICAgfQ0KfQ0KDQoudGFiLWNvbnRlbnQ+LnRhYi1wYW5lIHsNCiAgICBkaXNwbGF5OiBub25lDQp9DQoNCi50YWItY29udGVudD4uYWN0aXZlIHsNCiAgICBkaXNwbGF5OiBibG9jaw0KfQ0KDQoubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IC0xcHg7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoubmF2YmFyIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgbWluLWhlaWdodDogNjRweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50DQp9DQoNCi5uYXZiYXI6YmVmb3JlLA0KLm5hdmJhcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5uYXZiYXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhciB7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDANCiAgICB9DQp9DQoNCi5uYXZiYXItaGVhZGVyOmJlZm9yZSwNCi5uYXZiYXItaGVhZGVyOmFmdGVyIHsNCiAgICBjb250ZW50OiAiICI7DQogICAgZGlzcGxheTogdGFibGUNCn0NCg0KLm5hdmJhci1oZWFkZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhci1oZWFkZXIgew0KICAgICAgICBmbG9hdDogbGVmdA0KICAgIH0NCn0NCg0KLm5hdmJhci1jb2xsYXBzZSB7DQogICAgb3ZlcmZsb3cteDogdmlzaWJsZTsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4Ow0KICAgIHBhZGRpbmctbGVmdDogMTVweDsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKTsNCiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2gNCn0NCg0KLm5hdmJhci1jb2xsYXBzZTpiZWZvcmUsDQoubmF2YmFyLWNvbGxhcHNlOmFmdGVyIHsNCiAgICBjb250ZW50OiAiICI7DQogICAgZGlzcGxheTogdGFibGUNCn0NCg0KLm5hdmJhci1jb2xsYXBzZTphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KLm5hdmJhci1jb2xsYXBzZS5pbiB7DQogICAgb3ZlcmZsb3cteTogYXV0bw0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KICAgIC5uYXZiYXItY29sbGFwc2Ugew0KICAgICAgICB3aWR0aDogYXV0bzsNCiAgICAgICAgYm9yZGVyLXRvcDogMDsNCiAgICAgICAgYm94LXNoYWRvdzogbm9uZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItY29sbGFwc2UuY29sbGFwc2Ugew0KICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7DQogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICAubmF2YmFyLWNvbGxhcHNlLmluIHsNCiAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsDQogICAgLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItY29sbGFwc2UsDQogICAgLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICAgICAgcGFkZGluZy1yaWdodDogMA0KICAgIH0NCn0NCg0KLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSwNCi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Ugew0KICAgIG1heC1oZWlnaHQ6IDM0MHB4DQp9DQoNCkBtZWRpYShtYXgtZGV2aWNlLXdpZHRoOjQ4MHB4KSBhbmQgKG9yaWVudGF0aW9uOmxhbmRzY2FwZSkgew0KDQogICAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSwNCiAgICAubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHsNCiAgICAgICAgbWF4LWhlaWdodDogMjAwcHgNCiAgICB9DQp9DQoNCi5jb250YWluZXI+Lm5hdmJhci1oZWFkZXIsDQouY29udGFpbmVyPi5uYXZiYXItY29sbGFwc2UsDQouY29udGFpbmVyLWZsdWlkPi5uYXZiYXItaGVhZGVyLA0KLmNvbnRhaW5lci1mbHVpZD4ubmF2YmFyLWNvbGxhcHNlIHsNCiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4Ow0KICAgIG1hcmdpbi1sZWZ0OiAtMTVweA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KDQogICAgLmNvbnRhaW5lcj4ubmF2YmFyLWhlYWRlciwNCiAgICAuY29udGFpbmVyPi5uYXZiYXItY29sbGFwc2UsDQogICAgLmNvbnRhaW5lci1mbHVpZD4ubmF2YmFyLWhlYWRlciwNCiAgICAuY29udGFpbmVyLWZsdWlkPi5uYXZiYXItY29sbGFwc2Ugew0KICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAwDQogICAgfQ0KfQ0KDQoubmF2YmFyLXN0YXRpYy10b3Agew0KICAgIHotaW5kZXg6IDEwMDA7DQogICAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhci1zdGF0aWMtdG9wIHsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMA0KICAgIH0NCn0NCg0KLm5hdmJhci1maXhlZC10b3AsDQoubmF2YmFyLWZpeGVkLWJvdHRvbSB7DQogICAgcG9zaXRpb246IGZpeGVkOw0KICAgIHJpZ2h0OiAwOw0KICAgIGxlZnQ6IDA7DQogICAgei1pbmRleDogMTAzMA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KDQogICAgLm5hdmJhci1maXhlZC10b3AsDQogICAgLm5hdmJhci1maXhlZC1ib3R0b20gew0KICAgICAgICBib3JkZXItcmFkaXVzOiAwDQogICAgfQ0KfQ0KDQoubmF2YmFyLWZpeGVkLXRvcCB7DQogICAgdG9wOiAwOw0KICAgIGJvcmRlci13aWR0aDogMCAwIDFweA0KfQ0KDQoubmF2YmFyLWZpeGVkLWJvdHRvbSB7DQogICAgYm90dG9tOiAwOw0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgYm9yZGVyLXdpZHRoOiAxcHggMCAwDQp9DQoNCi5uYXZiYXItYnJhbmQgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHBhZGRpbmc6IDhweCAxMHB4Ow0KICAgIGZvbnQtc2l6ZTogMTlweDsNCiAgICBsaW5lLWhlaWdodDogMjFweDsNCiAgICBoZWlnaHQ6IDY0cHgNCn0NCg0KLm5hdmJhci1icmFuZDpob3ZlciwNCi5uYXZiYXItYnJhbmQ6Zm9jdXMgew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZQ0KfQ0KDQoubmF2YmFyLWJyYW5kPmltZyB7DQogICAgZGlzcGxheTogYmxvY2sNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCg0KICAgIC5uYXZiYXI+LmNvbnRhaW5lciAubmF2YmFyLWJyYW5kLA0KICAgIC5uYXZiYXI+LmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xNXB4DQogICAgfQ0KfQ0KDQoubmF2YmFyLXRvZ2dsZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZsb2F0OiByaWdodDsNCiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7DQogICAgcGFkZGluZzogOXB4IDEwcHg7DQogICAgbWFyZ2luLXRvcDogOHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDhweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyY2UxOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7DQogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoubmF2YmFyLXRvZ2dsZTpmb2N1cyB7DQogICAgb3V0bGluZTogMA0KfQ0KDQoubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAyMnB4Ow0KICAgIGhlaWdodDogMnB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDFweA0KfQ0KDQoubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIrLmljb24tYmFyIHsNCiAgICBtYXJnaW4tdG9wOiA0cHgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAubmF2YmFyLXRvZ2dsZSB7DQogICAgICAgIGRpc3BsYXk6IG5vbmUNCiAgICB9DQp9DQoNCi5uYXZiYXItbmF2IHsNCiAgICBtYXJnaW46IDcuMjVweCAtMTVweA0KfQ0KDQoubmF2YmFyLW5hdj5saT5hIHsNCiAgICBwYWRkaW5nLXRvcDogMTBweDsNCiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsNCiAgICBsaW5lLWhlaWdodDogMjFweA0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHsNCiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsNCiAgICAgICAgZmxvYXQ6IG5vbmU7DQogICAgICAgIHdpZHRoOiBhdXRvOw0KICAgICAgICBtYXJnaW4tdG9wOiAwOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgYm9yZGVyOiAwOw0KICAgICAgICBib3gtc2hhZG93OiBub25lDQogICAgfQ0KDQogICAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+bGk+YSwNCiAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyIHsNCiAgICAgICAgcGFkZGluZzogNXB4IDE1cHggNXB4IDI1cHgNCiAgICB9DQoNCiAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hIHsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHgNCiAgICB9DQoNCiAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyLA0KICAgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMgew0KICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KICAgIC5uYXZiYXItbmF2IHsNCiAgICAgICAgZmxvYXQ6IGxlZnQ7DQogICAgICAgIG1hcmdpbjogMA0KICAgIH0NCg0KICAgIC5uYXZiYXItbmF2PmxpIHsNCiAgICAgICAgZmxvYXQ6IGxlZnQNCiAgICB9DQoNCiAgICAubmF2YmFyLW5hdj5saT5hIHsNCiAgICAgICAgcGFkZGluZy10b3A6IDE0LjVweDsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDE0LjVweA0KICAgIH0NCn0NCg0KLm5hdmJhci1mb3JtIHsNCiAgICBtYXJnaW4tbGVmdDogLTE1cHg7DQogICAgbWFyZ2luLXJpZ2h0OiAtMTVweDsNCiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7DQogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKTsNCiAgICBtYXJnaW4tdG9wOiA3LjVweDsNCiAgICBtYXJnaW4tYm90dG9tOiA3LjVweA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIHdpZHRoOiBhdXRvOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0biwNCiAgICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICB3aWR0aDogYXV0bw0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXA+LmZvcm0tY29udHJvbCB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5jb250cm9sLWxhYmVsIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAucmFkaW8sDQogICAgLm5hdmJhci1mb3JtIC5jaGVja2JveCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAucmFkaW8gbGFiZWwsDQogICAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBsYWJlbCB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMA0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwNCiAgICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAwDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgICAgIHRvcDogMA0KICAgIH0NCn0NCg0KQG1lZGlhKG1heC13aWR0aDoxMTk5cHgpIHsNCiAgICAubmF2YmFyLWZvcm0gLmZvcm0tZ3JvdXAgew0KICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHgNCiAgICB9DQoNCiAgICAubmF2YmFyLWZvcm0gLmZvcm0tZ3JvdXA6bGFzdC1jaGlsZCB7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDANCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhci1mb3JtIHsNCiAgICAgICAgd2lkdGg6IGF1dG87DQogICAgICAgIGJvcmRlcjogMDsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7DQogICAgICAgIG1hcmdpbi1yaWdodDogMDsNCiAgICAgICAgcGFkZGluZy10b3A6IDA7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiAwOw0KICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7DQogICAgICAgIGJveC1zaGFkb3c6IG5vbmUNCiAgICB9DQp9DQoNCi5uYXZiYXItbmF2PmxpPi5kcm9wZG93bi1tZW51IHsNCiAgICBtYXJnaW4tdG9wOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDANCn0NCg0KLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1uYXY+bGk+LmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5uYXZiYXItYnRuIHsNCiAgICBtYXJnaW4tdG9wOiA3LjVweDsNCiAgICBtYXJnaW4tYm90dG9tOiA3LjVweA0KfQ0KDQoubmF2YmFyLWJ0bi5idG4tc20sDQouYnRuLWdyb3VwLXNtPi5uYXZiYXItYnRuLmJ0biB7DQogICAgbWFyZ2luLXRvcDogOS41cHg7DQogICAgbWFyZ2luLWJvdHRvbTogOS41cHgNCn0NCg0KLm5hdmJhci1idG4uYnRuLXhzLA0KLmJ0bi1ncm91cC14cz4ubmF2YmFyLWJ0bi5idG4gew0KICAgIG1hcmdpbi10b3A6IDE0cHg7DQogICAgbWFyZ2luLWJvdHRvbTogMTRweA0KfQ0KDQoubmF2YmFyLXRleHQgew0KICAgIG1hcmdpbi10b3A6IDE0LjVweDsNCiAgICBtYXJnaW4tYm90dG9tOiAxNC41cHgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAubmF2YmFyLXRleHQgew0KICAgICAgICBmbG9hdDogbGVmdDsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7DQogICAgICAgIG1hcmdpbi1yaWdodDogMTVweA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAubmF2YmFyLWxlZnQgew0KICAgICAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgLm5hdmJhci1yaWdodCB7DQogICAgICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50Ow0KICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMC40ZW07DQogICAgfQ0KDQogICAgLm5hdmJhci1yaWdodH4ubmF2YmFyLXJpZ2h0IHsNCiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwDQogICAgfQ0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjZWVlDQp9DQoNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpob3ZlciwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzIHsNCiAgICBjb2xvcjogIzRkNGQ0ZDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10ZXh0IHsNCiAgICBjb2xvcjogIzc3Nw0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YSB7DQogICAgY29sb3I6ICM2NjYNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2PmxpPmE6aG92ZXIsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YTpmb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5hY3RpdmU+YSwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uYWN0aXZlPmE6aG92ZXIsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+LmFjdGl2ZT5hOmZvY3VzIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlDQp9DQoNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YSwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpob3ZlciwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpmb2N1cyB7DQogICAgY29sb3I6ICNjY2M7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIHsNCiAgICBib3JkZXItY29sb3I6ICNkZGQNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmhvdmVyLA0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkDQp9DQoNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4ODgNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItY29sbGFwc2UsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1mb3JtIHsNCiAgICBib3JkZXItY29sb3I6ICNlZWUNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5vcGVuPmEsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+Lm9wZW4+YTpob3ZlciwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOw0KICAgIGNvbG9yOiAjMmY1ZmVmDQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6MTE5OXB4KSB7DQogICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmEgew0KICAgICAgICBjb2xvcjogIzY2Ng0KICAgIH0NCg0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyLA0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzIHsNCiAgICAgICAgY29sb3I6ICMyZjVmZWY7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQogICAgfQ0KDQogICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwNCiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmhvdmVyLA0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6Zm9jdXMgew0KICAgICAgICBjb2xvcjogIzJmNWZlZjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YSwNCiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXIsDQogICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICAgICAgY29sb3I6ICNjY2M7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQogICAgfQ0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rOmhvdmVyIHsNCiAgICBjb2xvcjogIzJmNWZlZg0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVyLA0KLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpmb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWYNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsDQoubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVyLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMgew0KICAgIGNvbG9yOiAjY2NjDQp9DQoNCi5uYXZiYXItaW52ZXJzZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsNCiAgICBib3JkZXItY29sb3I6ICMwOTA5MDkNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRleHQgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj5saT5hIHsNCiAgICBjb2xvcjogIzlkOWQ5ZA0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+bGk+YTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj5saT5hOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+LmFjdGl2ZT5hLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5hY3RpdmU+YTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4uYWN0aXZlPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwOTA5MDkNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICBjb2xvcjogIzQ0NDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgew0KICAgIGJvcmRlci1jb2xvcjogI2ZmZg0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIsDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMDJDRTE7DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItY29sbGFwc2UsDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1mb3JtIHsNCiAgICBib3JkZXItY29sb3I6ICMxMDEwMTANCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5vcGVuPmEsDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+Lm9wZW4+YTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyQ0UxOw0KICAgIGNvbG9yOiAjZmZmDQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6MTE5OXB4KSB7DQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kcm9wZG93bi1oZWFkZXIgew0KICAgICAgICBib3JkZXItY29sb3I6ICMwOTA5MDkNCiAgICB9DQoNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmDQogICAgfQ0KDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXIsDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCiAgICB9DQoNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hLA0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpmb2N1cyB7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAxMDVFDQogICAgfQ0KDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hLA0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXMgew0KICAgICAgICBjb2xvcjogIzQ0NDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCiAgICB9DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmsgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXIgew0KICAgIGNvbG9yOiAjZmZmDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmsgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsDQoubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZg0KfQ0KDQoubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cyB7DQogICAgY29sb3I6ICM0NDQNCn0NCg0KLmJyZWFkY3J1bWIgew0KICAgIHBhZGRpbmc6IDAgMDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5icmVhZGNydW1iPmxpIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sNCn0NCg0KLmJyZWFkY3J1bWI+bGkrbGk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAiPiAiOw0KICAgIHBhZGRpbmc6IDAgNXB4Ow0KICAgIGNvbG9yOiAjNjY2DQp9DQoNCi5icmVhZGNydW1iPi5hY3RpdmUgew0KICAgIGNvbG9yOiAjNjY2DQp9DQoNCi5wYWdpbmF0aW9uIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgIG1hcmdpbjogMjFweCAwOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLnBhZ2luYXRpb24+bGkgew0KICAgIGRpc3BsYXk6IGlubGluZQ0KfQ0KDQoucGFnaW5hdGlvbj5saT5hLA0KLnBhZ2luYXRpb24+bGk+c3BhbiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHBhZGRpbmc6IDZweCAxMnB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjb2xvcjogIzY2NjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7DQogICAgbWFyZ2luLWxlZnQ6IC0xcHgNCn0NCg0KLnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+YSwNCi5wYWdpbmF0aW9uPmxpOmZpcnN0LWNoaWxkPnNwYW4gew0KICAgIG1hcmdpbi1sZWZ0OiAwOw0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoucGFnaW5hdGlvbj5saTpsYXN0LWNoaWxkPmEsDQoucGFnaW5hdGlvbj5saTpsYXN0LWNoaWxkPnNwYW4gew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwDQp9DQoNCi5wYWdpbmF0aW9uPmxpPmE6aG92ZXIsDQoucGFnaW5hdGlvbj5saT5hOmZvY3VzLA0KLnBhZ2luYXRpb24+bGk+c3Bhbjpob3ZlciwNCi5wYWdpbmF0aW9uPmxpPnNwYW46Zm9jdXMgew0KICAgIHotaW5kZXg6IDI7DQogICAgY29sb3I6ICMwZjNjYzM7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCiAgICBib3JkZXItY29sb3I6ICNkZGQNCn0NCg0KLnBhZ2luYXRpb24+LmFjdGl2ZT5hLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmhvdmVyLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmZvY3VzLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmhvdmVyLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmZvY3VzIHsNCiAgICB6LWluZGV4OiAzOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyMzIyMjI7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmOw0KICAgIGN1cnNvcjogZGVmYXVsdA0KfQ0KDQoucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3BhbiwNCi5wYWdpbmF0aW9uPi5kaXNhYmxlZD5zcGFuOmhvdmVyLA0KLnBhZ2luYXRpb24+LmRpc2FibGVkPnNwYW46Zm9jdXMsDQoucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YSwNCi5wYWdpbmF0aW9uPi5kaXNhYmxlZD5hOmhvdmVyLA0KLnBhZ2luYXRpb24+LmRpc2FibGVkPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjNzc3Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjZGRkOw0KICAgIGN1cnNvcjogbm90LWFsbG93ZWQNCn0NCg0KLnBhZ2luYXRpb24tbGc+bGk+YSwNCi5wYWdpbmF0aW9uLWxnPmxpPnNwYW4gew0KICAgIHBhZGRpbmc6IDEwcHggMTZweDsNCiAgICBmb250LXNpemU6IDE5cHg7DQogICAgbGluZS1oZWlnaHQ6IDEuMzMzMzMNCn0NCg0KLnBhZ2luYXRpb24tbGc+bGk6Zmlyc3QtY2hpbGQ+YSwNCi5wYWdpbmF0aW9uLWxnPmxpOmZpcnN0LWNoaWxkPnNwYW4gew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoucGFnaW5hdGlvbi1sZz5saTpsYXN0LWNoaWxkPmEsDQoucGFnaW5hdGlvbi1sZz5saTpsYXN0LWNoaWxkPnNwYW4gew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwDQp9DQoNCi5wYWdpbmF0aW9uLXNtPmxpPmEsDQoucGFnaW5hdGlvbi1zbT5saT5zcGFuIHsNCiAgICBwYWRkaW5nOiA1cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNQ0KfQ0KDQoucGFnaW5hdGlvbi1zbT5saTpmaXJzdC1jaGlsZD5hLA0KLnBhZ2luYXRpb24tc20+bGk6Zmlyc3QtY2hpbGQ+c3BhbiB7DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5wYWdpbmF0aW9uLXNtPmxpOmxhc3QtY2hpbGQ+YSwNCi5wYWdpbmF0aW9uLXNtPmxpOmxhc3QtY2hpbGQ+c3BhbiB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDANCn0NCg0KLnBhZ2VyIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbWFyZ2luOiAyMXB4IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXINCn0NCg0KLnBhZ2VyOmJlZm9yZSwNCi5wYWdlcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5wYWdlcjphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KLnBhZ2VyIGxpIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUNCn0NCg0KLnBhZ2VyIGxpPmEsDQoucGFnZXIgbGk+c3BhbiB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIHBhZGRpbmc6IDVweCAxNHB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCiAgICBib3JkZXItcmFkaXVzOiAxNXB4DQp9DQoNCi5wYWdlciBsaT5hOmhvdmVyLA0KLnBhZ2VyIGxpPmE6Zm9jdXMgew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlDQp9DQoNCi5wYWdlciAubmV4dD5hLA0KLnBhZ2VyIC5uZXh0PnNwYW4gew0KICAgIGZsb2F0OiByaWdodA0KfQ0KDQoucGFnZXIgLnByZXZpb3VzPmEsDQoucGFnZXIgLnByZXZpb3VzPnNwYW4gew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5wYWdlciAuZGlzYWJsZWQ+YSwNCi5wYWdlciAuZGlzYWJsZWQ+YTpob3ZlciwNCi5wYWdlciAuZGlzYWJsZWQ+YTpmb2N1cywNCi5wYWdlciAuZGlzYWJsZWQ+c3BhbiB7DQogICAgY29sb3I6ICM3Nzc7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCi5sYWJlbCB7DQogICAgZGlzcGxheTogaW5saW5lOw0KICAgIHBhZGRpbmc6IC4yZW0gLjZlbSAuM2VtOw0KICAgIGZvbnQtc2l6ZTogNzUlOw0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsNCiAgICBib3JkZXItcmFkaXVzOiAuMjVlbQ0KfQ0KDQoubGFiZWw6ZW1wdHkgew0KICAgIGRpc3BsYXk6IG5vbmUNCn0NCg0KLmJ0biAubGFiZWwgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0b3A6IC0xcHgNCn0NCg0KYS5sYWJlbDpob3ZlciwNCmEubGFiZWw6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjdXJzb3I6IHBvaW50ZXINCn0NCg0KLmxhYmVsLWRlZmF1bHQgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM3NzcNCn0NCg0KLmxhYmVsLWRlZmF1bHRbaHJlZl06aG92ZXIsDQoubGFiZWwtZGVmYXVsdFtocmVmXTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzVlNWU1ZQ0KfQ0KDQoubGFiZWwtcHJpbWFyeSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZg0KfQ0KDQoubGFiZWwtcHJpbWFyeVtocmVmXTpob3ZlciwNCi5sYWJlbC1wcmltYXJ5W2hyZWZdOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0M2RhDQp9DQoNCi5sYWJlbC1zdWNjZXNzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2M3NjNkDQp9DQoNCi5sYWJlbC1zdWNjZXNzW2hyZWZdOmhvdmVyLA0KLmxhYmVsLXN1Y2Nlc3NbaHJlZl06Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyYjU0MmMNCn0NCg0KLmxhYmVsLWluZm8gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGYNCn0NCg0KLmxhYmVsLWluZm9baHJlZl06aG92ZXIsDQoubGFiZWwtaW5mb1tocmVmXTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI0NTI2OQ0KfQ0KDQoubGFiZWwtd2FybmluZyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYg0KfQ0KDQoubGFiZWwtd2FybmluZ1tocmVmXTpob3ZlciwNCi5sYWJlbC13YXJuaW5nW2hyZWZdOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY1MTJjDQp9DQoNCi5sYWJlbC1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNhOTQ0NDINCn0NCg0KLmxhYmVsLWRhbmdlcltocmVmXTpob3ZlciwNCi5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4NDM1MzQNCn0NCg0KLmJhZGdlIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgbWluLXdpZHRoOiAxMHB4Ow0KICAgIHBhZGRpbmc6IDNweCA3cHg7DQogICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzc3NzsNCiAgICBib3JkZXItcmFkaXVzOiAxMHB4DQp9DQoNCi5iYWRnZTplbXB0eSB7DQogICAgZGlzcGxheTogbm9uZQ0KfQ0KDQouYnRuIC5iYWRnZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogLTFweA0KfQ0KDQouYnRuLXhzIC5iYWRnZSwNCi5idG4tZ3JvdXAteHM+LmJ0biAuYmFkZ2UsDQouYnRuLWdyb3VwLXhzPi5idG4gLmJhZGdlIHsNCiAgICB0b3A6IDA7DQogICAgcGFkZGluZzogMXB4IDVweA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZT4uYmFkZ2UsDQoubmF2LXBpbGxzPi5hY3RpdmU+YT4uYmFkZ2Ugew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbT4uYmFkZ2Ugew0KICAgIGZsb2F0OiByaWdodA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtPi5iYWRnZSsuYmFkZ2Ugew0KICAgIG1hcmdpbi1yaWdodDogNXB4DQp9DQoNCi5uYXYtcGlsbHM+bGk+YT4uYmFkZ2Ugew0KICAgIG1hcmdpbi1sZWZ0OiAzcHgNCn0NCg0KYS5iYWRnZTpob3ZlciwNCmEuYmFkZ2U6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjdXJzb3I6IHBvaW50ZXINCn0NCg0KLmp1bWJvdHJvbiB7DQogICAgcGFkZGluZy10b3A6IDMwcHg7DQogICAgcGFkZGluZy1ib3R0b206IDMwcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMzBweDsNCiAgICBjb2xvcjogaW5oZXJpdDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlDQp9DQoNCi5qdW1ib3Ryb24gaDEsDQouanVtYm90cm9uIC5oMSB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLmp1bWJvdHJvbiBwIHsNCiAgICBtYXJnaW4tYm90dG9tOiAxNXB4Ow0KICAgIGZvbnQtc2l6ZTogMjNweDsNCiAgICBmb250LXdlaWdodDogMjAwDQp9DQoNCi5qdW1ib3Ryb24+aHIgew0KICAgIGJvcmRlci10b3AtY29sb3I6ICNkNWQ1ZDUNCn0NCg0KLmNvbnRhaW5lciAuanVtYm90cm9uLA0KLmNvbnRhaW5lci1mbHVpZCAuanVtYm90cm9uIHsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIHBhZGRpbmctbGVmdDogMTVweDsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4DQp9DQoNCi5qdW1ib3Ryb24gLmNvbnRhaW5lciB7DQogICAgbWF4LXdpZHRoOiAxMDAlDQp9DQoNCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpIHsNCiAgICAuanVtYm90cm9uIHsNCiAgICAgICAgcGFkZGluZy10b3A6IDQ4cHg7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiA0OHB4DQogICAgfQ0KDQogICAgLmNvbnRhaW5lciAuanVtYm90cm9uLA0KICAgIC5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7DQogICAgICAgIHBhZGRpbmctbGVmdDogNjBweDsNCiAgICAgICAgcGFkZGluZy1yaWdodDogNjBweA0KICAgIH0NCg0KICAgIC5qdW1ib3Ryb24gaDEsDQogICAgLmp1bWJvdHJvbiAuaDEgew0KICAgICAgICBmb250LXNpemU6IDY4cHgNCiAgICB9DQp9DQoNCi50aHVtYm5haWwgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IDRweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyIC4ycyBlYXNlLWluLW91dDsNCiAgICAtby10cmFuc2l0aW9uOiBib3JkZXIgLjJzIGVhc2UtaW4tb3V0Ow0KICAgIHRyYW5zaXRpb246IGJvcmRlciAuMnMgZWFzZS1pbi1vdXQNCn0NCg0KLnRodW1ibmFpbD5pbWcsDQoudGh1bWJuYWlsIGE+aW1nIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtYXgtd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiBhdXRvOw0KICAgIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICAgIG1hcmdpbi1yaWdodDogYXV0bw0KfQ0KDQoudGh1bWJuYWlsIC5jYXB0aW9uIHsNCiAgICBwYWRkaW5nOiA5cHg7DQogICAgY29sb3I6ICM2NjYNCn0NCg0KYS50aHVtYm5haWw6aG92ZXIsDQphLnRodW1ibmFpbDpmb2N1cywNCmEudGh1bWJuYWlsLmFjdGl2ZSB7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5hbGVydCB7DQogICAgcGFkZGluZzogMTVweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmFsZXJ0IGg0IHsNCiAgICBtYXJnaW4tdG9wOiAwOw0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCi5hbGVydCAuYWxlcnQtbGluayB7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQNCn0NCg0KLmFsZXJ0PnAsDQouYWxlcnQ+dWwgew0KICAgIG1hcmdpbi1ib3R0b206IDANCn0NCg0KLmFsZXJ0PnArcCB7DQogICAgbWFyZ2luLXRvcDogNXB4DQp9DQoNCi5hbGVydC1kaXNtaXNzYWJsZSwNCi5hbGVydC1kaXNtaXNzaWJsZSB7DQogICAgcGFkZGluZy1yaWdodDogMzVweA0KfQ0KDQouYWxlcnQtZGlzbWlzc2FibGUgLmNsb3NlLA0KLmFsZXJ0LWRpc21pc3NpYmxlIC5jbG9zZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogLTJweDsNCiAgICByaWdodDogLTIxcHg7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLmFsZXJ0LXN1Y2Nlc3Mgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmU5YzY7DQogICAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2Ow0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5hbGVydC1zdWNjZXNzIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjYzllMmI0DQp9DQoNCi5hbGVydC1zdWNjZXNzIC5hbGVydC1saW5rIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYWxlcnQtaW5mbyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZThmMTsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5hbGVydC1pbmZvIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouYWxlcnQtaW5mbyAuYWxlcnQtbGluayB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KLmFsZXJ0LXdhcm5pbmcgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWViY2M7DQogICAgYm9yZGVyLWNvbG9yOiAjZmFlYmNjOw0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5hbGVydC13YXJuaW5nIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjZjhlMmI1DQp9DQoNCi5hbGVydC13YXJuaW5nIC5hbGVydC1saW5rIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYWxlcnQtZGFuZ2VyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWJjY2QxOw0KICAgIGJvcmRlci1jb2xvcjogI2ViY2NkMTsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYWxlcnQtZGFuZ2VyIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjZTRiYWMwDQp9DQoNCi5hbGVydC1kYW5nZXIgLmFsZXJ0LWxpbmsgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7DQogICAgZnJvbSB7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMA0KICAgIH0NCg0KICAgIHRvIHsNCiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwDQogICAgfQ0KfQ0KDQpAa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHsNCiAgICBmcm9tIHsNCiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwDQogICAgfQ0KDQogICAgdG8gew0KICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDANCiAgICB9DQp9DQoNCi5wcm9ncmVzcyB7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBoZWlnaHQ6IDIxcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1Ow0KICAgIGJvcmRlci1yYWRpdXM6IDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAuMSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpDQp9DQoNCi5wcm9ncmVzcy1iYXIgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHdpZHRoOiAwJTsNCiAgICBoZWlnaHQ6IDEwMCU7DQogICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIGxpbmUtaGVpZ2h0OiAyMXB4Ow0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmY1ZmVmOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAuMTUpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgLjE1KTsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIC42cyBlYXNlOw0KICAgIC1vLXRyYW5zaXRpb246IHdpZHRoIC42cyBlYXNlOw0KICAgIHRyYW5zaXRpb246IHdpZHRoIC42cyBlYXNlDQp9DQoNCi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXIsDQoucHJvZ3Jlc3MtYmFyLXN0cmlwZWQgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHgNCn0NCg0KLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyLA0KLnByb2dyZXNzLWJhci5hY3RpdmUgew0KICAgIC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7DQogICAgLW8tYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7DQogICAgYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGUNCn0NCg0KLnByb2dyZXNzLWJhci1zdWNjZXNzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2M3NjNkDQp9DQoNCi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItc3VjY2VzcyB7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KQ0KfQ0KDQoucHJvZ3Jlc3MtYmFyLWluZm8gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGYNCn0NCg0KLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1pbmZvIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpDQp9DQoNCi5wcm9ncmVzcy1iYXItd2FybmluZyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYg0KfQ0KDQoucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLXdhcm5pbmcgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCkNCn0NCg0KLnByb2dyZXNzLWJhci1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNhOTQ0NDINCn0NCg0KLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCkNCn0NCg0KLm1lZGlhIHsNCiAgICBtYXJnaW4tdG9wOiAxNXB4DQp9DQoNCi5tZWRpYTpmaXJzdC1jaGlsZCB7DQogICAgbWFyZ2luLXRvcDogMA0KfQ0KDQoubWVkaWEsDQoubWVkaWEtYm9keSB7DQogICAgem9vbTogMTsNCiAgICBvdmVyZmxvdzogaGlkZGVuDQp9DQoNCi5tZWRpYS1ib2R5IHsNCiAgICB3aWR0aDogMTAwMDBweA0KfQ0KDQoubWVkaWEtb2JqZWN0IHsNCiAgICBkaXNwbGF5OiBibG9jaw0KfQ0KDQoubWVkaWEtb2JqZWN0LmltZy10aHVtYm5haWwgew0KICAgIG1heC13aWR0aDogbm9uZQ0KfQ0KDQoubWVkaWEtcmlnaHQsDQoubWVkaWE+LnB1bGwtcmlnaHQgew0KICAgIHBhZGRpbmctbGVmdDogMTBweA0KfQ0KDQoubWVkaWEtbGVmdCwNCi5tZWRpYT4ucHVsbC1sZWZ0IHsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4DQp9DQoNCi5tZWRpYS1sZWZ0LA0KLm1lZGlhLXJpZ2h0LA0KLm1lZGlhLWJvZHkgew0KICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7DQogICAgdmVydGljYWwtYWxpZ246IHRvcA0KfQ0KDQoubWVkaWEtbWlkZGxlIHsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQp9DQoNCi5tZWRpYS1ib3R0b20gew0KICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b20NCn0NCg0KLm1lZGlhLWhlYWRpbmcgew0KICAgIG1hcmdpbi10b3A6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogNXB4DQp9DQoNCi5tZWRpYS1saXN0IHsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZQ0KfQ0KDQoubGlzdC1ncm91cCB7DQogICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICBwYWRkaW5nLWxlZnQ6IDANCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IDEwcHggMTVweDsNCiAgICBtYXJnaW4tYm90dG9tOiAtMXB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgY29sb3I6ICM1NTUNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgew0KICAgIGNvbG9yOiAjMzMzDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW06Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGNvbG9yOiAjNTU1Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUNCn0NCg0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkLA0KLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciwNCi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7DQogICAgY29sb3I6ICM2NjY7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgew0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LA0KLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLXRleHQsDQoubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7DQogICAgY29sb3I6ICM3NzcNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciwNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIHsNCiAgICB6LWluZGV4OiAyOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWY7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz5zbWFsbCwNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz4uc21hbGwsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+c21hbGwsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+LnNtYWxsLA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPnNtYWxsLA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPi5zbWFsbCB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHsNCiAgICBjb2xvcjogI2VjZjFmZQ0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mgew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmU5YzYNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHsNCiAgICBjb2xvcjogaW5oZXJpdA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlciwNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2M5ZTJiNA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSwNCmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlciwNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZThmMQ0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgew0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLWluZm86aG92ZXIsDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVyLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTdlMWVkDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLA0KYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXIsDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCiAgICBib3JkZXItY29sb3I6ICMwMDANCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIHsNCiAgICBjb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFlYmNjDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlciwNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMgew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGUyYjUNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmUsDQphLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlciwNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSwNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOw0KICAgIGJvcmRlci1jb2xvcjogIzAwMA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NkMQ0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmZvY3VzLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2U0YmFjMA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLA0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpob3ZlciwNCmEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmUsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiA1cHgNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHsNCiAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjMNCn0NCg0KLnBhbmVsIHsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNSk7DQogICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA1KQ0KfQ0KDQoucGFuZWwtYm9keSB7DQogICAgcGFkZGluZzogMTVweA0KfQ0KDQoucGFuZWwtYm9keTpiZWZvcmUsDQoucGFuZWwtYm9keTphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5wYW5lbC1ib2R5OmFmdGVyIHsNCiAgICBjbGVhcjogYm90aA0KfQ0KDQoucGFuZWwtaGVhZGluZyB7DQogICAgcGFkZGluZzogMTBweCAxNXB4Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogLTFweDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbC1oZWFkaW5nPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBjb2xvcjogaW5oZXJpdA0KfQ0KDQoucGFuZWwtdGl0bGUgew0KICAgIG1hcmdpbi10b3A6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBmb250LXNpemU6IDE3cHg7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLnBhbmVsLXRpdGxlPmEsDQoucGFuZWwtdGl0bGU+c21hbGwsDQoucGFuZWwtdGl0bGU+LnNtYWxsLA0KLnBhbmVsLXRpdGxlPnNtYWxsPmEsDQoucGFuZWwtdGl0bGU+LnNtYWxsPmEgew0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCi5wYW5lbC1mb290ZXIgew0KICAgIHBhZGRpbmc6IDEwcHggMTVweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1Ow0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOw0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi5saXN0LWdyb3VwLA0KLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cCB7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQoucGFuZWw+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSwNCi5wYW5lbD4ucGFuZWwtY29sbGFwc2U+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgYm9yZGVyLXdpZHRoOiAxcHggMDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5wYW5lbD4ubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkLA0KLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbTogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogLTFweDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbD4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoucGFuZWwtaGVhZGluZysubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLXdpZHRoOiAwDQp9DQoNCi5saXN0LWdyb3VwKy5wYW5lbC1mb290ZXIgew0KICAgIGJvcmRlci10b3Atd2lkdGg6IDANCn0NCg0KLnBhbmVsPi50YWJsZSwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUsDQoucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi50YWJsZSB7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQoucGFuZWw+LnRhYmxlIGNhcHRpb24sDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlIGNhcHRpb24sDQoucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi50YWJsZSBjYXB0aW9uIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7DQogICAgcGFkZGluZy1yaWdodDogMTVweA0KfQ0KDQoucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IC0xcHg7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogLTFweA0KfQ0KDQoucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQgew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC0xcHg7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogLTFweA0KfQ0KDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi5wYW5lbC1ib2R5Ky50YWJsZSwNCi5wYW5lbD4ucGFuZWwtYm9keSsudGFibGUtcmVzcG9uc2l2ZSwNCi5wYW5lbD4udGFibGUrLnBhbmVsLWJvZHksDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmUrLnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkDQp9DQoNCi5wYW5lbD4udGFibGU+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGgsDQoucGFuZWw+LnRhYmxlPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkIHsNCiAgICBib3JkZXItdG9wOiAwDQp9DQoNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkIHsNCiAgICBib3JkZXI6IDANCn0NCg0KLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItbGVmdDogMA0KfQ0KDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQgew0KICAgIGJvcmRlci1yaWdodDogMA0KfQ0KDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyOmZpcnN0LWNoaWxkPnRkLA0KLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cjpmaXJzdC1jaGlsZD50aCwNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI6Zmlyc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmZpcnN0LWNoaWxkPnRoLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cjpmaXJzdC1jaGlsZD50ZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmZpcnN0LWNoaWxkPnRkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpmaXJzdC1jaGlsZD50aCB7DQogICAgYm9yZGVyLWJvdHRvbTogMA0KfQ0KDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGggew0KICAgIGJvcmRlci1ib3R0b206IDANCn0NCg0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlIHsNCiAgICBib3JkZXI6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQoucGFuZWwtZ3JvdXAgew0KICAgIG1hcmdpbi1ib3R0b206IDIxcHgNCn0NCg0KLnBhbmVsLWdyb3VwIC5wYW5lbCB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5wYW5lbC1ncm91cCAucGFuZWwrLnBhbmVsIHsNCiAgICBtYXJnaW4tdG9wOiA1cHgNCn0NCg0KLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nIHsNCiAgICBib3JkZXItYm90dG9tOiAwDQp9DQoNCi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHksDQoucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5saXN0LWdyb3VwIHsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZQ0KfQ0KDQoucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciB7DQogICAgYm9yZGVyLXRvcDogMA0KfQ0KDQoucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2UgLnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlDQp9DQoNCi5wYW5lbC1kZWZhdWx0IHsNCiAgICBib3JkZXItY29sb3I6ICNlZWUNCn0NCg0KLnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWhlYWRpbmcgew0KICAgIGNvbG9yOiAjMzMzOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7DQogICAgYm9yZGVyLWNvbG9yOiAjZWVlDQp9DQoNCi5wYW5lbC1kZWZhdWx0Pi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogI2VlZQ0KfQ0KDQoucGFuZWwtZGVmYXVsdD4ucGFuZWwtaGVhZGluZyAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjZjVmNWY1Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzMNCn0NCg0KLnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNlZWUNCn0NCg0KLnBhbmVsLXByaW1hcnkgew0KICAgIGJvcmRlci1jb2xvcjogIzJmNWZlZg0KfQ0KDQoucGFuZWwtcHJpbWFyeT4ucGFuZWwtaGVhZGluZyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZjsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLnBhbmVsLXByaW1hcnk+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5IHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5wYW5lbC1wcmltYXJ5Pi5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQoucGFuZWwtcHJpbWFyeT4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzJmNWZlZg0KfQ0KDQoucGFuZWwtc3VjY2VzcyB7DQogICAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2DQp9DQoNCi5wYW5lbC1zdWNjZXNzPi5wYW5lbC1oZWFkaW5nIHsNCiAgICBjb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZlOWM2Ow0KICAgIGJvcmRlci1jb2xvcjogI2Q2ZTljNg0KfQ0KDQoucGFuZWwtc3VjY2Vzcz4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci10b3AtY29sb3I6ICNkNmU5YzYNCn0NCg0KLnBhbmVsLXN1Y2Nlc3M+LnBhbmVsLWhlYWRpbmcgLmJhZGdlIHsNCiAgICBjb2xvcjogI2Q2ZTljNjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwDQp9DQoNCi5wYW5lbC1zdWNjZXNzPi5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5IHsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZDZlOWM2DQp9DQoNCi5wYW5lbC1pbmZvIHsNCiAgICBib3JkZXItY29sb3I6ICNiY2U4ZjENCn0NCg0KLnBhbmVsLWluZm8+LnBhbmVsLWhlYWRpbmcgew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNiY2U4ZjE7DQogICAgYm9yZGVyLWNvbG9yOiAjYmNlOGYxDQp9DQoNCi5wYW5lbC1pbmZvPi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogI2JjZThmMQ0KfQ0KDQoucGFuZWwtaW5mbz4ucGFuZWwtaGVhZGluZyAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjYmNlOGYxOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDANCn0NCg0KLnBhbmVsLWluZm8+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNiY2U4ZjENCn0NCg0KLnBhbmVsLXdhcm5pbmcgew0KICAgIGJvcmRlci1jb2xvcjogI2ZhZWJjYw0KfQ0KDQoucGFuZWwtd2FybmluZz4ucGFuZWwtaGVhZGluZyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZWJjYzsNCiAgICBib3JkZXItY29sb3I6ICNmYWViY2MNCn0NCg0KLnBhbmVsLXdhcm5pbmc+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5IHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjZmFlYmNjDQp9DQoNCi5wYW5lbC13YXJuaW5nPi5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7DQogICAgY29sb3I6ICNmYWViY2M7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMA0KfQ0KDQoucGFuZWwtd2FybmluZz4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZhZWJjYw0KfQ0KDQoucGFuZWwtZGFuZ2VyIHsNCiAgICBib3JkZXItY29sb3I6ICNlYmNjZDENCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtaGVhZGluZyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NkMTsNCiAgICBib3JkZXItY29sb3I6ICNlYmNjZDENCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci10b3AtY29sb3I6ICNlYmNjZDENCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtaGVhZGluZyAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjZWJjY2QxOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDANCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ViY2NkMQ0KfQ0KDQouZW1iZWQtcmVzcG9uc2l2ZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGhlaWdodDogMDsNCiAgICBwYWRkaW5nOiAwOw0KICAgIG92ZXJmbG93OiBoaWRkZW4NCn0NCg0KLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSwNCi5lbWJlZC1yZXNwb25zaXZlIGlmcmFtZSwNCi5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLA0KLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LA0KLmVtYmVkLXJlc3BvbnNpdmUgdmlkZW8gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogMDsNCiAgICBib3R0b206IDA7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJvcmRlcjogMA0KfQ0KDQouZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OSB7DQogICAgcGFkZGluZy1ib3R0b206IDU2LjI1JQ0KfQ0KDQouZW1iZWQtcmVzcG9uc2l2ZS00YnkzIHsNCiAgICBwYWRkaW5nLWJvdHRvbTogNzUlDQp9DQoNCi53ZWxsIHsNCiAgICBtaW4taGVpZ2h0OiAyMHB4Ow0KICAgIHBhZGRpbmc6IDE5cHg7DQogICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNlM2UzZTM7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA1KQ0KfQ0KDQoud2VsbCBibG9ja3F1b3RlIHsNCiAgICBib3JkZXItY29sb3I6ICNkZGQ7DQogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4xNSkNCn0NCg0KLndlbGwtbGcgew0KICAgIHBhZGRpbmc6IDI0cHg7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoud2VsbC1zbSB7DQogICAgcGFkZGluZzogOXB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmNsb3NlIHsNCiAgICBmbG9hdDogcmlnaHQ7DQogICAgZm9udC1zaXplOiAyMi41cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgbGluZS1oZWlnaHQ6IDE7DQogICAgY29sb3I6ICMwMDA7DQogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjsNCiAgICBvcGFjaXR5OiAuMjsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MjApDQp9DQoNCi5jbG9zZTpob3ZlciwNCi5jbG9zZTpmb2N1cyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBvcGFjaXR5OiAuNTsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApDQp9DQoNCmJ1dHRvbi5jbG9zZSB7DQogICAgcGFkZGluZzogMDsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyOiAwOw0KICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZQ0KfQ0KDQoubW9kYWwtb3BlbiB7DQogICAgb3ZlcmZsb3c6IGhpZGRlbg0KfQ0KDQoubW9kYWwgew0KICAgIGRpc3BsYXk6IG5vbmU7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgdG9wOiAwOw0KICAgIHJpZ2h0OiAwOw0KICAgIGJvdHRvbTogMDsNCiAgICBsZWZ0OiAwOw0KICAgIHotaW5kZXg6IDEwNTA7DQogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOw0KICAgIG91dGxpbmU6IDANCn0NCg0KLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7DQogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTsNCiAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7DQogICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7DQogICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7DQogICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7DQogICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIC4zcyBlYXNlLW91dDsNCiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0DQp9DQoNCi5tb2RhbC5pbiAubW9kYWwtZGlhbG9nIHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOw0KICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsNCiAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKQ0KfQ0KDQoubW9kYWwtb3BlbiAubW9kYWwgew0KICAgIG92ZXJmbG93LXg6IGhpZGRlbjsNCiAgICBvdmVyZmxvdy15OiBhdXRvDQp9DQoNCi5tb2RhbC1kaWFsb2cgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB3aWR0aDogYXV0bzsNCiAgICBtYXJnaW46IDEwcHgNCn0NCg0KLm1vZGFsLWNvbnRlbnQgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7DQogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAuMik7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgM3B4IDlweCByZ2JhKDAsIDAsIDAsIC41KTsNCiAgICBib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAuNSk7DQogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsNCiAgICBvdXRsaW5lOiAwDQp9DQoNCi5tb2RhbC1iYWNrZHJvcCB7DQogICAgcG9zaXRpb246IGZpeGVkOw0KICAgIHRvcDogMDsNCiAgICByaWdodDogMDsNCiAgICBib3R0b206IDA7DQogICAgbGVmdDogMDsNCiAgICB6LWluZGV4OiAxMDQwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDANCn0NCg0KLm1vZGFsLWJhY2tkcm9wLmZhZGUgew0KICAgIG9wYWNpdHk6IDA7DQogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApDQp9DQoNCi5tb2RhbC1iYWNrZHJvcC5pbiB7DQogICAgb3BhY2l0eTogLjU7DQogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKQ0KfQ0KDQoubW9kYWwtaGVhZGVyIHsNCiAgICBwYWRkaW5nOiAxNXB4Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1DQp9DQoNCi5tb2RhbC1oZWFkZXI6YmVmb3JlLA0KLm1vZGFsLWhlYWRlcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5tb2RhbC1oZWFkZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5tb2RhbC1oZWFkZXIgLmNsb3NlIHsNCiAgICBtYXJnaW4tdG9wOiAtMnB4DQp9DQoNCi5tb2RhbC10aXRsZSB7DQogICAgbWFyZ2luOiAwOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3DQp9DQoNCi5tb2RhbC1ib2R5IHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgcGFkZGluZzogMTVweA0KfQ0KDQoubW9kYWwtZm9vdGVyIHsNCiAgICBwYWRkaW5nOiAxNXB4Ow0KICAgIHRleHQtYWxpZ246IHJpZ2h0Ow0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1DQp9DQoNCi5tb2RhbC1mb290ZXI6YmVmb3JlLA0KLm1vZGFsLWZvb3RlcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5tb2RhbC1mb290ZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5tb2RhbC1mb290ZXIgLmJ0bisuYnRuIHsNCiAgICBtYXJnaW4tbGVmdDogNXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDANCn0NCg0KLm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4rLmJ0biB7DQogICAgbWFyZ2luLWxlZnQ6IC0xcHgNCn0NCg0KLm1vZGFsLWZvb3RlciAuYnRuLWJsb2NrKy5idG4tYmxvY2sgew0KICAgIG1hcmdpbi1sZWZ0OiAwDQp9DQoNCi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogLTk5OTlweDsNCiAgICB3aWR0aDogNTBweDsNCiAgICBoZWlnaHQ6IDUwcHg7DQogICAgb3ZlcmZsb3c6IHNjcm9sbA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLm1vZGFsLWRpYWxvZyB7DQogICAgICAgIHdpZHRoOiA2MDBweDsNCiAgICAgICAgbWFyZ2luOiAzMHB4IGF1dG8NCiAgICB9DQoNCiAgICAubW9kYWwtY29udGVudCB7DQogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIC41KTsNCiAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIC41KQ0KICAgIH0NCg0KICAgIC5tb2RhbC1zbSB7DQogICAgICAgIHdpZHRoOiAzMDBweA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo5OTJweCkgew0KICAgIC5tb2RhbC1sZyB7DQogICAgICAgIHdpZHRoOiA5MDBweA0KICAgIH0NCn0NCg0KLnRvb2x0aXAgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB6LWluZGV4OiAxMDcwOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICBmb250LXdlaWdodDogbm9ybWFsOw0KICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7DQogICAgbGluZS1icmVhazogYXV0bzsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgIHRleHQtYWxpZ246IHN0YXJ0Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICB0ZXh0LXNoYWRvdzogbm9uZTsNCiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsNCiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOw0KICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsNCiAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsNCiAgICB3b3JkLXdyYXA6IG5vcm1hbDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgb3BhY2l0eTogMDsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCkNCn0NCg0KLnRvb2x0aXAuaW4gew0KICAgIG9wYWNpdHk6IC45Ow0KICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCkNCn0NCg0KLnRvb2x0aXAudG9wIHsNCiAgICBtYXJnaW4tdG9wOiAtM3B4Ow0KICAgIHBhZGRpbmc6IDVweCAwDQp9DQoNCi50b29sdGlwLnJpZ2h0IHsNCiAgICBtYXJnaW4tbGVmdDogM3B4Ow0KICAgIHBhZGRpbmc6IDAgNXB4DQp9DQoNCi50b29sdGlwLmJvdHRvbSB7DQogICAgbWFyZ2luLXRvcDogM3B4Ow0KICAgIHBhZGRpbmc6IDVweCAwDQp9DQoNCi50b29sdGlwLmxlZnQgew0KICAgIG1hcmdpbi1sZWZ0OiAtM3B4Ow0KICAgIHBhZGRpbmc6IDAgNXB4DQp9DQoNCi50b29sdGlwLWlubmVyIHsNCiAgICBtYXgtd2lkdGg6IDIwMHB4Ow0KICAgIHBhZGRpbmc6IDNweCA4cHg7DQogICAgY29sb3I6ICNmZmY7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoudG9vbHRpcC1hcnJvdyB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHdpZHRoOiAwOw0KICAgIGhlaWdodDogMDsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1zdHlsZTogc29saWQNCn0NCg0KLnRvb2x0aXAudG9wIC50b29sdGlwLWFycm93IHsNCiAgICBib3R0b206IDA7DQogICAgbGVmdDogNTAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtNXB4Ow0KICAgIGJvcmRlci13aWR0aDogNXB4IDVweCAwOw0KICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDANCn0NCg0KLnRvb2x0aXAudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cgew0KICAgIGJvdHRvbTogMDsNCiAgICByaWdodDogNXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IC01cHg7DQogICAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3cgew0KICAgIGJvdHRvbTogMDsNCiAgICBsZWZ0OiA1cHg7DQogICAgbWFyZ2luLWJvdHRvbTogLTVweDsNCiAgICBib3JkZXItd2lkdGg6IDVweCA1cHggMDsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjMDAwDQp9DQoNCi50b29sdGlwLnJpZ2h0IC50b29sdGlwLWFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICBsZWZ0OiAwOw0KICAgIG1hcmdpbi10b3A6IC01cHg7DQogICAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwOw0KICAgIGJvcmRlci1yaWdodC1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICByaWdodDogMDsNCiAgICBtYXJnaW4tdG9wOiAtNXB4Ow0KICAgIGJvcmRlci13aWR0aDogNXB4IDAgNXB4IDVweDsNCiAgICBib3JkZXItbGVmdC1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3cgew0KICAgIHRvcDogMDsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC01cHg7DQogICAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC5ib3R0b20tbGVmdCAudG9vbHRpcC1hcnJvdyB7DQogICAgdG9wOiAwOw0KICAgIHJpZ2h0OiA1cHg7DQogICAgbWFyZ2luLXRvcDogLTVweDsNCiAgICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwDQp9DQoNCi50b29sdGlwLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvdyB7DQogICAgdG9wOiAwOw0KICAgIGxlZnQ6IDVweDsNCiAgICBtYXJnaW4tdG9wOiAtNXB4Ow0KICAgIGJvcmRlci13aWR0aDogMCA1cHggNXB4Ow0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDANCn0NCg0KLnBvcG92ZXIgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogMDsNCiAgICB6LWluZGV4OiAxMDYwOw0KICAgIGRpc3BsYXk6IG5vbmU7DQogICAgbWF4LXdpZHRoOiAyNzZweDsNCiAgICBwYWRkaW5nOiAxcHg7DQogICAgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zdHlsZTogbm9ybWFsOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsNCiAgICBsaW5lLWJyZWFrOiBhdXRvOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgdGV4dC1hbGlnbjogc3RhcnQ7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIHRleHQtc2hhZG93OiBub25lOw0KICAgIHRleHQtdHJhbnNmb3JtOiBub25lOw0KICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7DQogICAgd29yZC1icmVhazogbm9ybWFsOw0KICAgIHdvcmQtc3BhY2luZzogbm9ybWFsOw0KICAgIHdvcmQtd3JhcDogbm9ybWFsOw0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIC4yKTsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIC4yKTsNCiAgICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgLjIpDQp9DQoNCi5wb3BvdmVyLnRvcCB7DQogICAgbWFyZ2luLXRvcDogLTEwcHgNCn0NCg0KLnBvcG92ZXIucmlnaHQgew0KICAgIG1hcmdpbi1sZWZ0OiAxMHB4DQp9DQoNCi5wb3BvdmVyLmJvdHRvbSB7DQogICAgbWFyZ2luLXRvcDogMTBweA0KfQ0KDQoucG9wb3Zlci5sZWZ0IHsNCiAgICBtYXJnaW4tbGVmdDogLTEwcHgNCn0NCg0KLnBvcG92ZXItdGl0bGUgew0KICAgIG1hcmdpbjogMDsNCiAgICBwYWRkaW5nOiA4cHggMTRweDsNCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsNCiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWJlYjsNCiAgICBib3JkZXItcmFkaXVzOiAtMXB4IC0xcHggMCAwDQp9DQoNCi5wb3BvdmVyLWNvbnRlbnQgew0KICAgIHBhZGRpbmc6IDlweCAxNHB4DQp9DQoNCi5wb3BvdmVyPi5hcnJvdywNCi5wb3BvdmVyPi5hcnJvdzphZnRlciB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAwOw0KICAgIGhlaWdodDogMDsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1zdHlsZTogc29saWQNCn0NCg0KLnBvcG92ZXI+LmFycm93IHsNCiAgICBib3JkZXItd2lkdGg6IDExcHgNCn0NCg0KLnBvcG92ZXI+LmFycm93OmFmdGVyIHsNCiAgICBib3JkZXItd2lkdGg6IDEwcHg7DQogICAgY29udGVudDogIiINCn0NCg0KLnBvcG92ZXIudG9wPi5hcnJvdyB7DQogICAgbGVmdDogNTAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtMTFweDsNCiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwOw0KICAgIGJvcmRlci10b3AtY29sb3I6ICM5OTk7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMjUpOw0KICAgIGJvdHRvbTogLTExcHgNCn0NCg0KLnBvcG92ZXIudG9wPi5hcnJvdzphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGJvdHRvbTogMXB4Ow0KICAgIG1hcmdpbi1sZWZ0OiAtMTBweDsNCiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwOw0KICAgIGJvcmRlci10b3AtY29sb3I6ICNmZmYNCn0NCg0KLnBvcG92ZXIucmlnaHQ+LmFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICBsZWZ0OiAtMTFweDsNCiAgICBtYXJnaW4tdG9wOiAtMTFweDsNCiAgICBib3JkZXItbGVmdC13aWR0aDogMDsNCiAgICBib3JkZXItcmlnaHQtY29sb3I6ICM5OTk7DQogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4yNSkNCn0NCg0KLnBvcG92ZXIucmlnaHQ+LmFycm93OmFmdGVyIHsNCiAgICBjb250ZW50OiAiICI7DQogICAgbGVmdDogMXB4Ow0KICAgIGJvdHRvbTogLTEwcHg7DQogICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7DQogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmDQp9DQoNCi5wb3BvdmVyLmJvdHRvbT4uYXJyb3cgew0KICAgIGxlZnQ6IDUwJTsNCiAgICBtYXJnaW4tbGVmdDogLTExcHg7DQogICAgYm9yZGVyLXRvcC13aWR0aDogMDsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjOTk5Ow0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgLjI1KTsNCiAgICB0b3A6IC0xMXB4DQp9DQoNCi5wb3BvdmVyLmJvdHRvbT4uYXJyb3c6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICB0b3A6IDFweDsNCiAgICBtYXJnaW4tbGVmdDogLTEwcHg7DQogICAgYm9yZGVyLXRvcC13aWR0aDogMDsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmDQp9DQoNCi5wb3BvdmVyLmxlZnQ+LmFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICByaWdodDogLTExcHg7DQogICAgbWFyZ2luLXRvcDogLTExcHg7DQogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwOw0KICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTk5Ow0KICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4yNSkNCn0NCg0KLnBvcG92ZXIubGVmdD4uYXJyb3c6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICByaWdodDogMXB4Ow0KICAgIGJvcmRlci1yaWdodC13aWR0aDogMDsNCiAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZjsNCiAgICBib3R0b206IC0xMHB4DQp9DQoNCi5jYXJvdXNlbCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlDQp9DQoNCi5jYXJvdXNlbC1pbm5lciB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgd2lkdGg6IDEwMCUNCn0NCg0KLmNhcm91c2VsLWlubmVyPi5pdGVtIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IC42cyBlYXNlLWluLW91dCBsZWZ0Ow0KICAgIC1vLXRyYW5zaXRpb246IC42cyBlYXNlLWluLW91dCBsZWZ0Ow0KICAgIHRyYW5zaXRpb246IC42cyBlYXNlLWluLW91dCBsZWZ0DQp9DQoNCi5jYXJvdXNlbC1pbm5lcj4uaXRlbT5pbWcsDQouY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+YT5pbWcgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIG1heC13aWR0aDogMTAwJTsNCiAgICBoZWlnaHQ6IGF1dG87DQogICAgbGluZS1oZWlnaHQ6IDENCn0NCg0KQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksDQooLXdlYmtpdC10cmFuc2Zvcm0tM2QpIHsNCiAgICAuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0gew0KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC42cyBlYXNlLWluLW91dDsNCiAgICAgICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7DQogICAgICAgIC1vLXRyYW5zaXRpb246IC1vLXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7DQogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7DQogICAgICAgIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOw0KICAgICAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsNCiAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOw0KICAgICAgICAtd2Via2l0LXBlcnNwZWN0aXZlOiAxMDAwcHg7DQogICAgICAgIC1tb3otcGVyc3BlY3RpdmU6IDEwMDBweDsNCiAgICAgICAgcGVyc3BlY3RpdmU6IDEwMDBweA0KICAgIH0NCg0KICAgIC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5uZXh0LA0KICAgIC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5hY3RpdmUucmlnaHQgew0KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7DQogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7DQogICAgICAgIGxlZnQ6IDANCiAgICB9DQoNCiAgICAuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0ucHJldiwNCiAgICAuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0uYWN0aXZlLmxlZnQgew0KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApOw0KICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTsNCiAgICAgICAgbGVmdDogMA0KICAgIH0NCg0KICAgIC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5uZXh0LmxlZnQsDQogICAgLmNhcm91c2VsLWlubmVyPi5pdGVtLnByZXYucmlnaHQsDQogICAgLmNhcm91c2VsLWlubmVyPi5pdGVtLmFjdGl2ZSB7DQogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsNCiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsNCiAgICAgICAgbGVmdDogMA0KICAgIH0NCn0NCg0KLmNhcm91c2VsLWlubmVyPi5hY3RpdmUsDQouY2Fyb3VzZWwtaW5uZXI+Lm5leHQsDQouY2Fyb3VzZWwtaW5uZXI+LnByZXYgew0KICAgIGRpc3BsYXk6IGJsb2NrDQp9DQoNCi5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlIHsNCiAgICBsZWZ0OiAwDQp9DQoNCi5jYXJvdXNlbC1pbm5lcj4ubmV4dCwNCi5jYXJvdXNlbC1pbm5lcj4ucHJldiB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMDsNCiAgICB3aWR0aDogMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+Lm5leHQgew0KICAgIGxlZnQ6IDEwMCUNCn0NCg0KLmNhcm91c2VsLWlubmVyPi5wcmV2IHsNCiAgICBsZWZ0OiAtMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+Lm5leHQubGVmdCwNCi5jYXJvdXNlbC1pbm5lcj4ucHJldi5yaWdodCB7DQogICAgbGVmdDogMA0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5sZWZ0IHsNCiAgICBsZWZ0OiAtMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5yaWdodCB7DQogICAgbGVmdDogMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMDsNCiAgICBsZWZ0OiAwOw0KICAgIGJvdHRvbTogMDsNCiAgICB3aWR0aDogMTUlOw0KICAgIG9wYWNpdHk6IC41Ow0KICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7DQogICAgZm9udC1zaXplOiAyMHB4Ow0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjYpOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCi5jYXJvdXNlbC1jb250cm9sLmxlZnQgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgLjUpIDAlLCByZ2JhKDAsIDAsIDAsIC4wMDAxKSAxMDAlKTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDEwMCUpOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDEwMCUpOw0KICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsNCiAgICBmaWx0ZXI6IHByb2dpZDogRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzgwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyMwMDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKQ0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbC5yaWdodCB7DQogICAgbGVmdDogYXV0bzsNCiAgICByaWdodDogMDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIC4wMDAxKSAwJSwgcmdiYSgwLCAwLCAwLCAuNSkgMTAwJSk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIC41KSAxMDAlKTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIC41KSAxMDAlKTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7DQogICAgZmlsdGVyOiBwcm9naWQ6IERYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyMwMDAwMDAwMCcsIGVuZENvbG9yc3RyPScjODAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSkNCn0NCg0KLmNhcm91c2VsLWNvbnRyb2w6aG92ZXIsDQouY2Fyb3VzZWwtY29udHJvbDpmb2N1cyB7DQogICAgb3V0bGluZTogMDsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgb3BhY2l0eTogLjk7DQogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKQ0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LA0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCwNCi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LA0KLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiA1MCU7DQogICAgbWFyZ2luLXRvcDogLTEwcHg7DQogICAgei1pbmRleDogNTsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sNCn0NCg0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldiwNCi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0IHsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC0xMHB4DQp9DQoNCi5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQsDQouY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQgew0KICAgIHJpZ2h0OiA1MCU7DQogICAgbWFyZ2luLXJpZ2h0OiAtMTBweA0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LA0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7DQogICAgd2lkdGg6IDIwcHg7DQogICAgaGVpZ2h0OiAyMHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIGZvbnQtZmFtaWx5OiBzZXJpZg0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2OmJlZm9yZSB7DQogICAgY29udGVudDogJ+KAuScNCn0NCg0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICfigLonDQp9DQoNCi5jYXJvdXNlbC1pbmRpY2F0b3JzIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgYm90dG9tOiAxMHB4Ow0KICAgIGxlZnQ6IDUwJTsNCiAgICB6LWluZGV4OiAxNTsNCiAgICB3aWR0aDogNjAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtMzAlOw0KICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICBsaXN0LXN0eWxlOiBub25lOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcg0KfQ0KDQouY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaSB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIHdpZHRoOiAxMHB4Ow0KICAgIGhlaWdodDogMTBweDsNCiAgICBtYXJnaW46IDFweDsNCiAgICB0ZXh0LWluZGVudDogLTk5OXB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZmY7DQogICAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMCBcOTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouY2Fyb3VzZWwtaW5kaWNhdG9ycyAuYWN0aXZlIHsNCiAgICBtYXJnaW46IDA7DQogICAgd2lkdGg6IDEycHg7DQogICAgaGVpZ2h0OiAxMnB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLmNhcm91c2VsLWNhcHRpb24gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBsZWZ0OiAxNSU7DQogICAgcmlnaHQ6IDE1JTsNCiAgICBib3R0b206IDIwcHg7DQogICAgei1pbmRleDogMTA7DQogICAgcGFkZGluZy10b3A6IDIwcHg7DQogICAgcGFkZGluZy1ib3R0b206IDIwcHg7DQogICAgY29sb3I6ICNmZmY7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAuNikNCn0NCg0KLmNhcm91c2VsLWNhcHRpb24gLmJ0biB7DQogICAgdGV4dC1zaGFkb3c6IG5vbmUNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCkgew0KDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LA0KICAgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7DQogICAgICAgIHdpZHRoOiAzMHB4Ow0KICAgICAgICBoZWlnaHQ6IDMwcHg7DQogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4Ow0KICAgICAgICBmb250LXNpemU6IDMwcHgNCiAgICB9DQoNCiAgICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCwNCiAgICAuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMHB4DQogICAgfQ0KDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LA0KICAgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQgew0KICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4DQogICAgfQ0KDQogICAgLmNhcm91c2VsLWNhcHRpb24gew0KICAgICAgICBsZWZ0OiAyMCU7DQogICAgICAgIHJpZ2h0OiAyMCU7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiAzMHB4DQogICAgfQ0KDQogICAgLmNhcm91c2VsLWluZGljYXRvcnMgew0KICAgICAgICBib3R0b206IDIwcHgNCiAgICB9DQp9DQoNCi5jbGVhcmZpeDpiZWZvcmUsDQouY2xlYXJmaXg6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouY2xlYXJmaXg6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5jZW50ZXItYmxvY2sgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICAgIG1hcmdpbi1yaWdodDogYXV0bw0KfQ0KDQoucHVsbC1yaWdodCB7DQogICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQNCn0NCg0KLnB1bGwtbGVmdCB7DQogICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudA0KfQ0KDQouaGlkZSB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCi5zaG93IHsNCiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50DQp9DQoNCi5pbnZpc2libGUgew0KICAgIHZpc2liaWxpdHk6IGhpZGRlbg0KfQ0KDQoudGV4dC1oaWRlIHsNCiAgICBmb250OiAwLzAgYTsNCiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgdGV4dC1zaGFkb3c6IG5vbmU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyOiAwDQp9DQoNCi5oaWRkZW4gew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQouYWZmaXggew0KICAgIHBvc2l0aW9uOiBmaXhlZA0KfQ0KDQpALW1zLXZpZXdwb3J0IHsNCiAgICB3aWR0aDogZGV2aWNlLXdpZHRoOw0KfQ0KDQoudmlzaWJsZS14cyB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCi52aXNpYmxlLXNtIHsNCiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCn0NCg0KLnZpc2libGUtbWQgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQoudmlzaWJsZS1sZyB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCi52aXNpYmxlLXhzLWJsb2NrLA0KLnZpc2libGUteHMtaW5saW5lLA0KLnZpc2libGUteHMtaW5saW5lLWJsb2NrLA0KLnZpc2libGUtc20tYmxvY2ssDQoudmlzaWJsZS1zbS1pbmxpbmUsDQoudmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssDQoudmlzaWJsZS1tZC1ibG9jaywNCi52aXNpYmxlLW1kLWlubGluZSwNCi52aXNpYmxlLW1kLWlubGluZS1ibG9jaywNCi52aXNpYmxlLWxnLWJsb2NrLA0KLnZpc2libGUtbGctaW5saW5lLA0KLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHsNCiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCn0NCg0KQG1lZGlhKG1heC13aWR0aDo3NjdweCkgew0KICAgIC52aXNpYmxlLXhzIHsNCiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRhYmxlLnZpc2libGUteHMgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdHIudmlzaWJsZS14cyB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdGgudmlzaWJsZS14cywNCiAgICB0ZC52aXNpYmxlLXhzIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjc2N3B4KSB7DQogICAgLnZpc2libGUteHMtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjc2N3B4KSB7DQogICAgLnZpc2libGUteHMtaW5saW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6NzY3cHgpIHsNCiAgICAudmlzaWJsZS14cy1pbmxpbmUtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTkxcHgpIHsNCiAgICAudmlzaWJsZS1zbSB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICB0YWJsZS52aXNpYmxlLXNtIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRyLnZpc2libGUtc20gew0KICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRoLnZpc2libGUtc20sDQogICAgdGQudmlzaWJsZS1zbSB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTkxcHgpIHsNCiAgICAudmlzaWJsZS1zbS1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk5MXB4KSB7DQogICAgLnZpc2libGUtc20taW5saW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk5MXB4KSB7DQogICAgLnZpc2libGUtc20taW5saW5lLWJsb2NrIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC52aXNpYmxlLW1kIHsNCiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRhYmxlLnZpc2libGUtbWQgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdHIudmlzaWJsZS1tZCB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdGgudmlzaWJsZS1tZCwNCiAgICB0ZC52aXNpYmxlLW1kIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSBhbmQgKG1heC13aWR0aDoxMTk5cHgpIHsNCiAgICAudmlzaWJsZS1tZC1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC52aXNpYmxlLW1kLWlubGluZSB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSBhbmQgKG1heC13aWR0aDoxMTk5cHgpIHsNCiAgICAudmlzaWJsZS1tZC1pbmxpbmUtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAudmlzaWJsZS1sZyB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICB0YWJsZS52aXNpYmxlLWxnIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRyLnZpc2libGUtbGcgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRoLnZpc2libGUtbGcsDQogICAgdGQudmlzaWJsZS1sZyB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAudmlzaWJsZS1sZy1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLnZpc2libGUtbGctaW5saW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6NzY3cHgpIHsNCiAgICAuaGlkZGVuLXhzIHsNCiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5OTFweCkgew0KICAgIC5oaWRkZW4tc20gew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC5oaWRkZW4tbWQgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLmhpZGRlbi1sZyB7DQogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KLnZpc2libGUtcHJpbnQgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC52aXNpYmxlLXByaW50IHsNCiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRhYmxlLnZpc2libGUtcHJpbnQgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdHIudmlzaWJsZS1wcmludCB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdGgudmlzaWJsZS1wcmludCwNCiAgICB0ZC52aXNpYmxlLXByaW50IHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQoudmlzaWJsZS1wcmludC1ibG9jayB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCkBtZWRpYSBwcmludCB7DQogICAgLnZpc2libGUtcHJpbnQtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQoudmlzaWJsZS1wcmludC1pbmxpbmUgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC52aXNpYmxlLXByaW50LWlubGluZSB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQoudmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC5oaWRkZW4tcHJpbnQgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQp9", + "name": "bootstrap.min.css", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "5faaf2d7-8da6-4a49-9926-8dec626f3fff", + "content": "{\"pageid\":\"33b351a2-b34c-4a43-8847-2e197c21d4d3\"}", + "name": "Access Denied", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "60075fc1-3ba7-4a1f-8dda-51bef1c190f2", + "content": "{\"source\":\"
\\r\\n {% editable page 'adx_copy' type: 'html', liquid: true %}\\r\\n
\\r\\n\"}", + "name": "Page Copy", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "68c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"False\"}", + "name": "Profile/ForceSignUp", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6901812e-5234-ed11-9db1-0022480b428a", + "content": "{\"value\":\"false\"}", + "name": "Profile/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6942c943-cc5d-44dc-883a-13ff114978e4", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"230c16df-fb1b-4828-8be1-b0a87016a6a3\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"profile\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false,\"title\":\"Profile\"}", + "name": "Profile", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "69aab0b5-766e-45fd-b01e-d3e36f00b221", + "content": "{\"display_name\":\"Header/Search/ToolTip\",\"value\":\"Search\\r\\n\"}", + "name": "Header/Search/ToolTip", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "69c74723-3634-ed11-9db1-0022480b4066", + "name": "Authentication/OpenAuth/LinkedIn/ConsumerSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6cc74723-3634-ed11-9db1-0022480b4066", + "name": "Authentication/OpenAuth/LinkedIn/ConsumerKey", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6dc74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Facebook/AppId", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6ec74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Determines if faceted search is used for this portal.\",\"value\":\"True\"}", + "name": "Search/FacetedView", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6fc74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A true or false value. If set to true, the local account will be marked as deprecated. The portal user will be required to migrate to a non-deprecated account.\",\"value\":\"False\"}", + "name": "Authentication/Registration/LocalLoginDeprecated", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "70c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The default number of unauthenticated login attempts from an IP address before the IP address is blocked for Authentication/LoginThrottling/IpAddressTimeoutTimeSpan if the attempts occur within Authentication/LoginThrottling/MaxAttemptsTimeLimitTimeSpan amount of time. Default: 1000\",\"value\":\"1000\"}", + "name": "Authentication/LoginThrottling/MaxInvaildAttemptsFromIPAddress", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "71c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"True\"}", + "name": "Profile/ShowMarketingOptionsPanel", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "72c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Microsoft/ClientId", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "73c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Microsoft/ClientSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7539188e-00a7-4c37-99ea-6ee2751b5057", + "content": "{\"value\":\"sharepoint.com;microsoftonline.com\"}", + "name": "OnlineDomains", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "75c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Facebook/AppSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7683ceb1-f4cb-4eaa-b886-c61c493f0033", + "content": "{\"source\":\"{% extends 'Layout 2 Column Wide Left' %}\\r\\n\\r\\n{% block title %}\\r\\n{% assign rt = snippets['Search/ResultsTitle'] %}\\r\\n{% if rt %}\\r\\n {% assign title = rt | liquid %}\\r\\n{% else %}\\r\\n {% assign title = rt %}\\r\\n{% endif %}\\r\\n{% assign title = title | truncate: 115 %}\\r\\n{% include 'Page Header', title: title %}\\r\\n{% endblock %}\\r\\n\\r\\n{% block main %}\\r\\n{% assign page_size = 10 %}\\r\\n{% assign current_page = request.params.page | default: 1 %}\\r\\n{% searchindex query: request.params.q, page: request.params.page, page_size: page_size %}\\r\\n{% if searchindex.results.size > 0 %}\\r\\n

\\r\\n {% assign rc = snippets['Search/ResultsCount'] -%}\\r\\n {%- if rc %}{{ rc | liquid }}{% else %}{{ current_page }} - {{ page_size }} of {{ searchindex.approximate_total_hits }} Results test{% endif %}\\r\\n

\\r\\n
    \\r\\n {% for result in searchindex.results %}\\r\\n
  • \\r\\n

    \\r\\n {{ result.title | escape }}\\r\\n

    \\r\\n

    {{ result.fragment }}

    \\r\\n
  • \\r\\n {% endfor %}\\r\\n
\\r\\n {% include 'Pagination', current_page: searchindex.page, page_size: page_size, total: searchindex.approximate_total_hits %}\\r\\n{% else %}\\r\\n {{ snippets['Search/NoResults'] }}\\r\\n{% endif %}\\r\\n{% endsearchindex %}\\r\\n{% endblock %}\\r\\n\"}", + "name": "Search Results", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "77c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/OpenRegistrationEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "78bce106-2dd7-46ee-b289-e002c8d2f265", + "content": "{\"value\":\"false\"}", + "name": "Header/ShowAllProfileNavigationLinks", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "78c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The amount of time the IP address will have to wait if Authentication/LoginThrottling/MaxInvaildAttemptsFromIPAddress occur within Authentication/LoginThrottling/MaxAttemptsTimeLimitTimeSpan amount of time. Default: 00:10:00 (10 mins)\",\"value\":\"00:10:00\"}", + "name": "Authentication/LoginThrottling/IpAddressTimeoutTimeSpan", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "79c7e3fd-0ba3-ed11-83ff-00224828d88f", + "content": "{\"display_name\":\"Logo URL\",\"value\":\"/Logo-sm-64.png\\r\\n\"}", + "name": "Logo URL", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "7a0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"Portal Search\"}", + "name": "Search/IndexQueryName", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7a31e640-5401-43c9-a5c1-ab3158ed81f2", + "content": "{\"source\":\"
\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\"}", + "name": "Footer", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7ac74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Denies use of the portal to minors without parental consent. By default, it is set to false.\",\"value\":\"false\"}", + "name": "Authentication/Registration/DenyMinorsWithoutParentalConsent", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7ac7e3fd-0ba3-ed11-83ff-00224828d88f", + "content": "{\"display_name\":\"Logo alt text\",\"value\":\"Contoso Limited\\r\\n\"}", + "name": "Logo alt text", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "7bc74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Used to group a set of entities under an entry in the record type facet view.\",\"value\":\"Downloads:annotation,adx_webfile\"}", + "name": "Search/RecordTypeFacetsEntities", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7bc7e3fd-0ba3-ed11-83ff-00224828d88f", + "content": "{\"display_name\":\"Site name\",\"value\":\"Company name\\r\\n\"}", + "name": "Site name", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "7c0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A collection of search logical name filter options. Defining a value here will add dropdown filter options to site-wide search.\\n\\nThis value should be in the form of name/value pairs, with name and value separated by a colon, and pairs separated by a semicolon. For example: \\\"Forums:adx_communityforum,adx_communityforumthread,adx_communityforumpost;Blogs:adx_blog,adx_blogpost,adx_blogpostcomment\\\".\"}", + "name": "search/filters", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7d0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/InvitationEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7e0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Setting controls whether attachments will be displayed on Knowledge articles\",\"value\":\"false\"}", + "name": "KnowledgeManagement/DisplayNotes", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7f0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A date/time value in GMT format to represent the effective date of the current published terms and conditions. If the terms agreement is enabled, portal users that have not accepted the terms after this date will be asked to accept them the next time they sign in. If the date is not provided, and the terms agreement is enabled, the terms will be presented every time portal users sign in.\"}", + "name": "Authentication/Registration/TermsPublicationDate", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "800c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3}", + "name": "Authentication/Registration/LoginButtonAuthenticationType", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "807de936-e33a-4658-a7bc-2387e88eb1a6", + "content": "{\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"Logo-sm-64.png\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAArASURBVHgBzVtrTBzXFT53diF2GlvIqeRnkjV+QKN6IQrYSfjRhRrHaSXbTasoVXCDE7UCY8lUtfOjqm0oUVNhR4HUDm6qyrTGP6I6jUFKa4FliNS0TiHyApVSUgxrJVBAsuPYxEmA3cn97jJ4H/fOY9ld8kmwq5k7M3vPOfc7555zhlGKke+r8FCG5pvhXxmjB5jOPMT0LMJnJJge0HUW4J83WIh6NU33f8H//nv+ZIBSCEYpQP7WCt8M03ZpjHbGTdQ5/CHS33HTdLO/4w9+SjKSJgCPrzpraebUfv61PAmTVoFbCNXcnMpoDXQ13KAkYN4CmJt4iFXzu2VReoCl0qxNZTb65ymIeQnAW7p3P9d2TRonHgthEX3tJ/5ECSIhAeRur/BkBF2n+MU+J9etWn4v/1tGS+5ZTJ3/7KNkQSfqmnYF9yRCmI4F4ETrmHBx0SYqeTSPctavpm7/IJ0510k9vf+jFCAha3AkAO+2qle4uKvNxiz5xmLa8fgWMemCvA3iWGv7JTp5+m80On6dUg6mcyG8Vmt7uN2BeY9XndJDnOEVwMTLniymZ5708e93i2OjY9fp0MunU6VxJXRGDf3tJ35uZ6wtAXhLqy7zj3zV+QLvBqo7WCZM3sCZv3ZSE9f6rc8+p4UA54Xm/o4Te6zGWQrASvMvVP6QnvlBcdQxmDsmbwewnOIiL+VmrxECBEHi79ZkWHADVz6mkYlr1MP5Y2DoY3ICO0IwFYB3294jgvAkAJs31PyMctatiTp+6GgLtXVcIitgkrCcslnh4T44ZobR8WtiObW2v0c9fTaXlQUnKAUg2J5Yg+wcJv/HY/ujTB6ob3qTzrzVSYkC1pCzfg0VP+qlksfyaNWKZcqxEEQLf5Ytd8qoXOUdpAKAn8+ccV2WuTrV5J2YvV3Ai+wo3UI7tz2iHNPGPUyTtYe5MeUKPiSLE1yy0avWbuaTZytij0NDLa8eiJs83NzRk29SsoFJQcOYJJZHbsxyA7B0SjiHDFwZMRPCIk3X8ieGuuOsIE4Am0r3ljNi5bK7HNr/NNfKxugfyV3d4WOnU8r2uLchCCyNWK5Ycs/dwkrwW1REyU3ds3xDwafjV3qiCCpKADB9t85O8eFxpg+mf+7pbXE3rm86ywlpkNIBCMLgmMLZICsSsAQzIXBCf2Tl/UW/Hwtc+sI45I48nxnSnuWT98Reh3Vf+ZMn4u4H02/reI/sQpAcN1mExTnZ980dn5y8LVzdwOCILXYH32Bc3S92xxEl3DJcp0IIWSH3FCLZGuPAHAkK4gtqnTIB1B0oox0SInpi92Fb4S3cXcljXhEiG1GiCrc+u02d7/bZIbYwIR+tjhMC3OVTFb9VLcsb2nTGWmMbPbcEVq7dvEu29vGQuoO74+5iR/vQOHjjhcofkfdba+muzAyyAsbAShBWr+bPhjZV/BLmht44XgAnrL1vBZ1/533ZZYt0bWZ8fCjMBZpxlJvCEdnoyt3fkx0WZmgGaP3vLbVSy7ELXAuXm5O9RjkGVvL8wQax9iOB6BK/QQadaTuN70IAyOGp1r5sAghCzMxzR2n4h1uZux3A5eJeuKcK+C3Vta/Phc8GsD+RAXmMb2/d58N3IYAgucplA1Xah/mrUMzXuurBiQLmDXIzswQsFXikSIh8BP89MmgU8oU/SUgkTzaoIE9uQiqmhsXgh6YCEEJD7U8Fr6gATmqJCcXLYjZqc2BMLAMN7M8lELfVzVm3Oi7iA8zMHxYjuyZZwL2tBAxuilwKUKLiN+Xn84SuljHtlu7zC7wbpQ+AqUnHI26fB+HZBZ6hIjcAk286/XbUsZ3btkjHBu+a+o7GWEgqANVOrFth/mW7fJQulCjWtYEzb3VFeQWVwFiQHtJ0xfrPVRBOrLsBsPaLi6S3SQlgBWZcADS13LGCnHXyuTDGHuDVK+YhB5CFmNjDpxMgRNWkDLTxpInBBWK8RKFc+fkaaXqW6iGxiPWzBszWZKqg8lCRiPQI2H9IkKWp6niyySJOlyE3O70WANjxNjY2Vh5NdebW5G36OgP7BCvAZRuKVAlMKYCRiTQUMdKAi3yzZAalAORsL5fiQljLzUl7GSikysygoTNDdqKn70PpBTL3c3MBih//53t+OxidCI8blY8P8D0Bk9bXITkZEcrcj5WUU4Fum3WBgcGw25ZZNCE5opPcAoBWSYFDJoBOi3WWCtitNxr7FmkIz/SrGtPpquriNsm2V+bz8ZB0FkAv8pSZkyw0tC8dHyI/T5eTsvEIph07MWRjZTzQ1JLcoogZnFafuhV8prvosuZyhbrMLq6PKXiowlAIKh1WAO2b5SNkUJXPXCzUq/lRLmJqHsDaiU0yqDJF9SmoDkUCpHz05FnpuR18y6ty0woB+DH3cBwQpFYyAZIMkSSCOFzGBbK0VDKBe8uSMaJuwZXipAOFZ8HE0hcCCDHtnNlgSL665vUoV6KyAuzFk10kBaAEVRoeKXQkYEdtxgZAUGeiTijqAhND/w4sX19YLiuJGQCLYu1t9z0scverVtwrNB74aDxurLFGC/Pmv0uE8F9sfENJfLDEX/HaQ/8HASdVquH+C+EWmjuhcIgsu6sw4acqX5qzhLoDu5XEA42JytFY4nuKbk6qeJ6q4SJctAlnoM0y1XFgNNcwcacydH+RX9dCFfzkIrNrjWoMtAsrwOf5rvdpanpGOhaag2mCoL65bCnZASZ++OWWcIJT4e/hipt+UyUqQADK8zZjg4DmCtaODfZEl8ZQMV2eXbiY54l8VnfAg/7y9j/E96KCB2k1zx+adWognjjLx2PM8Edj9CUX1rXrNwUT4V4jnLze7flABF4vvvrGrNDMLQclt6LCB8V3uMazs7/HEjpr7G1/bY7zojpEkCYOuaeHnbS+wgwrOCEu5SR0KMV9AgZii7XPH2i02zM0zLVf4o/oFIlrkfFurULT8yuUAFBLSOXGCGYvaoURgRjW/uFjLfZuIOkVkvYIbSqt6nTaB5xqQLjoSosMduAhBCnb8//DfR0nsmMPumUjXa7gnpCiSSrdMDpQKyRxhyowioNOn2juYInslLRJCgy5PHvzl1wA22kBAR/f9NJeXuCMrznAQyDosolf9rY3nZedMG+U/O6+Bp42309phNE5upOXw1Wpb0cteTqr7btwvEZ12rJVlpNiMx/1rOo8NiGFXFOOujclsNtG42zy1Nx3YR6tsgasmqWNXh2+qxSNTt39H4pPrE9ZfG68OGE0S5UUbbJspnDaea7r1MnD3RKrcbbb5a0sAYA1VJZ9X1pYNaLBROC489yG5g04e2Fi674aruUjVuMgCPQV5q5LvGIEF4c8BCbvILji5T7W2Ndx3Na7AoDzV2YQKKGhytYrM8tEiwq6uKy6wTHhkdlu8M5/9TnPLnFXx///mmu+wcllCb00lb+9whNS9BSaAQyPDVSkIDBx/DnZy8dA5+u9y+UOPudPx0tTkQj3FaO9jnloIZCg1iPhonlgYqjbv3Ljw616yPUp5waPWUIlqRATZ/XaTMaPey/+rovmgaS9OotlEQxqvhRaBCc4nrzVtT9rM+4G/9fl1VkZ0ISokV5OaL9h6vjBAvrsR4D/aw3pWut/LhzvoiQjJQKIhLCMaXc+mrHQjyRacvD6PD6jAO2yT1CqY4yu8rG9runMc8nStApfAY29zBjDMznVAAAAAElFTkSuQmCC", + "name": "Logo-sm-64.png", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "813f2b0d-9faa-4575-bf1b-d0b04f395e6d", + "content": "{\"display_name\":\"Search/Results Count\",\"value\":\"{{ current_page }} - {{ page_size }} of {{ searchindex.approximate_total_hits }} Results\\r\\n\"}", + "name": "Search/ResultsCount", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "830c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"true\"}", + "name": "Authentication/Registration/LocalLoginEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "840c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Twitter/ConsumerKey", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "850c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"false\"}", + "name": "Search/IndexNotesAttachments", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "860c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Denies use of the portal to minors. By default, it is set to false.\",\"value\":\"false\"}", + "name": "Authentication/Registration/DenyMinors", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "870c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/EmailConfirmationEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "880c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The amount of time the Authentication/LoginThrottling/MaxInvaildAttemptsFromIPAddress are to be within before the IP address has to wait Authentication/LoginThrottling/IpAddressTimeoutTimeSpan. Default: 00:03:00 (3 mins)\",\"value\":\"00:03:00\"}", + "name": "Authentication/LoginThrottling/MaxAttemptsTimeLimitTimeSpan", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "890c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The Prefix entered here will be used to filter Notes Text, allowing you to control notes exposed on the Portal ex: *WEB*\",\"value\":\"*WEB*\"}", + "name": "KnowledgeManagement/NotesFilter", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8a0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Override query for site search, to apply additional weights and filters. @Query is the query text entered by a user. Lucene query syntax reference: http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html\",\"value\":\"+(@Query) _title:(@Query) _logicalname:knowledgearticle~0.9^0.3 _logicalname:annotation~0.9^0.25 _logicalname:adx_webpage~0.9^0.2 -_logicalname:adx_webfile~0.9 adx_partialurl:(@Query) _logicalname:adx_blogpost~0.9^0.1 -_logicalname:adx_communityforumthread~0.9\"}", + "name": "search/query", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8b0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5,\"value\":\"true\"}", + "name": "Authentication/Registration/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8c0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Twitter/ConsumerSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8c2df0ce-046c-4722-bb2d-9dab810be016", + "content": "{\"source\":\"{% assign title = title | default: page.title %}\\r\\n\\r\\n\\r\\n\"}", + "name": "Breadcrumbs", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8d0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Enables or disables Azure AD as an external identity provider. By default, it is set to true.\",\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/AzureADLoginEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8e0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Sets whether or not the portal can redirect the user to the profile page after successful sign-in. By default, it is set to true.\",\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/ProfileRedirectEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8f0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/ExternalLoginEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8f919997-af47-486f-94f3-b6ed23401e19", + "content": "{\"managecontentsnippets\":false,\"managesitemarkers\":false,\"manageweblinksets\":false,\"previewunpublishedentities\":true}", + "name": "Preview permission for Blank Template", + "powerpagecomponenttype": "12", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "900c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A true or false value. If set to true, the portal will display the terms and conditions of the site. Users must agree to the terms and conditions before they are considered authenticated and can use the site.\",\"value\":\"false\"}", + "name": "Authentication/Registration/TermsAgreementEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "920c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A true or false value. If set to true, the Last Successful Login field on the portal user’s contact will be updated with the date and time when they successfully signed in.\",\"value\":\"False\"}", + "name": "Authentication/LoginTrackingEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "9a399489-4241-4271-a5a0-4230cefb2dff", + "content": "{\"description\":\"Set whether the header web template is output cached.\",\"value\":\"True\"}", + "name": "Header/OutputCache/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "9caacc61-abcf-4fda-9351-35fe04baec24", + "content": "{\"anonymoususersrole\":false,\"authenticatedusersrole\":false}", + "name": "Administrators", + "powerpagecomponenttype": "11", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "9df32875-e94f-40f9-ab11-4af812195522", + "content": "{\"displayorder\":1,\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"feedbackpolicy\":756150005,\"hiddenfromsitemap\":false,\"isroot\":true,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"partialurl\":\"/\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false,\"title\":\"Home\"}", + "name": "Home", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "a49ed643-6d15-4791-b95d-5655c2477650", + "content": "{\"displayorder\":10,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"portalbasictheme.css\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "LyoqDQogKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQuIENoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBub3QNCiAqIHN1cHBvcnRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IGRvIG5vdCBtb2RpZnkgdGhpcyBmaWxlLiBBbnkNCiAqIGNoYW5nZSB0byB0aGlzIGZpbGUgd2lsbCBnZXQgb3ZlcndyaXR0ZW4gd2l0aCBhIHRoZW1lIGFwcGxpZWQgdXNpbmcNCiAqIFNpdGUgU3R5bGluZyBwYW5lbCBmcm9tIFBvd2VyIEFwcHMgUG9ydGFscy4NCiAqLw0KIDpyb290IHsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTogIzJFNDU2QjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMjogI0ZGQ0E0QjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMzogIzI3NzQ5MzsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNDogI0ZFQTAwMjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNTogI0YzREJCMTsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNjogIzg4QUJBMjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNzogI0ZGRkZGRjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yODogIzJBMkMyRTsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yOTogI0U1ODcwMDsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTA6IDsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTE6IDsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTI6IDsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3IxOiAjRkZGRkZGOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjI6ICMyQTJDMkU7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yMzogI0ZGRkZGRjsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3I0OiAjMkEyQzJFOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjU6ICMyQTJDMkU7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yNjogIzJBMkMyRTsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3I3OiAjMkEyQzJFOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjg6ICNGRkZGRkY7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yOTogIzJBMkMyRTsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3IxMDogOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjExOiA7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yMTI6IDsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yMSk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IxKTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEiXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMSJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEiXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMSJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjEpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IyKTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjIpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMiJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IyIl0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMiJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IyIl0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMik7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjMpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMyk7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IzIl0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjMiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IzIl0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjMiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IzKTsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yNCk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I0KTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjQiXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNCJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjQiXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNCJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjQpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I1KTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjUpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNSJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I1Il0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNSJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I1Il0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yNSk7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjYpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yNik7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I2Il0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjYiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I2Il0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjYiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I2KTsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yNyk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I3KTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjciXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNyJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjciXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNyJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjcpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I4KTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjgpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOCJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I4Il0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOCJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I4Il0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yOCk7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjkpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yOSk7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I5Il0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjkiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I5Il0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjkiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I5KTsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjEwKTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjEwKTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IxMCk7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMSk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IxMSk7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMTEpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yMTIpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMTIpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjEyKTsgfQ0KDQpib2R5IHsNCiAgY29sb3I6ICMwMDAwMDA7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7IH0NCg0KbGVnZW5kIHsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KZm9vdGVyIHsNCiAgY29sb3I6ICMyQTJDMkU7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAxNnB4OyB9DQogIGZvb3RlciAuZm9vdGVyLWJvdHRvbSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzg4QUJBMjsgfQ0KDQouY29sdW1uQmxvY2tMYXlvdXQgew0KICBtYXJnaW4tdG9wOiA2MHB4Ow0KICBtYXJnaW4tYm90dG9tOiA2MHB4Ow0KICBwYWRkaW5nOiAxNnB4OyB9DQoNCi5icmVhZGNydW1iIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0NCiAgLmJyZWFkY3J1bWIgPiBsaSBhIHsNCiAgICBjb2xvcjogIzJBMkMyRTsgfQ0KICAgIC5icmVhZGNydW1iID4gbGkgYTpob3ZlciB7DQogICAgICBjb2xvcjogIzJBMkMyRTsgfQ0KICAuYnJlYWRjcnVtYiA+IC5hY3RpdmUgew0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQoNCi5uYXYtdGFicyA+IGxpID4gYTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCi5uYXYtdGFicyA+IGxpID4gYTpmb2N1cyB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCi5idG4tcHJpbWFyeSB7DQogIGNvbG9yOiAjMkEyQzJFOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICBib3JkZXItY29sb3I6ICNGRUEwMDI7DQogIGJvcmRlci1yYWRpdXM6IDJweDsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNjAwOw0KICBmb250LXNpemU6IDE0cHg7DQogIHBhZGRpbmc6IDZweCAyMHB4Ow0KICB3aWR0aDogZml0LWNvbnRlbnQ7DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRUEwMDI7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQogIC5idG4tcHJpbWFyeTpob3ZlciB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICBib3JkZXItY29sb3I6ICNFNTg3MDA7IH0NCiAgLmJ0bi1wcmltYXJ5OmFjdGl2ZSwgLmJ0bi1wcmltYXJ5LmFjdGl2ZSB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICBib3JkZXItY29sb3I6ICNFNTg3MDA7IH0NCiAgICAuYnRuLXByaW1hcnk6YWN0aXZlOmhvdmVyLCAuYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLCAuYnRuLXByaW1hcnk6YWN0aXZlLmZvY3VzLCAuYnRuLXByaW1hcnkuYWN0aXZlOmhvdmVyLCAuYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLCAuYnRuLXByaW1hcnkuYWN0aXZlLmZvY3VzIHsNCiAgICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICAgIGJvcmRlci1jb2xvcjogI0U1ODcwMDsgfQ0KICAuYnRuLXByaW1hcnk6Zm9jdXMsIC5idG4tcHJpbWFyeS5mb2N1cyB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICBib3JkZXItY29sb3I6ICNFNTg3MDA7IH0NCg0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzJFNDU2QjsgfQ0KDQoubmF2YmFyLXRvZ2dsZSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRUEwMDI7IH0NCg0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciAubWVudS1iYXIgPiAubmF2YmFyLW5hdiA+IGxpID4gYSB7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAyMHB4OyB9DQogIC5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXIgLm1lbnUtYmFyID4gLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIgew0KICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSB7DQogIGJvcmRlcjogMXB4IHNvbGlkICNGRUEwMDI7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTU4NzAwOw0KICAgIGJvcmRlci1jb2xvcjogI0U1ODcwMDsgfQ0KICAubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6Zm9jdXMgew0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZmZmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsgfQ0KICAubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMkEyQzJFOw0KICAgIGJvcmRlci1jb2xvcjogIzJBMkMyRTsgfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEgew0KICBjb2xvcjogI0ZGRkZGRjsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDIwcHg7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICAgIGNvbG9yOiAjMDAwMDAwOw0KICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQogIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICB0ZXh0LWRlY29yYXRpb246IFVuZGVybGluZTsgfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGEgew0KICBjb2xvcjogIzAwMDAwMDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmhvdmVyIHsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQogIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7DQogICAgY29sb3I6ICMwMDAwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgICB0ZXh0LWRlY29yYXRpb246IFVuZGVybGluZTsgfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIgew0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCiAgICAgIGNvbG9yOiAjRkVBMDAyOw0KICAgICAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMgew0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCiAgICAgIGNvbG9yOiAjRkVBMDAyOw0KICAgICAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7DQogICAgY29sb3I6ICNGRUEwMDI7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciB7DQogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOw0KICAgICAgY29sb3I6ICNGRUEwMDI7DQogICAgICB0ZXh0LWRlY29yYXRpb246IFVuZGVybGluZTsgfQ0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHsNCiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7DQogICAgICBjb2xvcjogI0ZFQTAwMjsNCiAgICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQoNCi5uYXYgPiBsaSA+IGEgew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCiAgLm5hdiA+IGxpID4gYTpob3ZlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KICAubmF2ID4gbGkgPiBhOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyB9DQogIC5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEgew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjb2xvcjogIzAwMDAwMDsgfQ0KICAgIC5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIgew0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsNCiAgICAgIGNvbG9yOiAjMDAwMDAwOyB9DQogICAgLm5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7DQogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgICAgY29sb3I6ICMwMDAwMDA7IH0NCiAgLm5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQogICAgLm5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyIHsNCiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogICAgICBjb2xvcjogIzAwMDAwMDsgfQ0KICAgIC5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7DQogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgICAgY29sb3I6ICMwMDAwMDA7IH0NCg0KLm5hdiA+IC5vcGVuID4gYSB7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KICAubmF2ID4gLm9wZW4gPiBhOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQogIC5uYXYgPiAub3BlbiA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnNlY3Rpb25QcmltYXJ5Q29sb3Igew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDQTRCOw0KICBjb2xvcjogIzAwMDAwMDsgfQ0KICAuc2VjdGlvblByaW1hcnlDb2xvciBoMSwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDIsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGgzLCAuc2VjdGlvblByaW1hcnlDb2xvciBoNCwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDUsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGg2LCAuc2VjdGlvblByaW1hcnlDb2xvciBwLCAuc2VjdGlvblByaW1hcnlDb2xvciBhIHsNCiAgICBjb2xvcjogIzAwMDAwMDsgfQ0KICAuc2VjdGlvblByaW1hcnlDb2xvciAuY3JtRW50aXR5Rm9ybVZpZXcgaDEsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMiwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmNybUVudGl0eUZvcm1WaWV3IGgzLCAuc2VjdGlvblByaW1hcnlDb2xvciAuY3JtRW50aXR5Rm9ybVZpZXcgaDQsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNSwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmNybUVudGl0eUZvcm1WaWV3IGg2LCAuc2VjdGlvblByaW1hcnlDb2xvciAuY3JtRW50aXR5Rm9ybVZpZXcgcCwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmNybUVudGl0eUZvcm1WaWV3IGEgew0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQogIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGgxLCAuc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoMiwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDMsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGg0LCAuc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoNSwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDYsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IHAsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGEgew0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQoNCmE6bm90KC5idG4pIHsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0NCiAgYTpub3QoLmJ0bik6aG92ZXIgew0KICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9DQoNCmEsDQouYSB7DQogIGNvbG9yOiAjMkEyQzJFOw0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA0MDA7DQogIGZvbnQtc2l6ZTogMTRweDsgfQ0KICBhOmhvdmVyLCBhOmZvY3VzLA0KLmE6aG92ZXIsDQouYTpmb2N1cyB7DQogICAgY29sb3I6ICMyQTJDMkU7IH0NCg0KYVtkaXNhYmxlZF0gew0KICBjb2xvcjogI0ExOUY5RDsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH0NCg0KYnV0dG9uW2Rpc2FibGVkXSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGM0YyRjE7DQogIGNvbG9yOiAjQTE5RjlEOw0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgYm9yZGVyOiAycHg7IH0NCg0KLm9wZW4gPiAuYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlIHsNCiAgY29sb3I6ICMyQTJDMkU7DQogIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7DQogIGJvcmRlci1jb2xvcjogI0ZFQTAwMjsgfQ0KDQoub3BlbiA+IC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGUgew0KICBjb2xvcjogI2ZmZmZmZjsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgYm9yZGVyLWNvbG9yOiAjRkVBMDAyOyB9DQogIC5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwgLm9wZW4gPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLCAub3BlbiA+IC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGUuZm9jdXMgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFNTg3MDA7DQogICAgYm9yZGVyLWNvbG9yOiAjYjI2OTAwOyB9DQoNCi5jcm1FbnRpdHlGb3JtVmlldywgLmVudGl0eWxpc3QsIC5tb2RhbC1jb250ZW50LCAucG9wb3Zlci1jb250ZW50IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsNCiAgY29sb3I6ICMwMDAwMDA7DQogIGJvcmRlcjogMXB4IHNvbGlkICNmMmYyZjI7IH0NCg0KLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtYm9keSwgLmxpc3QtZ3JvdXAtaXRlbSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7DQogIGNvbG9yOiAjMDAwMDAwOyB9DQoNCi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICBjb2xvcjogIzAwMDAwMDsgfQ0KDQouZmFjZXQtbGlzdC1ncm91cC1pdGVtLXRpdGxlIHsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KLmZvcm0tY29udHJvbCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KaW5wdXQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyB9DQoNCi5ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXItd2lkZ2V0IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsgfQ0KICAuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldCB0YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpob3ZlciwgLmJvb3RzdHJhcC1kYXRldGltZXBpY2tlci13aWRnZXQgdGFibGUgdGQuZGF5OmhvdmVyLCAuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldCB0YWJsZSB0ZCBzcGFuOmhvdmVyIHsNCiAgICBjb2xvcjogYmxhY2s7IH0NCiAgLmJvb3RzdHJhcC1kYXRldGltZXBpY2tlci13aWRnZXQgdGFibGUgdGQuYWN0aXZlOmhvdmVyLCAuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldCB0YWJsZSB0ZCBzcGFuLmFjdGl2ZTpob3ZlciB7DQogICAgY29sb3I6IHdoaXRlOyB9DQoNCi50YWJsZS1zdHJpcGVkID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7IH0NCg0KLmxvZ2luLWhlYWRpbmctc2VjdGlvbiB7DQogIGNvbG9yOiB1bnNldDsgfQ0KDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIHsNCiAgY29sb3I6ICNmZmZmZmY7IH0NCg0KLnNlYXJjaC1yZXN1bHRzIC5oaWdobGlnaHQgew0KICBjb2xvcjogIzAwMDAwMDsgfQ0KDQoudGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0ZCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGhlYWQgPiB0ci5pbmZvID4gdGggew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5pbmZvIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUgPiB0aGVhZCA+IHRyID4gdGguaW5mbyB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRib2R5ID4gdHIuaW5mbyA+IHRoIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUgPiB0Ym9keSA+IHRyID4gdGQuaW5mbyB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmluZm8gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRkIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0aCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmluZm8gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5pbmZvIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuaW5mbzpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmluZm86aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRkIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmluZm86aG92ZXIgPiB0aCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5pbmZvIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQouZm9ybS1jbG9zZSB7DQogIGNvbG9yOiAjMDAwMDAwOyB9DQogIC5mb3JtLWNsb3NlOmhvdmVyIHsNCiAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQogIC5mb3JtLWNsb3NlOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQoNCjo6cGxhY2Vob2xkZXIgew0KICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQoNCi5oZWxwLWJsb2NrIHsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KLm1zb3Mtc2VsZWN0aW9uLWNvbnRhaW5lciwgLm1zb3MtY29udGFpbmVyLCAubXNvcy1jYXJldC1jb250YWluZXIsIC5tc29zLWFjdGlvbi1idXR0b25zOmhvdmVyIHsNCiAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCiAgYmFja2dyb3VuZDogI0ZGRkZGRiAhaW1wb3J0YW50OyB9DQoNCi5tc29zLW9wdGlvbi1zZWxlY3RlZCwgLm1zb3Mtc2VsZWN0ZWQtZGlzcGxheS1pdGVtLCAubXNvcy1xdWljay1kZWxldGUsIC5tc29zLXF1aWNrLWRlbGV0ZTpob3ZlciB7DQogIGJhY2tncm91bmQ6ICNmMmYyZjIgIWltcG9ydGFudDsgfQ0KDQoubXNvcy1sYWJlbCwgLm1zb3MtcXVpY2stZGVsZXRlLCAubXNvcy1xdWljay1kZWxldGU6aG92ZXIgew0KICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQoNCi5tc29zLW9wdGlvbi1mb2N1c2VkOmFmdGVyLCAubXNvcy1zZWxlY3RlZGl0ZW1zOmZvY3VzIC5tc29zLXNlbGVjdGVkLWRpc3BsYXktaXRlbS5tc29zLXNlbGVjdGVkaXRlbS1hY3RpdmU6YWZ0ZXIsIC5tc29zLXNlbGVjdGVkaXRlbXMtdG9nZ2xlOmZvY3VzIHsNCiAgYm9yZGVyLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7IH0NCg0KLm1zb3Mtb3B0aW9uOmhvdmVyLCAubXNvcy1vcHRpb24tc2VsZWN0ZWQ6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiAjZjlmOWY5ICFpbXBvcnRhbnQ7IH0NCg0KLm1zb3Mtc2VsZWN0ZWRpdGVtcy10b2dnbGUgew0KICBjb2xvcjogI0ZGQ0E0QiAhaW1wb3J0YW50OyB9DQoNCmgxLA0KLmgxLA0KLnNlY3Rpb24tbGFuZGluZy1oZWFkaW5nLA0KLnNlY3Rpb24tbGFuZGluZyAucm93ID4gZGl2IC5zZWN0aW9uLWxhbmRpbmctaGVhZGluZywNCi5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiBoMSwNCi5zZWN0aW9uLWxhbmRpbmcgaDEsDQouc2VjdGlvbi1zZWFyY2ggLmhlYWRlci1zZWFyY2ggaDEsDQoucGFnZV9zZWN0aW9uIGgxLA0KLmNvbG9yLWludmVyc2UgaDEsDQpoMSBwIHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDQwcHg7DQogIGNvbG9yOiAjMkEyQzJFOw0KICBtYXJnaW4tbGVmdDogMHB4Ow0KICBtYXJnaW4tcmlnaHQ6IDBweDsgfQ0KDQpoMiwNCi5oMiwNCi5zZWN0aW9uLWxhbmRpbmcgLnJvdyA+IGRpdiAuc2VjdGlvbi1sYW5kaW5nLXN1Yi1oZWFkaW5nLA0KLnBhZ2Vfc2VjdGlvbiBoMiwNCi5jb2xvci1pbnZlcnNlIGgyLA0KaDIgcCB7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAzNnB4Ow0KICBjb2xvcjogIzJBMkMyRTsgfQ0KDQpoMywNCi5oMywNCi5wYWdlX3NlY3Rpb24gaDMsDQouY29sb3ItaW52ZXJzZSBoMywNCi5zaWRlYmFyLWhvbWUgaDMgew0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA0MDA7DQogIGZvbnQtc2l6ZTogMjRweDsNCiAgY29sb3I6ICMyQTJDMkU7IH0NCg0KaDQsDQouaDQsDQoucG9sbCAucG9sbC1oZWFkZXIgaDQsDQoucG9sbCAucG9sbC10YWdzIGg0IHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNzAwOw0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCmg1LA0KLmg1IHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNzAwOw0KICBmb250LXNpemU6IDE0cHg7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCnAsDQoucCwNCi5wYWdlX3NlY3Rpb24gcCwNCi5zZWN0aW9uLWRpYWdvbmFsLWxlZnQgcCwNCi5zZWN0aW9uLWRpYWdvbmFsLXJpZ2h0IHAgew0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA0MDA7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgY29sb3I6ICMyQTJDMkU7IH0NCg0KLnAyIHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDE2cHg7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCi5idXR0b24xIHsNCiAgY29sb3I6ICMyQTJDMkU7DQogIGJvcmRlci1yYWRpdXM6IDJweDsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNjAwOw0KICBmb250LXNpemU6IDE0cHg7DQogIGJvcmRlci1jb2xvcjogI0ZFQTAwMjsNCiAgcGFkZGluZzogNnB4IDIwcHg7DQogIHdpZHRoOiBmaXQtY29udGVudDsNCiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsgfQ0KICAuYnV0dG9uMTpub3QoLmdqcy1zZWxlY3RlZCk6aG92ZXIgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFNTg3MDA7DQogICAgYm9yZGVyLWNvbG9yOiAjRTU4NzAwOyB9DQogIC5idXR0b24xOm5vdCguZ2pzLXNlbGVjdGVkKTphY3RpdmUsIC5idXR0b24xLmFjdGl2ZTpub3QoLmdqcy1zZWxlY3RlZCkgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFNTg3MDA7IH0NCiAgLmJ1dHRvbjE6Zm9jdXMsIC5idXR0b24xLmZvY3VzIHsNCiAgICBjb2xvcjogIzJBMkMyRTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTU4NzAwOyB9DQoNCi5idXR0b24yLCAuYnRuLWRlZmF1bHQgew0KICBjb2xvcjogI0ZFQTAwMjsNCiAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQogIGZvbnQtc2l6ZTogMTRweDsNCiAgYm9yZGVyLWNvbG9yOiAjRkVBMDAyOw0KICBwYWRkaW5nOiA2cHggMjBweDsNCiAgd2lkdGg6IGZpdC1jb250ZW50Ow0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQ0KICAuYnV0dG9uMjpub3QoLmdqcy1zZWxlY3RlZCk6aG92ZXIsIC5idG4tZGVmYXVsdDpub3QoLmdqcy1zZWxlY3RlZCk6aG92ZXIgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNGRUEwMDI7DQogICAgYm9yZGVyLWNvbG9yOiAjRkVBMDAyOyB9DQogIC5idXR0b24yOm5vdCguZ2pzLXNlbGVjdGVkKTphY3RpdmUsIC5idXR0b24yLmFjdGl2ZTpub3QoLmdqcy1zZWxlY3RlZCksIC5idG4tZGVmYXVsdDpub3QoLmdqcy1zZWxlY3RlZCk6YWN0aXZlLCAuYnRuLWRlZmF1bHQuYWN0aXZlOm5vdCguZ2pzLXNlbGVjdGVkKSB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsgfQ0KICAuYnV0dG9uMjpmb2N1cywgLmJ1dHRvbjIuZm9jdXMsIC5idG4tZGVmYXVsdDpmb2N1cywgLmJ0bi1kZWZhdWx0LmZvY3VzIHsNCiAgICBjb2xvcjogIzJBMkMyRTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOyB9DQoNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIGEgcCwNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIGEgaDEsDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIGgyLA0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgYSBoMywNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIGEgaDQsDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIGg1LA0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgYSBzcGFuIHsNCiAgZGlzcGxheTogaW5saW5lOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICBjb2xvcjogI0ZGRkZGRjsgfQ0KDQpoMS5zaXRlVGl0bGUsDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIGgxLnNpdGVUaXRsZSB7DQogIGRpc3BsYXk6IGlubGluZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCiAgY29sb3I6ICNGRkZGRkY7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAzMHB4OyB9DQoNCnAuc21hbGxUZXh0IHsNCiAgZGlzcGxheTogaW5saW5lOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICBjb2xvcjogIzJBMkMyRTsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDE2cHg7IH0NCg0KYS5hbmNob3ItaW5oZXJpdC1zdHlsZXMgew0KICBmb250LXNpemU6IGluaGVyaXQ7DQogIGZvbnQtZmFtaWx5OiBpbmhlcml0Ow0KICBjb2xvcjogaW5oZXJpdDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjEpICFpbXBvcnRhbnQ7IH0NCg0KYS5hbmNob3ItaG92ZXItY29sb3ItY29sb3IyOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IyKSAhaW1wb3J0YW50OyB9DQoNCmEuYW5jaG9yLWhvdmVyLWNvbG9yLWNvbG9yMzpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yMykgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjQ6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjQpICFpbXBvcnRhbnQ7IH0NCg0KYS5hbmNob3ItaG92ZXItY29sb3ItY29sb3I1OmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I1KSAhaW1wb3J0YW50OyB9DQoNCmEuYW5jaG9yLWhvdmVyLWNvbG9yLWNvbG9yNjpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yNikgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjc6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjcpICFpbXBvcnRhbnQ7IH0NCg0KYS5hbmNob3ItaG92ZXItY29sb3ItY29sb3I4OmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I4KSAhaW1wb3J0YW50OyB9DQoNCmEuYW5jaG9yLWhvdmVyLWNvbG9yLWNvbG9yOTpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yOSkgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjEwOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMCkgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjExOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMSkgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjEyOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMikgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci10ZXh0LWRlY29yYXRpb24tbm9uZSB7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KDQphLmFuY2hvci10ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIHsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0NCg0KYS5hbmNob3ItaG92ZXItdGV4dC1kZWNvcmF0aW9uLW5vbmU6aG92ZXIgew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCg0KYS5hbmNob3ItaG92ZXItdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZTpob3ZlciB7DQogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9", + "name": "portalbasictheme.css", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "ad212595-91f1-4e7c-9d99-b0925011cfd9", + "content": "{\"source\":\"\\r\\n
\\r\\n {% include 'Page Copy' %}\\r\\n
\\r\\n\"}", + "name": "Default studio template", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "b3cd3b0a-b4aa-4c74-8ffc-23a53d5fcda8", + "content": "{\"entityname\":\"adx_webpage\",\"isdefault\":false,\"rewriteurl\":\"~/Pages/AccessDenied.aspx\",\"usewebsiteheaderandfooter\":true}", + "name": "Access Denied", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "b471b904-b627-4f6a-8e57-866b7d534eac", + "content": "{\"source\":\"\\r\\n\"}", + "name": "Languages Dropdown", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "b579f68c-5c66-4fb5-b760-57323fac52d5", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"ccb8f726-36d1-40cd-8c27-172ae2604322\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"search\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false}", + "name": "Search", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "bac936b5-a02c-46b3-981d-b4e8a581e263", + "content": "{\"pageid\":\"d44239b8-d25b-4270-8e48-3e9851a3d4c7\"}", + "name": "Page Not Found", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "bcaddf61-3aba-4f7f-ab3d-8c252763cff2", + "content": "{\"display_name\":\"Search/Title\",\"value\":\"Search\\r\\n\"}", + "name": "Search/Title", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "c04c7a09-83f3-4258-bd37-c9b164587996", + "content": "{\"display_name\":\"Profile Navigation\"}", + "name": "Profile Navigation", + "powerpagecomponenttype": "4", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "c05d166f-f510-47b3-9842-8fece0cfd7d0", + "content": "{\"copy\":\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n

Page not found

\\r\\n

Check the link and try again

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\",\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"page-not-found\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"d44239b8-d25b-4270-8e48-3e9851a3d4c7\",\"sharedpageconfiguration\":false}", + "name": "Page Not Found", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "c8d6580d-d6e0-4cb1-9a3c-86eb4a1f4113", + "content": "{\"right\":1}", + "name": "Grant Change to Content", + "powerpagecomponenttype": "10", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "cafcc042-57ab-4099-8856-a68d32029e56", + "content": "{\"copy\":\"

Please provide some information about yourself.

\\r\\n\\r\\n

The First Name and Last Name you provide will be displayed alongside any comments, forum posts, or ideas you make on the site.

\\r\\n\\r\\n

The Email Address and Phone number will not be displayed on the site.

\\r\\n\\r\\n

Your Organization and Title are optional. They will be displayed with your comments and forum posts.

\\r\\n\",\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"230c16df-fb1b-4828-8be1-b0a87016a6a3\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"profile\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"6942c943-cc5d-44dc-883a-13ff114978e4\",\"sharedpageconfiguration\":false,\"title\":\"Profile\"}", + "name": "Profile", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "ccb8f726-36d1-40cd-8c27-172ae2604322", + "content": "{\"entityname\":\"adx_webpage\",\"isdefault\":false,\"rewriteurl\":\"~/Pages/Search.aspx\",\"usewebsiteheaderandfooter\":true,\"webtemplateid\":\"7683ceb1-f4cb-4eaa-b886-c61c493f0033\"}", + "name": "Search", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "cd3eb431-388c-4345-9fda-bee1f444e19b", + "content": "{\"source\":\"\\r\\n\"}", + "name": "Page Header", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d064b374-1c25-43d9-b249-c41428bf2b47", + "content": "{\"description\":\"Site setting that determines if the language code is included in the portal URL.\",\"value\":\"False\"}", + "name": "MultiLanguage/DisplayLanguageCodeInURL", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d44239b8-d25b-4270-8e48-3e9851a3d4c7", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"page-not-found\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false}", + "name": "Page Not Found", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d4fb9118-3ebe-457e-b5aa-5c47f311d750", + "content": "{\"description\":\"Set whether the footer web template is output cached.\",\"value\":\"True\"}", + "name": "Footer/OutputCache/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d58fe588-c250-477e-ab03-b210e66f8154", + "content": "{\"copy\":\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\",\"displayorder\":1,\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"feedbackpolicy\":756150005,\"hiddenfromsitemap\":false,\"isroot\":false,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"partialurl\":\"/\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"sharedpageconfiguration\":false,\"summary\":\"

This is a sample landing page for you to start creating your website.

\\r\\n\",\"title\":\"Home\"}", + "name": "Home", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "d5e1130d-d4bd-443f-882a-d6c3f1196ee0", + "content": "{\"value\":\"{\\\"status\\\":\\\"enable\\\",\\\"selectedThemeId\\\":\\\"329a43fa-5471-4678-8330-d3a0b404e9bb\\\",\\\"siteSettingId\\\":\\\"d5e1130d-d4bd-443f-882a-d6c3f1196ee0\\\",\\\"version\\\":\\\"V2\\\"}\"}", + "name": "ThemeFeature", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d60928a1-1c62-43d6-bde6-04402cc65de8", + "content": "{\"pageid\":\"6942c943-cc5d-44dc-883a-13ff114978e4\"}", + "name": "Profile", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d6402076-0ba3-ed11-83ff-00224828d88f", + "content": "{\"source\":\"\\r\\n{% assign botconsumer = entities.adx_botconsumer[bot_consumer_id] %}\\r\\n{% assign env = environment %}\\r\\n{% assign languageCode = website.selected_language.code %}\\r\\n{% assign botConfig = botconsumer.adx_configjson %}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\"}", + "name": "Power Virtual Agents", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "daa2c87c-6466-49f5-9974-1f41ae1cdda7", + "content": "{\"adx_webpageaccesscontrolrule_webrole\":[\"9caacc61-abcf-4fda-9351-35fe04baec24\"],\"right\":1,\"webpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\"}", + "name": "Grant Change to Administrators", + "powerpagecomponenttype": "10", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e1589418-0ddb-403a-ae65-9d097d47cd8b", + "content": "{\"display_name\":\"Footer\",\"type\":756150001,\"value\":\"

Copyright © {{ now | date: 'yyyy' }}. All rights reserved.

\\r\\n\"}", + "name": "Footer", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "e1ef4c66-4b3e-49b5-92c0-3b664cc1566e", + "content": "{\"displayorder\":2,\"isdefault\":true,\"isvisible\":true}", + "name": "Published", + "powerpagecomponenttype": "1", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e2546127-1bda-44b8-af9f-dd066835c218", + "content": "{\"pageid\":\"9df32875-e94f-40f9-ab11-4af812195522\"}", + "name": "Home", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e72df4aa-9667-49e9-a902-28219623c435", + "content": "{\"source\":\"{% assign defaultlang = settings['LanguageLocale/Code'] | default: 'en-us' %}\\r\\n{% assign homeurl = website.adx_partialurl %}\\r\\n\\r\\n{% substitution %}\\r\\n{% assign current_page = page.id %}\\r\\n{% assign sr_page = sitemarkers.Search.id %}\\r\\n{% assign forum_page = sitemarkers.Forums.id %}\\r\\n{% if current_page %}\\r\\n {% if current_page == sr_page or current_page == forum_page %}\\r\\n {% assign section_class = 'section-landing-search' %}\\r\\n {% if current_page == forum_page %}\\r\\n {% assign section_class = 'section-landing-forums' %}\\r\\n {% endif %}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {% if current_page == sr_page %}\\r\\n

{% editable snippets 'Search/Title' default: resx[\\\"Discover_Contoso\\\"] %}

\\r\\n {% include 'Search', search_id: 'search_control' %}\\r\\n {% endif %}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {% endif %}\\r\\n{% endif %}\\r\\n{% endsubstitution %}\\r\\n\\r\\n\"}", + "name": "Header", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e92e06ca-5847-4838-a5e2-8e55b9e58f78", + "content": "{\"adx_websiteaccess_webrole\":[\"9caacc61-abcf-4fda-9351-35fe04baec24\"],\"managecontentsnippets\":true,\"managesitemarkers\":true,\"manageweblinksets\":true,\"previewunpublishedentities\":true}", + "name": "Administrative permissions for Blank Template", + "powerpagecomponenttype": "12", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "eb25aea4-5e1f-458a-8a62-2dfc1e075f99", + "content": "{\"display_name\":\"Search/No Results\",\"value\":\"No results found.\\r\\n\"}", + "name": "Search/NoResults", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "f364b4da-ad4a-4cc2-bc56-7496a211dc02", + "content": "{\"description\":\"Site setting that controls the depth of the webpage hierarchy that’s cloned in a newly-added supported language. Web link sets and content snippets are cloned in the newly-added language when webpages are cloned.\",\"value\":\"3\"}", + "name": "MultiLanguage/MaximumDepthToClone", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "f717a74d-3f47-4340-b0b3-e44cfda956b8", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"ccb8f726-36d1-40cd-8c27-172ae2604322\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"search\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"b579f68c-5c66-4fb5-b760-57323fac52d5\",\"sharedpageconfiguration\":false}", + "name": "Search", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + } + ], + "powerpagesite": [ + { + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "content": "{\"defaultlanguage\":\"1148b4f4-118e-446a-9521-fdba58915b4b\",\"footerwebtemplateid\":\"7a31e640-5401-43c9-a5c1-ab3158ed81f2\",\"headerwebtemplateid\":\"e72df4aa-9667-49e9-a902-28219623c435\",\"website_language\":1033}", + "datamodelversion": "2.0", + "name": "Blank Page" + } + ], + "powerpagesitelanguage": [ + { + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b", + "content": "{\"publishingstate\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"systemlanguage\":1033}", + "displayname": "English", + "languagecode": "en-US", + "lcid": "1033", + "name": "English", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + } + ] +} From b5eff917b51fb30d97d965cee604dc34f9516141 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Wed, 20 Nov 2024 12:13:06 +0530 Subject: [PATCH 03/28] Enhance CreateSiteCommand to include extension context and add ReadonlyFileSystemProvider for site page previews --- .../commands/create-site/CreateSiteCommand.ts | 5 ++- .../commands/create-site/CreateSiteHelper.ts | 45 ++++++++++++++++++- .../utilities/ReadonlyFileSystemProvider.ts | 27 +++++++++++ 3 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 src/common/utilities/ReadonlyFileSystemProvider.ts diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts index b2db45a2..5d3f5de6 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts @@ -13,7 +13,7 @@ import { VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED} from "../../PowerPagesChat export class CreateSiteCommand implements Command { // eslint-disable-next-line @typescript-eslint/no-explicit-any async execute(request: any, stream: vscode.ChatResponseStream): Promise { - const { prompt, intelligenceAPIEndpointInfo, intelligenceApiToken, powerPagesAgentSessionId, telemetry, orgId, envId, userId } = request; + const { prompt, intelligenceAPIEndpointInfo, intelligenceApiToken, powerPagesAgentSessionId, telemetry, orgId, envId, userId, extensionContext } = request; stream.progress(NL2SITE_GENERATING_SITE); try { @@ -27,7 +27,8 @@ export class CreateSiteCommand implements Command { telemetry, orgId, envId, - userId + userId, + extensionContext ); // Process the result diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index ddf2092a..0ff083c1 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -10,9 +10,17 @@ import { getNL2SiteData } from './Nl2SiteService'; import { NL2SITE_REQUEST_FAILED, NL2PAGE_GENERATING_WEBPAGES, NL2PAGE_RESPONSE_FAILED } from '../../PowerPagesChatParticipantConstants'; import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST } from '../../PowerPagesChatParticipantTelemetryConstants'; +import { ReadonlyFileSystemProvider } from '../../../../utilities/ReadonlyFileSystemProvider'; -export const createSite = async (intelligenceEndpoint: string, intelligenceApiToken: string, userPrompt: string, sessionId: string, stream: vscode.ChatResponseStream, telemetry: ITelemetry, orgId: string, envID: string, userId: string) => { - const { siteName, siteDescription } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); +export const createSite = async (intelligenceEndpoint: string, intelligenceApiToken: string, userPrompt: string, sessionId: string, stream: vscode.ChatResponseStream, telemetry: ITelemetry, orgId: string, envID: string, userId: string, extensionContext: vscode.ExtensionContext) => { + const { siteName, siteDescription, sitePages} = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); + + previewSitePagesContent(siteName, sitePages, stream, extensionContext); + + stream.button({ + title: 'Create Site', + command: 'open-site', + }); return { siteName, @@ -46,3 +54,36 @@ async function fetchSiteAndPageData(intelligenceEndpoint: string, intelligenceAp return { siteName, sitePagesList, sitePages, siteDescription }; } + +function previewSitePagesContent( + siteName: string, + sitePages: any[], + stream: vscode.ChatResponseStream, + extensionContext: vscode.ExtensionContext +) { + const sitePagesContent: { name: string; content: string }[] = []; + sitePages.forEach((page: any) => { + sitePagesContent.push({ name: page.metadata.pageTitle, content: page.code }); + }); + + stream.markdown('\nHere is the name of the site: ' + siteName); + + const sitePagesFolder: vscode.ChatResponseFileTree[] = []; + const contentProvider = new ReadonlyFileSystemProvider(); + const scheme = 'readonly'; + // Register the content provider + extensionContext.subscriptions.push( + vscode.workspace.registerTextDocumentContentProvider(scheme, contentProvider) + ); + + const baseUri = vscode.Uri.parse('readonly:/'); + + sitePagesContent.forEach((page: { name: string; content: string; }) => { + sitePagesFolder.push({ name: page.name + '.html' }); + const pageUri = vscode.Uri.joinPath(baseUri, page.name + '.html'); + contentProvider.updateFileContent(pageUri.path, page.content); + }); + + // TODO: pass uri of current workspace as second parameter + stream.filetree(sitePagesFolder, baseUri); +} diff --git a/src/common/utilities/ReadonlyFileSystemProvider.ts b/src/common/utilities/ReadonlyFileSystemProvider.ts new file mode 100644 index 00000000..2da1d7a4 --- /dev/null +++ b/src/common/utilities/ReadonlyFileSystemProvider.ts @@ -0,0 +1,27 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import * as vscode from 'vscode'; + +export class ReadonlyFileSystemProvider implements vscode.TextDocumentContentProvider { + // File content mapping + private fileContentMap: { [key: string]: string } = {}; + + // Provide content for a given URI + provideTextDocumentContent(uri: vscode.Uri): string { + const filePath = uri.path; + return this.fileContentMap[filePath] || 'File not found'; + } + + // Update content for a given file + updateFileContent(filePath: string, content: string) { + this.fileContentMap[filePath] = content; + const uri = vscode.Uri.parse(`readonly:${filePath}`); + this._onDidChangeEmitter.fire(uri); + } + + private _onDidChangeEmitter = new vscode.EventEmitter(); + readonly onDidChange = this._onDidChangeEmitter.event; +} From 17aaad6cfa5eda1120b0244cbe0dec909027bf1c Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 15:32:47 +0530 Subject: [PATCH 04/28] Implement EditableFileSystemProvider for site page editing and update CreateSiteHelper to utilize it --- .../commands/create-site/CreateSiteHelper.ts | 44 +++++++++--- .../utilities/EditableFileSystemProvider.ts | 69 +++++++++++++++++++ 2 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 src/common/utilities/EditableFileSystemProvider.ts diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index 0ff083c1..b96676aa 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -10,18 +10,34 @@ import { getNL2SiteData } from './Nl2SiteService'; import { NL2SITE_REQUEST_FAILED, NL2PAGE_GENERATING_WEBPAGES, NL2PAGE_RESPONSE_FAILED } from '../../PowerPagesChatParticipantConstants'; import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST } from '../../PowerPagesChatParticipantTelemetryConstants'; -import { ReadonlyFileSystemProvider } from '../../../../utilities/ReadonlyFileSystemProvider'; +//import { ReadonlyFileSystemProvider } from '../../../../utilities/ReadonlyFileSystemProvider'; +import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSystemProvider'; export const createSite = async (intelligenceEndpoint: string, intelligenceApiToken: string, userPrompt: string, sessionId: string, stream: vscode.ChatResponseStream, telemetry: ITelemetry, orgId: string, envID: string, userId: string, extensionContext: vscode.ExtensionContext) => { const { siteName, siteDescription, sitePages} = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); - previewSitePagesContent(siteName, sitePages, stream, extensionContext); + const contentProvider = previewSitePagesContent(siteName, sitePages, stream, extensionContext); stream.button({ title: 'Create Site', - command: 'open-site', + command: 'create-site-command', + arguments: [contentProvider, sitePages.map(page => ({ name: page.metadata.pageTitle, content: page.code }))] }); + extensionContext.subscriptions.push( + vscode.commands.registerCommand('create-site-command', async (contentProvider: EditableFileSystemProvider, sitePagesContent: { name: string; content: string }[]) => { + const updatedPages = sitePagesContent.map(page => ({ + name: page.name, + content: getUpdatedPageContent(contentProvider, page.name) + })); + + // Process the updated pages as needed + console.log('Updated Pages:', updatedPages); + + // You can add further logic here to handle the updated pages, such as sending them to a server or saving them. + }) + ); + return { siteName, //websiteId, @@ -55,12 +71,13 @@ async function fetchSiteAndPageData(intelligenceEndpoint: string, intelligenceAp return { siteName, sitePagesList, sitePages, siteDescription }; } + function previewSitePagesContent( siteName: string, sitePages: any[], stream: vscode.ChatResponseStream, extensionContext: vscode.ExtensionContext -) { +): EditableFileSystemProvider { const sitePagesContent: { name: string; content: string }[] = []; sitePages.forEach((page: any) => { sitePagesContent.push({ name: page.metadata.pageTitle, content: page.code }); @@ -69,21 +86,30 @@ function previewSitePagesContent( stream.markdown('\nHere is the name of the site: ' + siteName); const sitePagesFolder: vscode.ChatResponseFileTree[] = []; - const contentProvider = new ReadonlyFileSystemProvider(); - const scheme = 'readonly'; + const contentProvider = new EditableFileSystemProvider(); + const scheme = 'editable'; // Register the content provider extensionContext.subscriptions.push( - vscode.workspace.registerTextDocumentContentProvider(scheme, contentProvider) + vscode.workspace.registerFileSystemProvider(scheme, contentProvider, { isCaseSensitive: true }) ); - const baseUri = vscode.Uri.parse('readonly:/'); + const baseUri = vscode.Uri.parse('editable:/'); sitePagesContent.forEach((page: { name: string; content: string; }) => { sitePagesFolder.push({ name: page.name + '.html' }); const pageUri = vscode.Uri.joinPath(baseUri, page.name + '.html'); - contentProvider.updateFileContent(pageUri.path, page.content); + contentProvider.writeFile(pageUri, Buffer.from(page.content, 'utf8')); }); // TODO: pass uri of current workspace as second parameter stream.filetree(sitePagesFolder, baseUri); + + return contentProvider; } + +// Function to get updated content +export function getUpdatedPageContent(contentProvider: EditableFileSystemProvider, pageName: string): string { + const pageUri = vscode.Uri.parse(`editable:/${pageName}.html`); + return contentProvider.getFileContent(pageUri); +} + diff --git a/src/common/utilities/EditableFileSystemProvider.ts b/src/common/utilities/EditableFileSystemProvider.ts new file mode 100644 index 00000000..9320a990 --- /dev/null +++ b/src/common/utilities/EditableFileSystemProvider.ts @@ -0,0 +1,69 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +/* eslint-disable @typescript-eslint/no-unused-vars */ + +import * as vscode from 'vscode'; + + +export class EditableFileSystemProvider implements vscode.FileSystemProvider { + private fileContentMap: { [key: string]: Uint8Array } = {}; + private _onDidChangeEmitter = new vscode.EventEmitter(); + readonly onDidChangeFile = this._onDidChangeEmitter.event; + + watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[]; }): vscode.Disposable { + // For simplicity, this implementation does not support file watching. + // eslint-disable-next-line @typescript-eslint/no-empty-function + return new vscode.Disposable(() => {}); + } + + copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { + if (!options.overwrite && this.fileContentMap[destination.path]) { + throw vscode.FileSystemError.FileExists(destination); + } + this.fileContentMap[destination.path] = this.fileContentMap[source.path]; + this._onDidChangeEmitter.fire([{ type: vscode.FileChangeType.Created, uri: destination }]); + } + + // Read file content + readFile(uri: vscode.Uri): Uint8Array { + const filePath = uri.path; + return this.fileContentMap[filePath] || new Uint8Array(); + } + + // Write file content + writeFile(uri: vscode.Uri, content: Uint8Array): void { + const filePath = uri.path; + this.fileContentMap[filePath] = content; + this._onDidChangeEmitter.fire([{ type: vscode.FileChangeType.Changed, uri }]); + } + + // Other required methods for FileSystemProvider + stat(uri: vscode.Uri): vscode.FileStat { + return { type: vscode.FileType.File, ctime: Date.now(), mtime: Date.now(), size: this.fileContentMap[uri.path]?.length || 0 }; + } + + readDirectory(uri: vscode.Uri): [string, vscode.FileType][] { + return []; + } + + // eslint-disable-next-line @typescript-eslint/no-empty-function + createDirectory(uri: vscode.Uri): void {} + + delete(uri: vscode.Uri): void { + // Delete is not supported in this implementation + } + + rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean; }): void { + // Rename is not supported in this implementation + } + + // Method to get file content as string + getFileContent(uri: vscode.Uri): string { + const filePath = uri.path; + const content = this.fileContentMap[filePath]; + return content ? Buffer.from(content).toString('utf8') : ''; + } +} From b9d73010019f489a48ff8a36bbbc875c40c491ff Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 15:55:20 +0530 Subject: [PATCH 05/28] Integrate CreateSiteCommand into CommandRegistry and update related components for site creation functionality --- src/common/chat-participants/CommandRegistry.ts | 3 ++- .../powerpages/PowerPagesChatParticipant.ts | 7 +++++-- .../commands/create-site/CreateSiteCommand.ts | 14 +++++++------- .../commands/create-site/CreateSiteHelper.ts | 3 ++- .../commands/create-site/Nl2SiteService.ts | 4 +++- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/common/chat-participants/CommandRegistry.ts b/src/common/chat-participants/CommandRegistry.ts index ac1281fa..510b4e03 100644 --- a/src/common/chat-participants/CommandRegistry.ts +++ b/src/common/chat-participants/CommandRegistry.ts @@ -4,6 +4,7 @@ */ import * as vscode from "vscode"; +import { CreateSiteCommand } from "./powerpages/commands/create-site/CreateSiteCommand"; export interface Command { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -11,7 +12,7 @@ export interface Command { } export class CommandRegistry { - private commands: { [key: string]: Command } = {}; + private commands: { [key: string]: Command } = {'create-site': new CreateSiteCommand()}; register(commandName: string, command: Command) { this.commands[commandName] = command; diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts index e1586846..9fba1fac 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts @@ -26,7 +26,7 @@ import { CommandRegistry } from '../CommandRegistry'; import { VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_INVOKED, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ORG_DETAILS_NOT_FOUND, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ORG_DETAILS, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_NOT_AVAILABLE_ECS, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SUCCESSFUL_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_WELCOME_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_NO_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_LOCATION_REFERENCED, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_WEBPAGE_RELATED_FILES, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SCENARIO, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ERROR, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED } from './PowerPagesChatParticipantTelemetryConstants'; // Initialize Command Registry and Register Commands -const commandRegistry = new CommandRegistry(); + //Register Commands export class PowerPagesChatParticipant { @@ -98,6 +98,8 @@ export class PowerPagesChatParticipant { this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_INVOKED, { sessionId: this.powerPagesAgentSessionId }); oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_INVOKED, { sessionId: this.powerPagesAgentSessionId }); + const commandRegistry = new CommandRegistry(); + if (!this.isOrgDetailsInitialized) { stream.progress(PAC_AUTH_INPUT); await this.initializeOrgDetails(); @@ -174,7 +176,8 @@ export class PowerPagesChatParticipant { telemetry: this.telemetry, orgID: this.orgID, envID: this.environmentID, - userId: userId + userId: userId, + extensionContext: this.extensionContext }; return await command.execute(commandRequest, stream); diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts index 5d3f5de6..d49c6f34 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts @@ -12,8 +12,8 @@ import { VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED} from "../../PowerPagesChat export class CreateSiteCommand implements Command { // eslint-disable-next-line @typescript-eslint/no-explicit-any - async execute(request: any, stream: vscode.ChatResponseStream): Promise { - const { prompt, intelligenceAPIEndpointInfo, intelligenceApiToken, powerPagesAgentSessionId, telemetry, orgId, envId, userId, extensionContext } = request; + async execute(requestObject: any, stream: vscode.ChatResponseStream): Promise { + const { request, intelligenceAPIEndpointInfo, intelligenceApiToken, powerPagesAgentSessionId, telemetry, orgID, envID, userId, extensionContext } = requestObject; stream.progress(NL2SITE_GENERATING_SITE); try { @@ -21,12 +21,12 @@ export class CreateSiteCommand implements Command { const result = await createSite( intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, - prompt, + request.prompt, powerPagesAgentSessionId, stream, telemetry, - orgId, - envId, + orgID, + envID, userId, extensionContext ); @@ -39,8 +39,8 @@ export class CreateSiteCommand implements Command { }; } catch (error) { stream.markdown(FAILED_TO_CREATE_SITE); - telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED, { sessionId: powerPagesAgentSessionId, orgId:orgId, envId: envId, userId: userId, error: error as string }); - oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED, error as string, error as Error, { sessionId: powerPagesAgentSessionId, orgId:orgId, envId: envId, userId: userId}, {}); + telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED, { sessionId: powerPagesAgentSessionId, orgId:orgID, envId: envID, userId: userId, error: error as string }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED, error as string, error as Error, { sessionId: powerPagesAgentSessionId, orgId:orgID, envId: envID, userId: userId}, {}); return { metadata: { command: '' diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index b96676aa..e886fd5a 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -14,11 +14,12 @@ import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST } fr import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSystemProvider'; export const createSite = async (intelligenceEndpoint: string, intelligenceApiToken: string, userPrompt: string, sessionId: string, stream: vscode.ChatResponseStream, telemetry: ITelemetry, orgId: string, envID: string, userId: string, extensionContext: vscode.ExtensionContext) => { - const { siteName, siteDescription, sitePages} = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); + const { siteName, siteDescription, sitePages } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); const contentProvider = previewSitePagesContent(siteName, sitePages, stream, extensionContext); stream.button({ + //command: 'create-site-inputs', title: 'Create Site', command: 'create-site-command', arguments: [contentProvider, sitePages.map(page => ({ name: page.metadata.pageTitle, content: page.code }))] diff --git a/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts b/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts index d13716af..2bbf241a 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts @@ -23,7 +23,9 @@ export async function getNL2SiteData(aibEndpoint: string, aibToken: string, user "version": "V1", "information": { "minPages": 7, - "maxPages": 7 + "maxPages": 7, + "language": "English" + } } }; From 8b32d097f97f210f608367c21b5cc7c1cd7ab5bd Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 16:03:50 +0530 Subject: [PATCH 06/28] Disable copy functionality in EditableFileSystemProvider implementation --- src/common/utilities/EditableFileSystemProvider.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/common/utilities/EditableFileSystemProvider.ts b/src/common/utilities/EditableFileSystemProvider.ts index 9320a990..6f06851c 100644 --- a/src/common/utilities/EditableFileSystemProvider.ts +++ b/src/common/utilities/EditableFileSystemProvider.ts @@ -20,11 +20,7 @@ export class EditableFileSystemProvider implements vscode.FileSystemProvider { } copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean; }): void | Thenable { - if (!options.overwrite && this.fileContentMap[destination.path]) { - throw vscode.FileSystemError.FileExists(destination); - } - this.fileContentMap[destination.path] = this.fileContentMap[source.path]; - this._onDidChangeEmitter.fire([{ type: vscode.FileChangeType.Created, uri: destination }]); + // Copy is not supported in this implementation } // Read file content From 2636dcd836e4fbea8e70215bfa0b7577be021d9c Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 16:34:13 +0530 Subject: [PATCH 07/28] Remove ReadonlyFileSystemProvider implementation --- .../utilities/ReadonlyFileSystemProvider.ts | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/common/utilities/ReadonlyFileSystemProvider.ts diff --git a/src/common/utilities/ReadonlyFileSystemProvider.ts b/src/common/utilities/ReadonlyFileSystemProvider.ts deleted file mode 100644 index 2da1d7a4..00000000 --- a/src/common/utilities/ReadonlyFileSystemProvider.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - */ - -import * as vscode from 'vscode'; - -export class ReadonlyFileSystemProvider implements vscode.TextDocumentContentProvider { - // File content mapping - private fileContentMap: { [key: string]: string } = {}; - - // Provide content for a given URI - provideTextDocumentContent(uri: vscode.Uri): string { - const filePath = uri.path; - return this.fileContentMap[filePath] || 'File not found'; - } - - // Update content for a given file - updateFileContent(filePath: string, content: string) { - this.fileContentMap[filePath] = content; - const uri = vscode.Uri.parse(`readonly:${filePath}`); - this._onDidChangeEmitter.fire(uri); - } - - private _onDidChangeEmitter = new vscode.EventEmitter(); - readonly onDidChange = this._onDidChangeEmitter.event; -} From 7b26d081ec50beb4175e87ffa630fe1cd1ae446f Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 17:01:16 +0530 Subject: [PATCH 08/28] Add telemetry constant for previewing site pages and refactor related components --- ...rPagesChatParticipantTelemetryConstants.ts | 1 + .../create-site/CreateSiteConstants.ts | 6 +++ .../commands/create-site/CreateSiteHelper.ts | 54 +++++++------------ src/common/constants.ts | 2 + 4 files changed, 29 insertions(+), 34 deletions(-) create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts index 0f685709..45392515 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts @@ -25,3 +25,4 @@ export const VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED = 'VSCodeExtensionNL2Si export const VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED = 'VSCodeExtensionGitHubPowerPagesAgentCommandTriggered'; export const VSCODE_EXTENSION_NL2PAGE_REQUEST = 'VSCodeExtensionNL2PageRequest'; export const VSCODE_EXTENSION_NL2SITE_REQUEST = 'VSCodeExtensionNL2SiteRequest'; +export const VSCODE_EXTENSION_PREVIEW_SITE_PAGES = 'VSCodeExtensionPreviewSitePages'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts new file mode 100644 index 00000000..750afbd4 --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -0,0 +1,6 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export const EDITABLE_SCHEME = 'editable'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index e886fd5a..93f068d3 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -9,35 +9,18 @@ import { getNL2PageData } from './Nl2PageService'; import { getNL2SiteData } from './Nl2SiteService'; import { NL2SITE_REQUEST_FAILED, NL2PAGE_GENERATING_WEBPAGES, NL2PAGE_RESPONSE_FAILED } from '../../PowerPagesChatParticipantConstants'; import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; -import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST } from '../../PowerPagesChatParticipantTelemetryConstants'; -//import { ReadonlyFileSystemProvider } from '../../../../utilities/ReadonlyFileSystemProvider'; +import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST, VSCODE_EXTENSION_PREVIEW_SITE_PAGES } from '../../PowerPagesChatParticipantTelemetryConstants'; import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSystemProvider'; +import { HTML_FILE_EXTENSION, UTF8_ENCODING } from '../../../../constants'; +import { EDITABLE_SCHEME } from './CreateSiteConstants'; export const createSite = async (intelligenceEndpoint: string, intelligenceApiToken: string, userPrompt: string, sessionId: string, stream: vscode.ChatResponseStream, telemetry: ITelemetry, orgId: string, envID: string, userId: string, extensionContext: vscode.ExtensionContext) => { const { siteName, siteDescription, sitePages } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); - const contentProvider = previewSitePagesContent(siteName, sitePages, stream, extensionContext); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const contentProvider = previewSitePagesContent(siteName, sitePages, stream, extensionContext, telemetry, sessionId, orgId, envID, userId); - stream.button({ - //command: 'create-site-inputs', - title: 'Create Site', - command: 'create-site-command', - arguments: [contentProvider, sitePages.map(page => ({ name: page.metadata.pageTitle, content: page.code }))] - }); - - extensionContext.subscriptions.push( - vscode.commands.registerCommand('create-site-command', async (contentProvider: EditableFileSystemProvider, sitePagesContent: { name: string; content: string }[]) => { - const updatedPages = sitePagesContent.map(page => ({ - name: page.name, - content: getUpdatedPageContent(contentProvider, page.name) - })); - - // Process the updated pages as needed - console.log('Updated Pages:', updatedPages); - - // You can add further logic here to handle the updated pages, such as sending them to a server or saving them. - }) - ); + // TODO: Implement the create site button click handler return { siteName, @@ -77,32 +60,35 @@ function previewSitePagesContent( siteName: string, sitePages: any[], stream: vscode.ChatResponseStream, - extensionContext: vscode.ExtensionContext + extensionContext: vscode.ExtensionContext, + telemetry: ITelemetry, + sessionId: string, + orgId: string, + envId: string, + userId: string ): EditableFileSystemProvider { const sitePagesContent: { name: string; content: string }[] = []; sitePages.forEach((page: any) => { sitePagesContent.push({ name: page.metadata.pageTitle, content: page.code }); }); - stream.markdown('\nHere is the name of the site: ' + siteName); - const sitePagesFolder: vscode.ChatResponseFileTree[] = []; const contentProvider = new EditableFileSystemProvider(); - const scheme = 'editable'; // Register the content provider extensionContext.subscriptions.push( - vscode.workspace.registerFileSystemProvider(scheme, contentProvider, { isCaseSensitive: true }) + vscode.workspace.registerFileSystemProvider(EDITABLE_SCHEME, contentProvider, { isCaseSensitive: true }) ); - const baseUri = vscode.Uri.parse('editable:/'); + const baseUri = vscode.Uri.parse(`${EDITABLE_SCHEME}:/`); sitePagesContent.forEach((page: { name: string; content: string; }) => { - sitePagesFolder.push({ name: page.name + '.html' }); - const pageUri = vscode.Uri.joinPath(baseUri, page.name + '.html'); - contentProvider.writeFile(pageUri, Buffer.from(page.content, 'utf8')); + sitePagesFolder.push({ name: page.name + HTML_FILE_EXTENSION }); + const pageUri = vscode.Uri.joinPath(baseUri, page.name + HTML_FILE_EXTENSION); + contentProvider.writeFile(pageUri, Buffer.from(page.content, UTF8_ENCODING)); }); - // TODO: pass uri of current workspace as second parameter + telemetry.sendTelemetryEvent(VSCODE_EXTENSION_PREVIEW_SITE_PAGES, {sessionId: sessionId, orgId: orgId, environmentId: envId, userId: userId}); + stream.filetree(sitePagesFolder, baseUri); return contentProvider; @@ -110,7 +96,7 @@ function previewSitePagesContent( // Function to get updated content export function getUpdatedPageContent(contentProvider: EditableFileSystemProvider, pageName: string): string { - const pageUri = vscode.Uri.parse(`editable:/${pageName}.html`); + const pageUri = vscode.Uri.parse(`${EDITABLE_SCHEME}:/${pageName}${HTML_FILE_EXTENSION}`); return contentProvider.getFileContent(pageUri); } diff --git a/src/common/constants.ts b/src/common/constants.ts index e9984293..dfb5f8fb 100644 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -87,3 +87,5 @@ export interface IApiRequestParams { export const VSCODE_EXTENSION_COPILOT_CONTEXT_RELATED_FILES_FETCH_FAILED = "VSCodeExtensionCopilotContextRelatedFilesFetchFailed"; export const ADX_WEBPAGE = 'adx_webpage' +export const HTML_FILE_EXTENSION = '.html'; +export const UTF8_ENCODING = 'utf8'; From 66240c4e624fa5ece7858cb5f8191f7762fe6264 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 17:27:27 +0530 Subject: [PATCH 09/28] Refactor CommandRegistry and add command registration utility for chat participants --- src/common/chat-participants/ChatParticipantUtils.ts | 7 +++++++ src/common/chat-participants/CommandRegistry.ts | 3 +-- .../powerpages/PowerPagesChatParticipant.ts | 10 ++++------ .../powerpages/PowerPagesChatParticipantConstants.ts | 4 ++++ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/common/chat-participants/ChatParticipantUtils.ts b/src/common/chat-participants/ChatParticipantUtils.ts index 6b75cbcf..73221b3d 100644 --- a/src/common/chat-participants/ChatParticipantUtils.ts +++ b/src/common/chat-participants/ChatParticipantUtils.ts @@ -4,7 +4,14 @@ */ import * as vscode from 'vscode'; +import { Command, CommandRegistry } from './CommandRegistry'; export function createChatParticipant(participantId: string, handler: vscode.ChatRequestHandler): vscode.ChatParticipant { return vscode.chat.createChatParticipant(participantId, handler); } + +export function registerCommands(commandRegistry: CommandRegistry, commands: { [key: string]: Command }) { + for (const commandName in commands) { + commandRegistry.register(commandName, commands[commandName]); + } +} diff --git a/src/common/chat-participants/CommandRegistry.ts b/src/common/chat-participants/CommandRegistry.ts index 510b4e03..ac1281fa 100644 --- a/src/common/chat-participants/CommandRegistry.ts +++ b/src/common/chat-participants/CommandRegistry.ts @@ -4,7 +4,6 @@ */ import * as vscode from "vscode"; -import { CreateSiteCommand } from "./powerpages/commands/create-site/CreateSiteCommand"; export interface Command { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -12,7 +11,7 @@ export interface Command { } export class CommandRegistry { - private commands: { [key: string]: Command } = {'create-site': new CreateSiteCommand()}; + private commands: { [key: string]: Command } = {}; register(commandName: string, command: Command) { this.commands[commandName] = command; diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts index 9fba1fac..f7a15077 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode'; -import { createChatParticipant } from '../ChatParticipantUtils'; +import { createChatParticipant, registerCommands } from '../ChatParticipantUtils'; import { IComponentInfo, IPowerPagesChatResult } from './PowerPagesChatParticipantTypes'; import { ITelemetry } from "../../OneDSLoggerTelemetry/telemetry/ITelemetry"; import TelemetryReporter from '@vscode/extension-telemetry'; @@ -12,7 +12,7 @@ import { sendApiRequest } from '../../copilot/IntelligenceApiService'; import { PacWrapper } from '../../../client/pac/PacWrapper'; import { intelligenceAPIAuthentication } from '../../services/AuthenticationProvider'; import { ActiveOrgOutput } from '../../../client/pac/PacTypes'; -import { AUTHENTICATION_FAILED_MSG, COPILOT_NOT_AVAILABLE_MSG, COPILOT_NOT_RELEASED_MSG, DISCLAIMER_MESSAGE, INVALID_RESPONSE, NO_PROMPT_MESSAGE, PAC_AUTH_INPUT, PAC_AUTH_NOT_FOUND, POWERPAGES_CHAT_PARTICIPANT_ID, RESPONSE_AWAITED_MSG, RESPONSE_SCENARIOS, SKIP_CODES, STATER_PROMPTS, WELCOME_MESSAGE, WELCOME_PROMPT } from './PowerPagesChatParticipantConstants'; +import { AUTHENTICATION_FAILED_MSG, COPILOT_NOT_AVAILABLE_MSG, COPILOT_NOT_RELEASED_MSG, DISCLAIMER_MESSAGE, INVALID_RESPONSE, NO_PROMPT_MESSAGE, PAC_AUTH_INPUT, PAC_AUTH_NOT_FOUND, POWERPAGES_CHAT_PARTICIPANT_ID, POWERPAGES_COMMANDS, RESPONSE_AWAITED_MSG, RESPONSE_SCENARIOS, SKIP_CODES, STATER_PROMPTS, WELCOME_MESSAGE, WELCOME_PROMPT } from './PowerPagesChatParticipantConstants'; import { ORG_DETAILS_KEY, handleOrgChangeSuccess, initializeOrgDetails } from '../../utilities/OrgHandlerUtils'; import { createAndReferenceLocation, getComponentInfo, getEndpoint, provideChatParticipantFollowups, handleChatParticipantFeedback, createErrorResult, createSuccessResult, removeChatVariables } from './PowerPagesChatParticipantUtils'; import { checkCopilotAvailability, fetchRelatedFiles, getActiveEditorContent } from '../../utilities/Utils'; @@ -25,10 +25,6 @@ import { oneDSLoggerWrapper } from '../../OneDSLoggerTelemetry/oneDSLoggerWrappe import { CommandRegistry } from '../CommandRegistry'; import { VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_INVOKED, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ORG_DETAILS_NOT_FOUND, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ORG_DETAILS, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_NOT_AVAILABLE_ECS, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SUCCESSFUL_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_WELCOME_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_NO_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_LOCATION_REFERENCED, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_WEBPAGE_RELATED_FILES, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SCENARIO, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ERROR, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED } from './PowerPagesChatParticipantTelemetryConstants'; -// Initialize Command Registry and Register Commands - -//Register Commands - export class PowerPagesChatParticipant { private static instance: PowerPagesChatParticipant | null = null; private chatParticipant: vscode.ChatParticipant; @@ -100,6 +96,8 @@ export class PowerPagesChatParticipant { const commandRegistry = new CommandRegistry(); + registerCommands(commandRegistry, POWERPAGES_COMMANDS); + if (!this.isOrgDetailsInitialized) { stream.progress(PAC_AUTH_INPUT); await this.initializeOrgDetails(); diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantConstants.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantConstants.ts index 5acd6fb3..8b5d475c 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantConstants.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantConstants.ts @@ -5,6 +5,7 @@ import * as vscode from 'vscode'; import { ADX_ENTITYFORM, ADX_ENTITYLIST } from '../../copilot/constants'; +import { CreateSiteCommand } from './commands/create-site/CreateSiteCommand'; // Constants export const POWERPAGES_CHAT_PARTICIPANT_ID = 'powerpages'; @@ -58,3 +59,6 @@ export const NL2PAGE_GENERATING_WEBPAGES = vscode.l10n.t("Generating webpages... export const NL2PAGE_RESPONSE_FAILED = 'Failed to get page content from NL2Page service'; export const NL2SITE_GENERATING_SITE = vscode.l10n.t("Generating a new Power Pages site..."); export const FAILED_TO_CREATE_SITE = vscode.l10n.t('Failed to create a new Power Pages site. Please try again.'); +export const POWERPAGES_COMMANDS = { + 'create-site': new CreateSiteCommand() +} From 255c97e2bfa0f6dcf3dcd5b9fba6ce65507b9445 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 17:32:12 +0530 Subject: [PATCH 10/28] Add constants for site creation parameters and refactor NL2SiteService to use them --- .../powerpages/commands/create-site/CreateSiteConstants.ts | 3 +++ .../powerpages/commands/create-site/Nl2SiteService.ts | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts index 750afbd4..eac8c582 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -4,3 +4,6 @@ */ export const EDITABLE_SCHEME = 'editable'; +export const ENGLISH = "English"; +export const MIN_PAGES = 7; +export const MAX_PAGES = 7; diff --git a/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts b/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts index 2bbf241a..0c9af94d 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts @@ -8,6 +8,7 @@ import { NL2SITE_GENERATE_NEW_SITE, NL2SITE_INVALID_RESPONSE, NL2SITE_SCENARIO} import {VSCODE_EXTENSION_NL2SITE_REQUEST_FAILED, VSCODE_EXTENSION_NL2SITE_REQUEST_SUCCESS } from "../../PowerPagesChatParticipantTelemetryConstants"; import { getCommonHeaders } from "../../../../services/AuthenticationProvider"; import { oneDSLoggerWrapper } from "../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper"; +import { ENGLISH, MAX_PAGES, MIN_PAGES } from "./CreateSiteConstants"; export async function getNL2SiteData(aibEndpoint: string, aibToken: string, userPrompt: string, sessionId: string, telemetry: ITelemetry, orgId: string, envId: string, userId: string) { const requestBody = { @@ -22,9 +23,9 @@ export async function getNL2SiteData(aibEndpoint: string, aibToken: string, user // "shouldCheckBlockList": false, //TODO: Check if this is needed "version": "V1", "information": { - "minPages": 7, - "maxPages": 7, - "language": "English" + "minPages": MIN_PAGES, + "maxPages": MAX_PAGES, + "language": ENGLISH } } From 765362235e1764ab3033a993bd1f4633ddc7d4b0 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Mon, 25 Nov 2024 17:27:15 +0530 Subject: [PATCH 11/28] Refactor CreateSiteCommand and CreateSiteHelper to use structured options and improve readability; add CreateSiteTypes for better type management --- .../commands/create-site/CreateSiteCommand.ts | 14 +++---- .../commands/create-site/CreateSiteHelper.ts | 42 +++++++++++++------ .../commands/create-site/CreateSiteTypes.ts | 32 ++++++++++++++ 3 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts index d49c6f34..f6212e79 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts @@ -18,18 +18,18 @@ export class CreateSiteCommand implements Command { stream.progress(NL2SITE_GENERATING_SITE); try { // eslint-disable-next-line @typescript-eslint/no-unused-vars - const result = await createSite( - intelligenceAPIEndpointInfo.intelligenceEndpoint, + const result = await createSite({ + intelligenceEndpoint: intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, - request.prompt, - powerPagesAgentSessionId, + userPrompt: request.prompt, + sessionId: powerPagesAgentSessionId, stream, telemetry, - orgID, - envID, + orgId: orgID, + envId: envID, userId, extensionContext - ); + }); // Process the result return { diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index 93f068d3..cebd6150 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -13,12 +13,26 @@ import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST, VSC import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSystemProvider'; import { HTML_FILE_EXTENSION, UTF8_ENCODING } from '../../../../constants'; import { EDITABLE_SCHEME } from './CreateSiteConstants'; - -export const createSite = async (intelligenceEndpoint: string, intelligenceApiToken: string, userPrompt: string, sessionId: string, stream: vscode.ChatResponseStream, telemetry: ITelemetry, orgId: string, envID: string, userId: string, extensionContext: vscode.ExtensionContext) => { - const { siteName, siteDescription, sitePages } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envID, userId); +import { ICreateSiteOptions, IPreviewSitePagesContentOptions } from './CreateSiteTypes'; + +export const createSite = async (createSiteOptions: ICreateSiteOptions) => { + const { + intelligenceEndpoint, + intelligenceApiToken, + userPrompt, + sessionId, + stream, + telemetry, + orgId, + envId, + userId, + extensionContext + } = createSiteOptions; + + const { siteName, siteDescription, sitePages } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); // eslint-disable-next-line @typescript-eslint/no-unused-vars - const contentProvider = previewSitePagesContent(siteName, sitePages, stream, extensionContext, telemetry, sessionId, orgId, envID, userId); + const contentProvider = previewSitePagesContent({sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId}); // TODO: Implement the create site button click handler @@ -57,16 +71,18 @@ async function fetchSiteAndPageData(intelligenceEndpoint: string, intelligenceAp function previewSitePagesContent( - siteName: string, - sitePages: any[], - stream: vscode.ChatResponseStream, - extensionContext: vscode.ExtensionContext, - telemetry: ITelemetry, - sessionId: string, - orgId: string, - envId: string, - userId: string + options: IPreviewSitePagesContentOptions ): EditableFileSystemProvider { + const { + sitePages, + stream, + extensionContext, + telemetry, + sessionId, + orgId, + envId, + userId + } = options; const sitePagesContent: { name: string; content: string }[] = []; sitePages.forEach((page: any) => { sitePagesContent.push({ name: page.metadata.pageTitle, content: page.code }); diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts new file mode 100644 index 00000000..505e5c5f --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts @@ -0,0 +1,32 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import { ITelemetry } from "../../../../OneDSLoggerTelemetry/telemetry/ITelemetry"; +import * as vscode from 'vscode'; + +export interface ICreateSiteOptions { + intelligenceEndpoint: string; + intelligenceApiToken: string; + userPrompt: string; + sessionId: string; + stream: vscode.ChatResponseStream; + telemetry: ITelemetry; + orgId: string; + envId: string; + userId: string; + extensionContext: vscode.ExtensionContext; +} + +export interface IPreviewSitePagesContentOptions { + // siteName: string; + sitePages: any[]; + stream: vscode.ChatResponseStream; + extensionContext: vscode.ExtensionContext; + telemetry: ITelemetry; + sessionId: string; + orgId: string; + envId: string; + userId: string; +} From 537414c4e9599ec9c5022ee46d847519198e4c10 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Tue, 26 Nov 2024 15:25:24 +0530 Subject: [PATCH 12/28] Add error telemetry constant for previewing site pages and handle errors in previewSitePagesContent function --- ...rPagesChatParticipantTelemetryConstants.ts | 1 + .../commands/create-site/CreateSiteHelper.ts | 50 +++++++++++-------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts index 45392515..8138f979 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts @@ -26,3 +26,4 @@ export const VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED = 'VSCo export const VSCODE_EXTENSION_NL2PAGE_REQUEST = 'VSCodeExtensionNL2PageRequest'; export const VSCODE_EXTENSION_NL2SITE_REQUEST = 'VSCodeExtensionNL2SiteRequest'; export const VSCODE_EXTENSION_PREVIEW_SITE_PAGES = 'VSCodeExtensionPreviewSitePages'; +export const VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR = 'VSCodeExtensionPreviewSitePagesError'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index cebd6150..a9b63bad 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -9,7 +9,7 @@ import { getNL2PageData } from './Nl2PageService'; import { getNL2SiteData } from './Nl2SiteService'; import { NL2SITE_REQUEST_FAILED, NL2PAGE_GENERATING_WEBPAGES, NL2PAGE_RESPONSE_FAILED } from '../../PowerPagesChatParticipantConstants'; import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; -import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST, VSCODE_EXTENSION_PREVIEW_SITE_PAGES } from '../../PowerPagesChatParticipantTelemetryConstants'; +import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST, VSCODE_EXTENSION_PREVIEW_SITE_PAGES, VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR } from '../../PowerPagesChatParticipantTelemetryConstants'; import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSystemProvider'; import { HTML_FILE_EXTENSION, UTF8_ENCODING } from '../../../../constants'; import { EDITABLE_SCHEME } from './CreateSiteConstants'; @@ -71,7 +71,7 @@ async function fetchSiteAndPageData(intelligenceEndpoint: string, intelligenceAp function previewSitePagesContent( - options: IPreviewSitePagesContentOptions + options: IPreviewSitePagesContentOptions ): EditableFileSystemProvider { const { sitePages, @@ -83,33 +83,39 @@ function previewSitePagesContent( envId, userId } = options; - const sitePagesContent: { name: string; content: string }[] = []; - sitePages.forEach((page: any) => { - sitePagesContent.push({ name: page.metadata.pageTitle, content: page.code }); - }); - const sitePagesFolder: vscode.ChatResponseFileTree[] = []; - const contentProvider = new EditableFileSystemProvider(); - // Register the content provider - extensionContext.subscriptions.push( - vscode.workspace.registerFileSystemProvider(EDITABLE_SCHEME, contentProvider, { isCaseSensitive: true }) - ); + try { + const sitePagesContent: { name: string; content: string }[] = []; + sitePages.forEach((page: any) => { + sitePagesContent.push({ name: page.metadata.pageTitle, content: page.code }); + }); - const baseUri = vscode.Uri.parse(`${EDITABLE_SCHEME}:/`); + const sitePagesFolder: vscode.ChatResponseFileTree[] = []; + const contentProvider = new EditableFileSystemProvider(); + // Register the content provider + extensionContext.subscriptions.push( + vscode.workspace.registerFileSystemProvider(EDITABLE_SCHEME, contentProvider, { isCaseSensitive: true }) + ); - sitePagesContent.forEach((page: { name: string; content: string; }) => { - sitePagesFolder.push({ name: page.name + HTML_FILE_EXTENSION }); - const pageUri = vscode.Uri.joinPath(baseUri, page.name + HTML_FILE_EXTENSION); - contentProvider.writeFile(pageUri, Buffer.from(page.content, UTF8_ENCODING)); - }); + const baseUri = vscode.Uri.parse(`${EDITABLE_SCHEME}:/`); - telemetry.sendTelemetryEvent(VSCODE_EXTENSION_PREVIEW_SITE_PAGES, {sessionId: sessionId, orgId: orgId, environmentId: envId, userId: userId}); + sitePagesContent.forEach((page: { name: string; content: string; }) => { + sitePagesFolder.push({ name: page.name + HTML_FILE_EXTENSION }); + const pageUri = vscode.Uri.joinPath(baseUri, page.name + HTML_FILE_EXTENSION); + contentProvider.writeFile(pageUri, Buffer.from(page.content, UTF8_ENCODING)); + }); - stream.filetree(sitePagesFolder, baseUri); + telemetry.sendTelemetryEvent(VSCODE_EXTENSION_PREVIEW_SITE_PAGES, { sessionId, orgId, environmentId: envId, userId }); - return contentProvider; -} + stream.filetree(sitePagesFolder, baseUri); + return contentProvider; + } catch (error) { + telemetry.sendTelemetryEvent(VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR, { sessionId, orgId, environmentId: envId, userId, error: (error as Error).message }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR, (error as Error).message, error as Error, { sessionId, orgId, environmentId: envId, userId }, {}); + throw error; + } +} // Function to get updated content export function getUpdatedPageContent(contentProvider: EditableFileSystemProvider, pageName: string): string { const pageUri = vscode.Uri.parse(`${EDITABLE_SCHEME}:/${pageName}${HTML_FILE_EXTENSION}`); From 0f73785df20df6a332abf3bbadfb1ad165a09c4a Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Tue, 26 Nov 2024 15:47:18 +0530 Subject: [PATCH 13/28] Rename fileContentMap to _fileContentMap for consistency and clarity in EditableFileSystemProvider --- src/common/utilities/EditableFileSystemProvider.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/common/utilities/EditableFileSystemProvider.ts b/src/common/utilities/EditableFileSystemProvider.ts index 6f06851c..1d486527 100644 --- a/src/common/utilities/EditableFileSystemProvider.ts +++ b/src/common/utilities/EditableFileSystemProvider.ts @@ -9,7 +9,7 @@ import * as vscode from 'vscode'; export class EditableFileSystemProvider implements vscode.FileSystemProvider { - private fileContentMap: { [key: string]: Uint8Array } = {}; + private _fileContentMap: { [key: string]: Uint8Array } = {}; private _onDidChangeEmitter = new vscode.EventEmitter(); readonly onDidChangeFile = this._onDidChangeEmitter.event; @@ -26,19 +26,19 @@ export class EditableFileSystemProvider implements vscode.FileSystemProvider { // Read file content readFile(uri: vscode.Uri): Uint8Array { const filePath = uri.path; - return this.fileContentMap[filePath] || new Uint8Array(); + return this._fileContentMap[filePath] || new Uint8Array(); } // Write file content writeFile(uri: vscode.Uri, content: Uint8Array): void { const filePath = uri.path; - this.fileContentMap[filePath] = content; + this._fileContentMap[filePath] = content; this._onDidChangeEmitter.fire([{ type: vscode.FileChangeType.Changed, uri }]); } // Other required methods for FileSystemProvider stat(uri: vscode.Uri): vscode.FileStat { - return { type: vscode.FileType.File, ctime: Date.now(), mtime: Date.now(), size: this.fileContentMap[uri.path]?.length || 0 }; + return { type: vscode.FileType.File, ctime: Date.now(), mtime: Date.now(), size: this._fileContentMap[uri.path]?.length || 0 }; } readDirectory(uri: vscode.Uri): [string, vscode.FileType][] { @@ -59,7 +59,7 @@ export class EditableFileSystemProvider implements vscode.FileSystemProvider { // Method to get file content as string getFileContent(uri: vscode.Uri): string { const filePath = uri.path; - const content = this.fileContentMap[filePath]; + const content = this._fileContentMap[filePath]; return content ? Buffer.from(content).toString('utf8') : ''; } } From ba1dde6445206e090090d3f22c1f9a36d14e108e Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Wed, 27 Nov 2024 11:21:58 +0530 Subject: [PATCH 14/28] Implement multi-step input for site creation and register command for user inputs in CreateSiteHelper --- .../commands/create-site/CreateSiteHelper.ts | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index a9b63bad..05983651 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -14,6 +14,7 @@ import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSy import { HTML_FILE_EXTENSION, UTF8_ENCODING } from '../../../../constants'; import { EDITABLE_SCHEME } from './CreateSiteConstants'; import { ICreateSiteOptions, IPreviewSitePagesContentOptions } from './CreateSiteTypes'; +import { MultiStepInput } from '../../../../utilities/MultiStepInput'; export const createSite = async (createSiteOptions: ICreateSiteOptions) => { const { @@ -35,6 +36,21 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { const contentProvider = previewSitePagesContent({sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId}); // TODO: Implement the create site button click handler + stream.button({ + command: 'create-site-inputs', + title: 'Create Site', + tooltip: 'Create a new Power Pages site', + arguments: [siteName, false], + }) + + vscode.commands.registerCommand('create-site-inputs', async (siteName: string, isCreateSiteInputsReceived) => { + if (!isCreateSiteInputsReceived) { + const siteCreateInputs = await collectSiteCreationInputs(siteName); + if (siteCreateInputs) { + isCreateSiteInputsReceived = true; + } + } + }); return { siteName, @@ -122,3 +138,66 @@ export function getUpdatedPageContent(contentProvider: EditableFileSystemProvide return contentProvider.getFileContent(pageUri); } + + +async function collectSiteCreationInputs(siteName: string) { + const envNames: vscode.QuickPickItem[] = [ + { label: 'EnvONe' }, + { label: 'EnvTwo' }, + { label: 'EnvThree' } + ]; + + const title = vscode.l10n.t("New Power Pages Site"); + + interface ISiteInputState { + siteName: string; + envName: string; + domainName: string; + title: string; + step: number; + totalSteps: number; + } + + async function collectInputs() { + const state = {} as Partial; + await MultiStepInput.run((input) => selectEnvName(input, state)); + return state as ISiteInputState; + } + + async function selectEnvName( + input: MultiStepInput, + state: Partial + ) { + const pick = await input.showQuickPick({ + title, + step: 1, + totalSteps: 2, + placeholder: vscode.l10n.t("Choose Environment"), + items: envNames, + activeItem: + typeof state.envName !== "string" + ? state.envName + : undefined, + }); + state.envName = pick.label; + return (input: MultiStepInput) => inputSiteName(input, state); + } + + async function inputSiteName( + input: MultiStepInput, + state: Partial + ) { + state.siteName = await input.showInputBox({ + title, + step: 2, + totalSteps: 2, + value: state.siteName || siteName, + placeholder: vscode.l10n.t("Enter site name"), + validate: async (value) => (value ? undefined : vscode.l10n.t("Site Name is required")), + }); + } + + const siteInputState = await collectInputs(); + // Return the collected site creation inputs including site name, environment name, and domain name + return siteInputState; +} From f921e3bc26c907559b9988b6e8e9ab1d1d46f1c0 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Wed, 27 Nov 2024 12:19:12 +0530 Subject: [PATCH 15/28] Enhance copilot availability checks and update response structure in ArtemisService --- .../powerpages/PowerPagesChatParticipant.ts | 6 +++++- src/common/copilot/PowerPagesCopilot.ts | 4 ++++ src/common/services/ArtemisService.ts | 6 ++++-- src/common/services/Interfaces.ts | 8 ++------ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts index f7a15077..3a2dd2d9 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts @@ -131,9 +131,13 @@ export class PowerPagesChatParticipant { const userId = intelligenceApiAuthResponse.userId; const intelligenceAPIEndpointInfo = await getEndpoint(this.orgID, this.environmentID, this.telemetry, this.cachedEndpoint, this.powerPagesAgentSessionId); + if (!intelligenceAPIEndpointInfo.intelligenceEndpoint) { + return createErrorResult(COPILOT_NOT_AVAILABLE_MSG, RESPONSE_SCENARIOS.COPILOT_NOT_AVAILABLE, this.orgID); + } + const copilotAvailabilityStatus = checkCopilotAvailability(intelligenceAPIEndpointInfo.intelligenceEndpoint, this.orgID, this.telemetry, this.powerPagesAgentSessionId); - if (!copilotAvailabilityStatus || !intelligenceAPIEndpointInfo.intelligenceEndpoint) { + if (!copilotAvailabilityStatus) { return createErrorResult(COPILOT_NOT_AVAILABLE_MSG, RESPONSE_SCENARIOS.COPILOT_NOT_AVAILABLE, this.orgID); } diff --git a/src/common/copilot/PowerPagesCopilot.ts b/src/common/copilot/PowerPagesCopilot.ts index 4adfdeb3..9fd14b33 100644 --- a/src/common/copilot/PowerPagesCopilot.ts +++ b/src/common/copilot/PowerPagesCopilot.ts @@ -426,6 +426,10 @@ export class PowerPagesCopilot implements vscode.WebviewViewProvider { sendTelemetryEvent(this.telemetry, { eventName: CopilotOrgChangedEvent, copilotSessionId: sessionID, orgId: orgID }); const intelligenceAPIEndpointInfo = await ArtemisService.getIntelligenceEndpoint(orgID, this.telemetry, sessionID, environmentId); + if (!intelligenceAPIEndpointInfo.intelligenceEndpoint) { + this.sendMessageToWebview({ type: 'Unavailable' }); + return; + } this.aibEndpoint = intelligenceAPIEndpointInfo.intelligenceEndpoint; this.geoName = intelligenceAPIEndpointInfo.geoName; this.crossGeoDataMovementEnabledPPACFlag = intelligenceAPIEndpointInfo.crossGeoDataMovementEnabledPPACFlag; diff --git a/src/common/services/ArtemisService.ts b/src/common/services/ArtemisService.ts index 9410e853..10c623a1 100644 --- a/src/common/services/ArtemisService.ts +++ b/src/common/services/ArtemisService.ts @@ -21,7 +21,9 @@ export class ArtemisService { if (artemisResponse === null) { return { intelligenceEndpoint: null, geoName: null, crossGeoDataMovementEnabledPPACFlag: false }; } - const { geoName, environment, clusterNumber } = artemisResponse.response as unknown as IArtemisAPIOrgResponse; + + const endpointStamp = artemisResponse.stamp; + const { geoName, environment, clusterNumber } = artemisResponse.response as IArtemisAPIOrgResponse; sendTelemetryEvent(telemetry, { eventName: CopilotArtemisSuccessEvent, copilotSessionId: sessionID, geoName: String(geoName), orgId: orgId }); const crossGeoDataMovementEnabledPPACFlag = await BAPService.getCrossGeoCopilotDataMovementEnabledFlag(artemisResponse.stamp, telemetry, environmentId); @@ -38,7 +40,7 @@ export class ArtemisService { const intelligenceEndpoint = `https://aibuildertextapiservice.${geoName}-${'il' + clusterNumber}.gateway.${environment}.island.powerapps.com/v1.0/${orgId}/appintelligence/chat` - return { intelligenceEndpoint: intelligenceEndpoint, geoName: geoName, crossGeoDataMovementEnabledPPACFlag: crossGeoDataMovementEnabledPPACFlag }; + return { intelligenceEndpoint: intelligenceEndpoint, geoName: geoName, crossGeoDataMovementEnabledPPACFlag: crossGeoDataMovementEnabledPPACFlag, endpointStamp: endpointStamp }; } // Function to fetch Artemis response diff --git a/src/common/services/Interfaces.ts b/src/common/services/Interfaces.ts index e32457a3..49a7030a 100644 --- a/src/common/services/Interfaces.ts +++ b/src/common/services/Interfaces.ts @@ -25,15 +25,11 @@ export interface IArtemisAPIOrgResponse { clusterType: string, } -export interface IArtemisServiceResponse { - stamp: ServiceEndpointCategory; - response: IArtemisAPIOrgResponse; -} - export interface IIntelligenceAPIEndpointInformation { intelligenceEndpoint: string | null, geoName: string | null, - crossGeoDataMovementEnabledPPACFlag: boolean + crossGeoDataMovementEnabledPPACFlag: boolean, + endpointStamp?: ServiceEndpointCategory, } export interface IWebsiteDetails { From 22dc98f00e6060147e1c99a30982f321b8496e1d Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Wed, 27 Nov 2024 17:16:11 +0530 Subject: [PATCH 16/28] Add site creation inputs and environment info interfaces; refactor CreateSiteCommand --- .../powerpages/PowerPagesChatParticipant.ts | 4 +- .../PowerPagesChatParticipantUtils.ts | 21 ++++++ .../commands/create-site/CreateSiteCommand.ts | 2 +- .../create-site/CreateSiteConstants.ts | 7 ++ .../commands/create-site/CreateSiteHelper.ts | 69 ++++++++----------- .../commands/create-site/CreateSiteTypes.ts | 13 +++- src/common/constants.ts | 5 ++ src/common/utilities/Utils.ts | 11 +-- 8 files changed, 84 insertions(+), 48 deletions(-) diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts index 3a2dd2d9..eb0a9882 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts @@ -14,7 +14,7 @@ import { intelligenceAPIAuthentication } from '../../services/AuthenticationProv import { ActiveOrgOutput } from '../../../client/pac/PacTypes'; import { AUTHENTICATION_FAILED_MSG, COPILOT_NOT_AVAILABLE_MSG, COPILOT_NOT_RELEASED_MSG, DISCLAIMER_MESSAGE, INVALID_RESPONSE, NO_PROMPT_MESSAGE, PAC_AUTH_INPUT, PAC_AUTH_NOT_FOUND, POWERPAGES_CHAT_PARTICIPANT_ID, POWERPAGES_COMMANDS, RESPONSE_AWAITED_MSG, RESPONSE_SCENARIOS, SKIP_CODES, STATER_PROMPTS, WELCOME_MESSAGE, WELCOME_PROMPT } from './PowerPagesChatParticipantConstants'; import { ORG_DETAILS_KEY, handleOrgChangeSuccess, initializeOrgDetails } from '../../utilities/OrgHandlerUtils'; -import { createAndReferenceLocation, getComponentInfo, getEndpoint, provideChatParticipantFollowups, handleChatParticipantFeedback, createErrorResult, createSuccessResult, removeChatVariables } from './PowerPagesChatParticipantUtils'; +import { createAndReferenceLocation, getComponentInfo, getEndpoint, provideChatParticipantFollowups, handleChatParticipantFeedback, createErrorResult, createSuccessResult, removeChatVariables, registerButtonCommands } from './PowerPagesChatParticipantUtils'; import { checkCopilotAvailability, fetchRelatedFiles, getActiveEditorContent } from '../../utilities/Utils'; import { IIntelligenceAPIEndpointInformation } from '../../services/Interfaces'; import { v4 as uuidv4 } from 'uuid'; @@ -63,6 +63,8 @@ export class PowerPagesChatParticipant { this._pacWrapper = pacWrapper; + registerButtonCommands(); + this._disposables.push(orgChangeEvent(async (orgDetails: ActiveOrgOutput) => { await this.handleOrgChangeSuccess(orgDetails); })); diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts index 94749968..1219039f 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts @@ -11,6 +11,9 @@ import { ITelemetry } from "../../OneDSLoggerTelemetry/telemetry/ITelemetry"; import { ArtemisService } from "../../services/ArtemisService"; import { dataverseAuthentication } from "../../services/AuthenticationProvider"; import { IIntelligenceAPIEndpointInformation } from "../../services/Interfaces"; +import { EditableFileSystemProvider } from "../../utilities/EditableFileSystemProvider"; +import { CREATE_SITE_BTN_CMD } from "./commands/create-site/CreateSiteConstants"; +import { collectSiteCreationInputs, getUpdatedPageContent } from "./commands/create-site/CreateSiteHelper"; import { SUPPORTED_ENTITIES, EXPLAIN_CODE_PROMPT, FORM_PROMPT, LIST_PROMPT, STATER_PROMPTS, WEB_API_PROMPT } from "./PowerPagesChatParticipantConstants"; import { VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SCENARIO_FEEDBACK_THUMBSUP, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SCENARIO_FEEDBACK_THUMBSDOWN } from "./PowerPagesChatParticipantTelemetryConstants"; import { IComponentInfo, IPowerPagesChatResult } from "./PowerPagesChatParticipantTypes"; @@ -127,3 +130,21 @@ export function removeChatVariables(userPrompt: string): string { return userPrompt.replace(regex, '').trim(); } + +export function registerButtonCommands() { + vscode.commands.registerCommand(CREATE_SITE_BTN_CMD, async (siteName: string, sitePages, envList, contentProvider: EditableFileSystemProvider, isCreateSiteInputsReceived) => { + if (!isCreateSiteInputsReceived) { + //Update Page Content will be used for the site creation + sitePages.map((page: any) => { + return { + ...page, + code: getUpdatedPageContent(contentProvider, page.metadata.pageTitle) + } + }); + const siteCreateInputs = await collectSiteCreationInputs(siteName, envList); + if (siteCreateInputs) { + isCreateSiteInputsReceived = true; + } + } + }); +} diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts index f6212e79..61bd117b 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts @@ -19,7 +19,7 @@ export class CreateSiteCommand implements Command { try { // eslint-disable-next-line @typescript-eslint/no-unused-vars const result = await createSite({ - intelligenceEndpoint: intelligenceAPIEndpointInfo.intelligenceEndpoint, + intelligenceAPIEndpointInfo, intelligenceApiToken, userPrompt: request.prompt, sessionId: powerPagesAgentSessionId, diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts index eac8c582..3ebbfd0a 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -7,3 +7,10 @@ export const EDITABLE_SCHEME = 'editable'; export const ENGLISH = "English"; export const MIN_PAGES = 7; export const MAX_PAGES = 7; +export const SITE_CREATE_INPUTS = 'New Power Pages Site'; +export const ENVIRONMENT_FOR_SITE_CREATION = 'Select Environment for Site Creation'; +export const SITE_NAME = 'Enter Site Name'; +export const SITE_NAME_REQUIRED = 'Site Name is required'; +export const CREATE_SITE_BTN_CMD = 'create-site-inputs'; +export const CREATE_SITE_BTN_TITLE = 'Create Site'; +export const CREATE_SITE_BTN_TOOLTIP = 'Create a new Power Pages site'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index 05983651..d4a0c82e 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -11,14 +11,15 @@ import { NL2SITE_REQUEST_FAILED, NL2PAGE_GENERATING_WEBPAGES, NL2PAGE_RESPONSE_F import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST, VSCODE_EXTENSION_PREVIEW_SITE_PAGES, VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR } from '../../PowerPagesChatParticipantTelemetryConstants'; import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSystemProvider'; -import { HTML_FILE_EXTENSION, UTF8_ENCODING } from '../../../../constants'; -import { EDITABLE_SCHEME } from './CreateSiteConstants'; -import { ICreateSiteOptions, IPreviewSitePagesContentOptions } from './CreateSiteTypes'; +import { HTML_FILE_EXTENSION, IEnvInfo, UTF8_ENCODING } from '../../../../constants'; +import { CREATE_SITE_BTN_CMD, CREATE_SITE_BTN_TITLE, CREATE_SITE_BTN_TOOLTIP, EDITABLE_SCHEME, ENVIRONMENT_FOR_SITE_CREATION, SITE_CREATE_INPUTS, SITE_NAME, SITE_NAME_REQUIRED } from './CreateSiteConstants'; +import { ICreateSiteOptions, IPreviewSitePagesContentOptions, ISiteInputState } from './CreateSiteTypes'; import { MultiStepInput } from '../../../../utilities/MultiStepInput'; +import { getEnvList } from '../../../../utilities/Utils'; export const createSite = async (createSiteOptions: ICreateSiteOptions) => { const { - intelligenceEndpoint, + intelligenceAPIEndpointInfo, intelligenceApiToken, userPrompt, sessionId, @@ -30,28 +31,23 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { extensionContext } = createSiteOptions; - const { siteName, siteDescription, sitePages } = await fetchSiteAndPageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); + if (!intelligenceAPIEndpointInfo.intelligenceEndpoint) { + return; + } + const { siteName, siteDescription, sitePages } = await fetchSiteAndPageData(intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); // eslint-disable-next-line @typescript-eslint/no-unused-vars - const contentProvider = previewSitePagesContent({sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId}); + const contentProvider = previewSitePagesContent({ sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId }); + + const envList = await getEnvList(telemetry, intelligenceAPIEndpointInfo.endpointStamp) - // TODO: Implement the create site button click handler stream.button({ - command: 'create-site-inputs', - title: 'Create Site', - tooltip: 'Create a new Power Pages site', - arguments: [siteName, false], + command: CREATE_SITE_BTN_CMD, + title: CREATE_SITE_BTN_TITLE, + tooltip: CREATE_SITE_BTN_TOOLTIP, + arguments: [siteName, envList, contentProvider, false], }) - vscode.commands.registerCommand('create-site-inputs', async (siteName: string, isCreateSiteInputsReceived) => { - if (!isCreateSiteInputsReceived) { - const siteCreateInputs = await collectSiteCreationInputs(siteName); - if (siteCreateInputs) { - isCreateSiteInputsReceived = true; - } - } - }); - return { siteName, //websiteId, @@ -138,25 +134,15 @@ export function getUpdatedPageContent(contentProvider: EditableFileSystemProvide return contentProvider.getFileContent(pageUri); } +export async function collectSiteCreationInputs(siteName: string, envList: IEnvInfo[]) { + const envNames: vscode.QuickPickItem[] = envList.map((env: IEnvInfo) => { + return { + label: env.envDisplayName, + description: env.orgUrl, + }; + }); - -async function collectSiteCreationInputs(siteName: string) { - const envNames: vscode.QuickPickItem[] = [ - { label: 'EnvONe' }, - { label: 'EnvTwo' }, - { label: 'EnvThree' } - ]; - - const title = vscode.l10n.t("New Power Pages Site"); - - interface ISiteInputState { - siteName: string; - envName: string; - domainName: string; - title: string; - step: number; - totalSteps: number; - } + const title = vscode.l10n.t(SITE_CREATE_INPUTS); async function collectInputs() { const state = {} as Partial; @@ -172,7 +158,7 @@ async function collectSiteCreationInputs(siteName: string) { title, step: 1, totalSteps: 2, - placeholder: vscode.l10n.t("Choose Environment"), + placeholder: vscode.l10n.t(ENVIRONMENT_FOR_SITE_CREATION), items: envNames, activeItem: typeof state.envName !== "string" @@ -180,6 +166,7 @@ async function collectSiteCreationInputs(siteName: string) { : undefined, }); state.envName = pick.label; + state.OrgUrl = pick.description; return (input: MultiStepInput) => inputSiteName(input, state); } @@ -192,8 +179,8 @@ async function collectSiteCreationInputs(siteName: string) { step: 2, totalSteps: 2, value: state.siteName || siteName, - placeholder: vscode.l10n.t("Enter site name"), - validate: async (value) => (value ? undefined : vscode.l10n.t("Site Name is required")), + placeholder: vscode.l10n.t(SITE_NAME), + validate: async (value) => (value ? undefined : vscode.l10n.t(SITE_NAME_REQUIRED)), }); } diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts index 505e5c5f..007719b5 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts @@ -5,9 +5,10 @@ import { ITelemetry } from "../../../../OneDSLoggerTelemetry/telemetry/ITelemetry"; import * as vscode from 'vscode'; +import { IIntelligenceAPIEndpointInformation } from "../../../../services/Interfaces"; export interface ICreateSiteOptions { - intelligenceEndpoint: string; + intelligenceAPIEndpointInfo: IIntelligenceAPIEndpointInformation; intelligenceApiToken: string; userPrompt: string; sessionId: string; @@ -30,3 +31,13 @@ export interface IPreviewSitePagesContentOptions { envId: string; userId: string; } + +export interface ISiteInputState { + siteName: string; + envName: string; + OrgUrl: string; + domainName: string; + title: string; + step: number; + totalSteps: number; +} diff --git a/src/common/constants.ts b/src/common/constants.ts index dfb5f8fb..b7c36538 100644 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -85,6 +85,11 @@ export interface IApiRequestParams { relatedFiles?: IRelatedFiles[]; } +export interface IEnvInfo { + orgUrl: string; + envDisplayName: string; +} + export const VSCODE_EXTENSION_COPILOT_CONTEXT_RELATED_FILES_FETCH_FAILED = "VSCodeExtensionCopilotContextRelatedFilesFetchFailed"; export const ADX_WEBPAGE = 'adx_webpage' export const HTML_FILE_EXTENSION = '.html'; diff --git a/src/common/utilities/Utils.ts b/src/common/utilities/Utils.ts index 0bbe584c..c53080eb 100644 --- a/src/common/utilities/Utils.ts +++ b/src/common/utilities/Utils.ts @@ -4,7 +4,7 @@ */ import * as vscode from "vscode"; -import { componentTypeSchema, EXTENSION_ID, EXTENSION_NAME, IRelatedFiles, relatedFilesSchema, SETTINGS_EXPERIMENTAL_STORE_NAME, VSCODE_EXTENSION_COPILOT_CONTEXT_RELATED_FILES_FETCH_FAILED } from "../constants"; +import { componentTypeSchema, EXTENSION_ID, EXTENSION_NAME, IEnvInfo, IRelatedFiles, relatedFilesSchema, SETTINGS_EXPERIMENTAL_STORE_NAME, VSCODE_EXTENSION_COPILOT_CONTEXT_RELATED_FILES_FETCH_FAILED } from "../constants"; import { CUSTOM_TELEMETRY_FOR_POWER_PAGES_SETTING_NAME } from "../OneDSLoggerTelemetry/telemetryConstants"; import { COPILOT_UNAVAILABLE, DataverseEntityNameMap, EntityFieldMap, FieldTypeMap } from "../copilot/constants"; import { IActiveFileData } from "../copilot/model"; @@ -325,8 +325,11 @@ export function getECSOrgLocationValue(clusterName: string, clusterNumber: strin } //API call to get env list for an org -export async function getEnvList(telemetry: ITelemetry, endpointStamp: ServiceEndpointCategory): Promise<{ envId: string, envDisplayName: string }[]> { - const envInfo: { envId: string, envDisplayName: string }[] = []; +export async function getEnvList(telemetry: ITelemetry, endpointStamp: ServiceEndpointCategory | undefined): Promise { + if(!endpointStamp) { + return []; + } + const envInfo: IEnvInfo[] = []; try { const bapAuthToken = await bapServiceAuthentication(telemetry, true); const bapEndpoint = getBAPEndpoint(endpointStamp, telemetry); @@ -344,7 +347,7 @@ export async function getEnvList(telemetry: ITelemetry, endpointStamp: ServiceEn // eslint-disable-next-line @typescript-eslint/no-explicit-any envListJson.value.forEach((env: any) => { envInfo.push({ - envId: env.properties.linkedEnvironmentMetadata.instanceUrl, + orgUrl: env.properties.linkedEnvironmentMetadata.instanceUrl, envDisplayName: env.properties.displayName }); }); From 9df6e819d59725686f80a6f192c0a3e4d8736fa3 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 15 Nov 2024 15:40:20 +0530 Subject: [PATCH 17/28] Add PowerPages site and component models, constants, and entity names --- .../create-site/CreateSiteConstants.ts | 35 + .../commands/create-site/CreateSiteModel.ts | 82 ++ .../commands/create-site/CreateSiteUtils.ts | 156 ++++ .../commands/create-site/SiteComponents.ts | 50 ++ .../commands/create-site/SiteEntityNames.ts | 51 ++ .../create-site/site-templates/Nl2Site.ts | 792 ++++++++++++++++++ 6 files changed, 1166 insertions(+) create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts create mode 100644 src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts index 3ebbfd0a..e3f0c157 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -14,3 +14,38 @@ export const SITE_NAME_REQUIRED = 'Site Name is required'; export const CREATE_SITE_BTN_CMD = 'create-site-inputs'; export const CREATE_SITE_BTN_TITLE = 'Create Site'; export const CREATE_SITE_BTN_TOOLTIP = 'Create a new Power Pages site'; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export enum PresetThemeIds { + ORANGE = '329a43fa-5471-4678-8330-d3a0b404e9bb', + TURQUOISE = '215708aa-2dcb-4ec1-829b-7121994ebcc3', + BRIGHT_BLUE = '0f6ab1e0-f1d6-45a7-92d5-e07bd7bb9b6b', + TEAL = '3e4815d4-03da-4fb4-9714-a4fe61caaba6', + MOSS = '9fbe5118-b883-48b5-81d6-09a78fedb035', + NEUTRAL = '146d2355-1494-404c-8ddf-a3d1a23ad57d', + BLUE = 'df88c9ca-e24f-4eca-af9a-880e7b8559a0', + RED_ORANGE = '0e87b0cb-83a0-4d04-8843-aa97796c4d87', + RED = '763110f9-ad1d-4683-aa48-13d888fc5428', + PURPLE = 'e4b7a39b-a92e-4755-9507-c5383356fb2c', + GREEN = '2b52b31c-c600-4eb3-99c9-8ec01c2ac85e', + GREY = 'f21551a1-7244-432f-ad88-220609e070d3', + DARK_BLUE = '656c3ab7-eba6-4496-8de6-2e8c22310f98', + DARK_YELLOW = '4fce2c5f-d5fc-4e47-8f0b-77be5bd05cce', +} + +export const BASE_PAGE = { + enablerating: false, + enabletracking: false, + excludefromsearch: false, + hiddenfromsitemap: false, + sharedpageconfiguration: false, +}; + +export const CDS_BASE_URL = 'https://org06ff0f46.crm10.dynamics.com'; // This is a placeholder URL +export const CDS_URL_PREFIX = '/api/data'; +export const CDS_API_BASE_URL = `${CDS_BASE_URL}${CDS_URL_PREFIX}`; +export const CDS_API_VERSION = 'v9.2'; +export const CDS_API_VERSION_9_2 = `${CDS_API_BASE_URL}/${CDS_API_VERSION}`; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts new file mode 100644 index 00000000..f45e118b --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts @@ -0,0 +1,82 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export interface PowerPagesParsedJson { + powerpagesite: PowerPagesSite[]; + powerpagecomponent: PowerPagesComponent[]; + powerpagesitelanguage: PowerPagesSiteLanguage[]; + } + + export interface IFileUpload { + fileName: string; + entityId: string; + fileContent: string; + entityName: string; + columnName: string; + } +export interface IURLParams { + entityName?: string; + entityId?: string; + query?: string; + apiVersion?: string; + additionalPathTokens?: string[]; + } + + export interface PowerPagesSiteEntity { + powerpagesiteid?: string | null; + content: string; + name: string; + } + + export interface PowerPagesSite extends PowerPagesSiteEntity { + datamodelversion: string; + } + + export interface PowerPagesSiteLanguage extends PowerPagesSiteEntity { + powerpagesitelanguageid: string; + displayname: string; + languagecode: string; + lcid: string; + } + + export enum PowerPagesComponentType { + PublishingState = '1', + WebPage = '2', + WebFile = '3', + WebLinkSet = '4', + WebLink = '5', + PageTemplate = '6', + ContentSnippet = '7', + WebTemplate = '8', + SiteSettings = '9', + WebPageAccessControlRule = '10', + WebRole = '11', + WebsiteAccess = '12', + SiteMarker = '13', + BasicForm = '15', + BasicFormMetadata = '16', + List = '17', + TablePermission = '18', + AdvancedForm = '19', + AdvancedFormStep = '20', + AdvancedFormMetadata = '21', + PollPlacement = '24', + AdPlacement = '26', + BotConsumer = '27', + ColumnPermissionProfile = '28', + ColumnPermission = '29', + Redirect = '30', + PublishingStateTransitionRule = '31', + Shortcut = '32', + PowerAutomate = '33', + } + + export interface PowerPagesComponent extends PowerPagesSiteEntity { + powerpagecomponentid: string; + powerpagecomponenttype: PowerPagesComponentType; + powerpagesitelanguageid?: string | null; + filecontent?: string; + filename?: string; + } diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts new file mode 100644 index 00000000..6ba585b2 --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts @@ -0,0 +1,156 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + + + +import { v4 as uuidv4 } from 'uuid'; +import { PresetThemeIds, CDS_API_BASE_URL, CDS_API_VERSION } from './CreateSiteConstants'; +import { PowerPagesParsedJson, IURLParams } from './CreateSiteModel'; + + +/* eslint-disable @typescript-eslint/no-non-null-assertion */ + +export const reGuidPowerPagesSite = (site: PowerPagesParsedJson): PowerPagesParsedJson => { + if ( + site.powerpagesite.length === 0 || + site.powerpagesitelanguage.length === 0 || + site.powerpagesite[0].powerpagesiteid === null || + site.powerpagesite[0].powerpagesiteid === undefined + ) { + return { + powerpagecomponent: [], + powerpagesite: [], + powerpagesitelanguage: [], + }; + } + const guidMap = new Map(); + guidMap.set(site.powerpagesite[0].powerpagesiteid, uuidv4()); + + // Ensure site theme ids dont get overwritten by mapping them to themselves + for (const key of Object.keys(PresetThemeIds) as Array) { + guidMap.set(PresetThemeIds[key], PresetThemeIds[key]); + } + + const reguidContent = (content: string): string => { + if (content) { + let newContent = content; + const regex = /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi; + let match = regex.exec(newContent); + while (match !== null && match.length > 0) { + const current = match[0] as string; + if (!guidMap.has(current)) { + guidMap.set(current, uuidv4()); + } + newContent = newContent.replace(current, guidMap.get(current)!); + match = regex.exec(content); + } + return newContent; + } + return content; + }; + + const powerPagesSites = [ + { + ...site.powerpagesite[0], + powerpagesiteid: guidMap.get(site.powerpagesite[0].powerpagesiteid)!, + content: reguidContent(site.powerpagesite[0].content), + }, + ]; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const powerPagesSiteLanguages = site.powerpagesitelanguage.map((language: any) => { + if (!guidMap.has(language.powerpagesitelanguageid)) { + guidMap.set(language.powerpagesitelanguageid, uuidv4()); + } + return { + ...language, + powerpagesitelanguageid: guidMap.get(language.powerpagesitelanguageid)!, + powerpagesiteid: guidMap.get(language.powerpagesiteid!)!, + content: reguidContent(language.content), + }; + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const powerPagesComponents = site.powerpagecomponent.map((component: any) => { + if (!guidMap.has(component.powerpagecomponentid)) { + guidMap.set(component.powerpagecomponentid, uuidv4()); + } + return { + ...component, + powerpagecomponentid: guidMap.get(component.powerpagecomponentid)!, + content: reguidContent(component.content), + powerpagesitelanguageid: component.powerpagesitelanguageid + ? guidMap.get(component.powerpagesitelanguageid)! + : null, + powerpagesiteid: guidMap.get(component.powerpagesiteid!)!, + }; + }); + + return { + powerpagecomponent: powerPagesComponents, + powerpagesite: powerPagesSites, + powerpagesitelanguage: powerPagesSiteLanguages, + }; +}; + +/** +* Get the request URL +* @param URLParams IURLParams +*/ +export const getCDSEntityRequestURL = (URLParams: IURLParams): string => { + const { entityId, entityName, query, apiVersion, additionalPathTokens } = URLParams; + let url = `${CDS_API_BASE_URL}/${apiVersion ? apiVersion : CDS_API_VERSION}`; + if (entityName) { + url = `${url}/${entityName}`; + if (entityId) { + url = `${url}(${entityId})`; + } + } + if (additionalPathTokens && additionalPathTokens.length > 0) { + url = `${url}/${additionalPathTokens.join('/')}`; + } + if (query) { + url = `${url}?${query}`; + } + return url; +}; + +/** +* Get the path for the CDS Entity URL +* @param URLParams +* @returns path of the URL +*/ +export const getCDSEntityRequestURLPath = (URLParams: IURLParams): string => { + const url = getCDSEntityRequestURL(URLParams); + const urlObj = new URL(url); + return urlObj.pathname; +}; + + +export const generateRandomColorNumber = () => { + const colorNumbers = [1, 2, 3, 5, 6, 7, 8]; + return colorNumbers[Math.floor(Math.random() * colorNumbers.length)]; +}; + +/** + * Converts base-64 encoded string to an array buffer + * @param base64String the string containing data to convert + * @returns ArrayBuffer + */ +export function base64ToArrayBuffer(base64String: string): ArrayBuffer { + const binaryString = atob(base64String); + const bytes = new Uint8Array(binaryString.length).map((_, i) => binaryString.charCodeAt(i)); + return bytes.buffer; +} + +export const getFileUploadHeaders = (fileName: string, dataverseToken: string) => { + return { + 'OData-MaxVersion': '4.0', + 'OData-Version': '4.0', + 'Content-Type': 'application/octet-stream', + 'x-ms-file-name': `${fileName}`, + Authorization: `Bearer ${dataverseToken}` + }; +}; diff --git a/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts b/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts new file mode 100644 index 00000000..279fab5e --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts @@ -0,0 +1,50 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export interface PowerPagesSiteEntity { + powerpagesiteid?: string | null; + content: string; + name: string; +} + +export enum PowerPagesComponentType { + PublishingState = '1', + WebPage = '2', + WebFile = '3', + WebLinkSet = '4', + WebLink = '5', + PageTemplate = '6', + ContentSnippet = '7', + WebTemplate = '8', + SiteSettings = '9', + WebPageAccessControlRule = '10', + WebRole = '11', + WebsiteAccess = '12', + SiteMarker = '13', + BasicForm = '15', + BasicFormMetadata = '16', + List = '17', + TablePermission = '18', + AdvancedForm = '19', + AdvancedFormStep = '20', + AdvancedFormMetadata = '21', + PollPlacement = '24', + AdPlacement = '26', + BotConsumer = '27', + ColumnPermissionProfile = '28', + ColumnPermission = '29', + Redirect = '30', + PublishingStateTransitionRule = '31', + Shortcut = '32', + PowerAutomate = '33', +} + +export interface PowerPagesComponent extends PowerPagesSiteEntity { + powerpagecomponentid: string; + powerpagecomponenttype: PowerPagesComponentType; + powerpagesitelanguageid?: string | null; + filecontent?: string; + filename?: string; +} diff --git a/src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts b/src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts new file mode 100644 index 00000000..2a474af1 --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/SiteEntityNames.ts @@ -0,0 +1,51 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export const WhoAmI = 'WhoAmI'; +export const AttributeMetadata = 'Attributes'; +export const Solutions = 'solutions'; +export const EntityDefinitions = 'EntityDefinitions'; +export const EnvironmentVariableDefinitions = 'environmentvariabledefinitions'; +export const EnvironmentVariableValues = 'environmentvariablevalues'; +export const SavedQueries = 'savedqueries'; +export const SiteMap = 'SiteMap'; +export const SystemForms = 'systemforms'; +export const SiteSettingDefinitions = 'adx_sitesettings'; +export const CloudFlowConsumers = 'adx_cloudflowconsumers'; +export const SiteSettingDefinitionsMspp = 'mspp_sitesettings'; +export const PowerPagesComponents = 'powerpagecomponents'; +export const PostConfigurations = 'msdyn_postconfigs'; +export const PowerPagesSites = 'powerpagesites'; +export const PowerPagesSiteLanguages = 'powerpagesitelanguages'; +export const CdsBatchEndpoint = '$batch'; +export const TablePermissions = 'adx_entitypermissions'; +export const WebformStep = 'adx_webformsteps'; +export const Website = 'adx_website'; +export const WebPageAccessControlRule = 'adx_webpageaccesscontrolrules'; +export const DocuSignTemplateTable = 'pp_docusigntemplateses'; +export const DocuSignTabsTable = 'pp_docusigntabses'; +export const FetchPowerAppsSettings = 'fetch_powerapps_settings'; +export const FetchPowerAppsSetting = 'fetch_powerapps_setting'; +export const WebPages = 'adx_webpages'; +export const WebLinks = 'adx_weblinks'; +export const Organizations = 'organizations'; +export const WebFiles = 'adx_webfiles'; +export const Annotations = 'annotations'; +export const WorkFlowTable = 'workflows'; +export const SystemUser = 'systemusers'; +export const ChatBots = 'bots'; +export const ContentSnippets = 'adx_contentsnippets'; +export const EncryptedSettings = 'pp_encryptedsettings'; +export const AdxWebsites = 'adx_websites'; +export const RelationshipDefinitions = 'RelationshipDefinitions'; +export const PWAEntity = 'pwaEntity'; +export const Organization = 'organizations'; +export const DvFileSearches = 'dvfilesearchs'; +export const DvFileSearchEntities = 'dvfilesearchentities'; +export const DvFileSearchAttributes = 'dvfilesearchattributes'; +export const SiteMarkers = 'adx_sitemarkers'; +export const SiteMarkersMspp = 'mspp_sitemarkers'; +export const BotConsumers = 'adx_botconsumers'; +export const TextDataStatus = 'textdatastatus'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts b/src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts new file mode 100644 index 00000000..c2c44f7c --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/site-templates/Nl2Site.ts @@ -0,0 +1,792 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export const nl2SiteJson = +{ + "powerpagecomponent": [ + { + "powerpagecomponentid": "015e3830-2407-4ff2-b614-2335fc1df9d3", + "content": "{\"description\":\"Enabling this setting will show all customer activity on the portal timeline.\",\"value\":\"false\"}", + "name": "CustomerSupport/DisplayAllUserActivitiesOnTimeline", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "01dfcc9d-14b8-47bd-aa21-cb1493477284", + "content": "{\"anonymoususersrole\":false,\"authenticatedusersrole\":true}", + "name": "Authenticated Users", + "powerpagecomponenttype": "11", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "0264f751-b7fd-4ffa-8b87-2fc619abfedf", + "content": "{\"pageid\":\"b579f68c-5c66-4fb5-b760-57323fac52d5\"}", + "name": "Search", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "02908c52-05a8-43e9-9cce-26df4dee15db", + "content": "{\"display_name\":\"Header/Toggle Navigation\",\"type\":756150001,\"value\":\"Toggle navigation\\r\\n\"}", + "name": "Header/Toggle Navigation", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "0a0e9e99-c285-471c-ae75-a0582e2f2ec9", + "content": "{\"displayorder\":1,\"isdefault\":false,\"isvisible\":false}", + "name": "Draft", + "powerpagecomponenttype": "1", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "0c5f0759-2552-4a1a-9a00-1587a9c9b5a3", + "content": "{\"value\":\"SAMEORIGIN\"}", + "name": "HTTP/X-Frame-Options", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "0f11753e-9885-4c0c-ac5e-d05059f21c8e", + "content": "{\"copy\":\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n

You don’t have access to this

\\r\\n

Check your credentials or ask your admin to request access

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\",\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"access-denied\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"33b351a2-b34c-4a43-8847-2e197c21d4d3\",\"sharedpageconfiguration\":false}", + "name": "Access Denied", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "152af973-6073-4372-bf7f-a2180fb6d505", + "content": "{\"display_name\":\"Search/Results Title\",\"value\":\"Results for {{ request.params.q }}\\r\\n\"}", + "name": "Search/ResultsTitle", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "19cec652-c895-ec11-b3fe-00224824507f", + "content": "{\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"Cat-PC.png\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "iVBORw0KGgoAAAANSUhEUgAAAMgAAAChCAYAAACCo/AMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACmRSURBVHgB7X19kBzFlefLqm5pviTNiA+BvGc1lvD61l4YImzvhfGeerwLtu8ijhEHd3sRPjRcbFzwx0ZoMAbh27iViHDYxqyxHHdr33+IC8fdRYCtYW9jwQgxI/Z71xuMgAUWITSCRQgZSSPNaL66u3LzZWVmvcyqnp7uaUk9PfmL6OmqrKyPmclX7/3ee/mSgceS8NZtv9YfRrntnPP+iLP+gEGBA+/VxzmwCcb5BDAYjyI4vAbCsRvGxifBY0WDgUdVHC/295aDaFhs3iFEoB/qhPjj7ucRf/LGsdfGwGNFwgtIBrRgiD/OLqolGgaHsRwP7xUaZQI8VhS8gDg4+tufKbIoeEIIRsE5NMkgGmGMjVcq0eFcwM994sU3TuiDbxV/rZ9BuIUHUBSmVhEYy9I4+6aj8JFbvOm1YuAFhODol27aK173e6xGzseCAEYuVKafvGVsYskD+43ipwphkN8j/sBDtJ0JrhJGwYDXJisDXkAU3h64aR9nfBdpmhT8Ye8nx177ISwDWYKCQhJF5R2fHHt9HDxaGl5AIEM4hNYo8/K9/3LszQloEo4WPz3MgmAPB9CcZjIXhbd4TdLaWPUC4ppVYgDv++SLr94PlwDHBU8psfAAEy5i3PfmVusjgFUMJOSXSzgQNwiTqsJLA+KtNBnfjxfKrPIEeLQsVrWAoLdKb4sA4PilFA4NNNt4wHckDwHFN7900zB4tCRWrYCgaaVduZzDRIWXd8Blwo0vyMDhPr0fCi32soi9gEfLYVUKiAgEFoSZs1PvBzza20xCvhQIgv4ICqba7e2B8i7waDmsSgEpBZUi1R7bxv7hSbjMwDwtFvJ7TUPAhr0WaT2sSgER3iPztkbt8ezoaOH5Q6MHRkdHL+sARVOLapF1YekO8GgprDoBQfOKJh5OQf6ZMALhyeKDC/L78oIxvl9v8ygYAo+WQg5WAQYHB3shyA0L1XHzf4/KvbcsXIAvzk/CxkpprLz9y0JY+BD2Cxjseu7Q6Imv/NbAPrhMKEe5J3NBZa/cYVB3xrDHpUXbBwoHB+/uF3ryAKSTD+H2uTNw29xHMPmbX4HJ7f9GhEGACXfvpJCUgdsHBi5bGshbX/r147yjsxDMzcJ8VLnlMz4FpWXQ1ibW4ODvFATJGM0SDsTzHVfBsVwX9P7Zc7D+b0cxFgIyFYTDZeMjeJ9f3v1fJ6d+/fNyvyNkN4NHy6C9OUhQEcIBiw70g0JIEL0vPceC+dlYpXJeKFX4AbjEEI6BoTKH4xc/+en+taffl20RMO/JaiG0LQcZvPPuoWqagwI1CH62zs1Az5G/ganfGEBTC9NAtj978NDer972W3t1X6FWersqUAxD2BJFhi8IfsMmWcQnIg5H1oQwNjAwsGhavNAaBSEYTwiNVeQ8bltzKhYQxsELSAuhfUk64zuBL63ryXAtbC3PQNc/vgoXPl+USoQJ91IYwJ6DL770csQrtzAGd4jB28/FDyEcNiI0zvAUEWMRx55/cXQsYMH+3x7YbsVX0JxaiKLhUsT/IL4FUh7OkHug9kL8U7i2MHj33f0jTz3leUgLoC1JuvJanVtq/88unIf/OHMKyhs2wnu/Jz29RrRw1OMgVttcbfPksDyeeV1x7PhCGe78t7cPjB88OFrkAcfcry3g/N07ThyF63/yP+U28qKDHVejmTcBPNgxMuIF5UqiPTlIGBbr6X4uyMvv3PmzMjAhVUE8iK2BTARFH+dKOPAcLSVUWgr5kL8sNMrLXDoLZJp76qUUzs2a7c8JF3Qnj/Am0sEgvXAeVwztKSB8GZ4gIQRaEFwQITBN+ts5J5Ya3cZlYJJXuSasOX3S7PdFJRGjOat3e8WVfwAeVwxt6sVihXp6d/JKVrMZ5CzWKtK84nFbfJdsrWE0D0u0kdpNyx0XhGbNqX+y2n5TBDGlFomvVhwcvKsIHlcEq3o+iAa+tRFRRydtZloAONEqjBwj3CM18jV3oZ0yuYroFxATC4ECe31lLmkIwOdoXSF4ARHYWo4H6Pymj+m3vqU9dD+9TYh7NSdHTeFRveSX5D4ONlfmydV8CsqVQpsKiPAA1QE9GOc+vi1r4JttrUW4owoW4SZZJliiSZSg1BQQVjue43Fp0J4CwviRpXbF+Ic2sWY/dTN3TKdqLlxKLFzXL2RxjWrIEg6P1kF7BgorlTERB8Fods2oNMZAEHNbboT5azdbQY0j4+PwypEjsOm6TXD7l79iziFCAcR7ZQJ/GeZVVYnJTZ7JbJ9j3vptBbSlgIyMjEwO3nnXfrG5aDGEz5SmhIBckNtnb7+Tqgp+7O232YMPfJ00MSEkX44POlqFCow+PzlkaRhbUMR1qknOLBUQzibA44qgfV9TUfkRMR4nqh3eKMyqfzf7S7l97l9/FRYEQQeZChW7aQ/87KdW/7/6iz+nu+kAoi0khsdQ4UiZXmI/dz474I/pL0m/+jiVR/PQtgKCWgSicCBLSJB33Df9nuQe0zd/Xs4Hcdy40NXdbamJ7p4e/KpOzhPhMG3P//w5+PEf/RGgNoq7mPiJIehhFRPrnVx3shPBGHhcEbT1jMKRkf83Ib5u2LHj7u2f+43P7t+QzxX+xXtHoXD+Q+CbP8U/+HyRzW3Zpge65g5y+6677mZ//Zd/CadOnRIc5Dr4z/fshLiPeKsEhmtkmU5y+8BPn4Yf/+hHsgG10R8+/jjcdHPsraUmWujEQBCYXWyZWFA5DB5XBKtiyu2BA08dHv7G/ZPXC7J9+vQv4dTMjBnUJOZheaSu3bQJHnv8cXbq1IewbdtW6OlZp/ok8REaAwQ7eMh+/vPnrWc4Isi+FhCKYH4u1faLNevJHt8vtOEEeFwRrAoBQQRxoiBEUaSFw6SBEI+U7i73N226Tn7oMS1EU1NTrEeZXVoyKFFXxwz0dQziBHnBQWwT62TYIQRkQ9IQVR4BjyuGVSMguqo6CgXVFDRD1/FEuaaXwc+efpr/rx//SPbt7u5m27Ztg9u+/BUmvFxGk+z493eyV47EmepbxfFbv3irepBYMJQqsq57NsjD/u7NSUPEhr32uLJYFQKCda9yuVBul0olyIhhVJ3TQdu1YL1z7Jhpu3jxojSf8CO0BvvCrbdKe+vWW78IP/k//xempqdh69at8lIgS3Ixs82CAILZmIOgcDwphEOn3gtivndk5KllrU3isXysmmhUuRxn7OZy8TuBZNpm5lplQQvLTf1pLoFeLtQU8nzVhjxmm2oj9zT8B683v2kzvLX1psn/0bNl7GTYOYGcQ/Qqjow87U2rFsCqMbEiNU9WaBLLtILsXCu6z13zCwOGqDEOCjcuAoXjwYd2C56xCej5cjsrQEjQ9XvfhBuDYP9Ptm695JXlPerHKtIgZfkdCLMGMjSEm3DIYyNIHoKMAf6FW78gv28WnilhSnE0rVwNoS5kTapy87bwefR6IR6th1UhIIJ99KIGQSHp6urSRNkyp0hqu2qHOBVEuW7JwJfH33k75iE39d8siTrJw3Kuk2wTyD5r1qyRO5Uo8vPOWxSrQkBYOfZgzczMAg5K8damOoROaKLpINa0WTcoeER7qLZuA9qPbDN3m9xLCpN2HIS5nNcgLYpVlTI6MzMjTRqMUWR5sqAKN4FEG5jt6emL8oAg5in3V8b8kExoDXLjDTccBo+WxKog6YxVerl4F8zNzYnPPKxfvw4uXLiQlYVbjUynhOmenTvltyDmqXMcl3HitXLYT0dHB3YeA4+WxaoQkIgxHSTkk5OT7LrrNkkhOX9hqtbUpqoeKEHK3WMmxV03kNSThPIroCaTAgLg+UcLY1WYWDwu1iY1gNYivb29kM/Z7wfXNFpkZiAVDioYNLVdkXbbC6bJvnQWCAhN5gWkhbEqBCRIfk05mD/66CO5c/XVV5GAYTrVhLz9XdBER1eKjHDEaS3gXDK+R09Pt/SqTZ7x/LyVsSoEpAJRQW3KwYkD8+zZc9LE6evrVXYQpwUWsrSCC2o+WdrHyfKl21J48L74mZw8j+JSAI+WxargICELCm6u1fT0tEw76e3dgFF2JgarPpQlELEeQG0DGJWXSodqEe4WOgFIuYZN28aNG6WQimfAq2wBj5bFqhAQHvFeNcQtk+j8+fMcU0+Qj2AWvOAD1mCml4DYBmOabdPAoO7keMXoNFttcnEMKq5ZkxdmXpzmLpr7wKNlsTpysWIzRudU0TR2pgfqxo19UpOIt3qSexWriSzTKTM1nkykcgOFEmEYMrwPOgpQg8WPxn1RuBZG23MQtZQazkBiNDhIB7sQEr6wsCBJ+/r165N0ETU7UJ2z6H3cBEfdrI+jWxfdy5jycuaMNUmqAB4ti7YXEGHq4xs6K15BwU6e/EC+1fENj7yEZvaSSVVLipBr97D+1sKBnOf06V/yUqlM+/JDh/7C85AWRdubWGKM9nJIVV/PhDa3kJMgzp+/wDNMKfxKtQNx/VJNpYUD00qE5kBNZXEU7BOxeRTiE+DRcmh7ARFDdTvYg1c2A6SKNsh9KiTISS5cmLKvx2sqEcND8vk837TpWoaaA6+LGsq9X/yMrAAeLYn2J+lMmFhqTDuJiHS+uaUNkJPkcnnpjsWRPjU1zTKWOzBeKp6u5ctEnIMLTiM1CJpvyHH0/Zi9rgiDyFdvb1W0PQfh3HiJ3KCd/s6Me5w+fVoO6r6+PobmEUmFT02bdc8XRB/NKnmcCEeiPYiAqccogkdLgkEbAz1YpYify8ja1dB+WbkNidkF+nvz5uvlNtbH0rMSaSoJ1R6oLZDkYzo9ptajWRU5S+JWe5aLAevbUWP5aI/Lj7bWIBWAItilfVLJiFa2bbLUmjwJB/eHH37IceBfe+015rws4p7P5ziScRSOyclJWaBOCwdNeqzmBl5T8u7eVkRbCwiPDEF3BUPuR05haZWEpQVFtgmXrAwmopmF7l+iXQwnEQFAOS9Ek3GVtkJXquKOcDomFkA+kM/q0WJobwFJVpe13viYSwVOo8pXRJViAolaANBcwglW6NlCYVD9pSChUKDmQC2DZtjFixd5kiFsXZ+5QkKKPHDpTPBoObQ3SScuXoT2IOlcKrcQgzktIyCIMRE0mTDarvvgoEehQSFB4dBF6XgiZJbXLCOdnpm0FO5TTloRbSsgBw+OFiE9UclKCeGLLLQJdto7VCoVwJhInKq+Vp6PfAPndZw9e1Z6quj1HFdu6h4stVYI9B+I02I8Wgjtq0GcpZN5dnWRLNBkQ6s/ZvuiFtGRduQk6NkScRLDMZhTEBscIZWaB8BeK0Rdv6PszaxWQ/sKCJOxhWqzAVOD1zmeakPoyDpqEYx1aFIu00Uiqyojd8sHgRI8yUWq3DPMwc3g0VJoSwHBYtVizNUabLyOfeOx0mnqGO9A7TE3N6c0R5Wlnp3YirttRdZ9RL3l0JYCEkZQ1GaSQ7gpScg+ObuAtSHygotwLPqA0OkjpI9zqVRT1uxDQt59RL3V0JYCIsblTr3Nq9S9IqaQFaNgSX6VmyJvMnQXFrSAlMx6I/b9TcYv5STm/hnCp59li099by20nYCMCvNKDMbtej/JJElBahjHmwU0/kEGvjWitQZBE8uZL5J1H/cayTptttkVu4eDhSJ4tAzaTkBKwrxilCFzToLkVb1XjGXZQ1UkSycf6stluJBNO8/OAWPu9bXMVDwPaSm0n4nF+U53YKvBrz/67e1yk2oer5QJJTSH3M/l8uqWnKoCbY6lCjrQ2IiJoDvHxZMWwaNl0FYCIr1X8QCjQsCTCDozSYkkaVDPC6kVI7HSRNC80tXZ7V5J+juJjbj3YE5cRp0qU118wLCF0FYCEkZRUW0aQg2QuYJUiribt7tKUqQBPNVsaRIMGKrl3FyByrwfr15MjrvP1MPD7eDREmgvE4sFe5wWd6ln17wyWoOrMj8qWdHyOmXkVkmCLlersq6RaAvdBunUdkp3jABbwscrRfBoCbSNgLzwwuigGKIFtZu8ru0Zf+aN7nACLUWZ187i76hBlICYbkHALNcuS5Zw098WmafXs/gK8EHwaAm0jYDwAHaRXVbl28qV4tnromeN3oxEw7RzSmsd7cat4sEy5ls1N7JAwcdDWgNtISDPj472i8FYdOIKFlHX7Tx5fbuTmGiSostBeHpWYDUuvyiMyeZqJfc5K3zBa5EWQHtUNYli7YFUAWyCrmHsfMeTRK/CYg5h9imXcPvaPcEuUA02B2Esq9RP9aXf9Dx5FJAfwjIweNddRfEEu8Iw7P/Yr/wK5PN58FgSJiBg+7//ne88yWCFAyPnpYi/A5Ba2cloAk5WqwVITXc128wpwuD0s9qxpA9m9b7//km5z5O6vFDlnNSz1cJyCjncM/Rf9l64cGGP3r/qmqtNmr7HEhGwoRVvYomQ3RNgD3ZrequTVcsIcaZTY2lfXi3zloBhkNBJNeFZsY1aE6cyoRwI3ZUkp6we7N69uzAzM2N59KJKBB51IuIrW0CeP3RoSHGP1ODjtVeLYpxOeVXdwDanaEkgJ6Ke4iBWhktyW0tAs54jneyonj9q0Jt14r33irpEkcbatWvBo05w3ruiBUQYTvItuRSThWoOsk+Pu+aU69Ey0Xc8F128bs2rrCREgJqTsrJMLqkBAwbFRqLq5VLF0jz4rN093eBRH8Q/enzFCshzhw4NB4wVSNOibiXX9aqietS7VWsgU+0ko+j0LU1jHtwuROd6y/SxxZ7VPE83BHWZWffdd1+hXLEDjd09PeBRP3jE9q9IAcGcKxH23uV6oaBOqBNS5hPVJhkchAVhKN/K5XLFNGY8S5YHjGdoqvQNaBCzUqnLzDpz7sIdbtu69evAoz6IP/7EDx77zuEVKSBhBHuE9tgCNWx5B+lwOPFq8UVWj3LPXaPcpQsLCynNkDF5KsV7wL24HbOhQUysl1WXmVWJKkN0H127nZ2d4FE3xvDHihOQ5w+NDuGMQeWpooeoa9f1HFVDKtJuDqS9YPp6HKssIlwOAkRbODlgi7p9M5otp0MPBLtgCRgc/J1CVKlY80k6vHA0BDSv8HtFCQi+SQVx3UPcqvoQNYmsYCA5Duq4tU+QchVX6SNLjKJwJBOn0tfhtdcRAfc+9LmpkHNHK1TDug0dKUHy5lX90OYVbq8oAemuRHsjzrcQOz7ldcoY2FneKUvTsIySoJCea268Wlg4zl3SoIZ5p8+3vlmV1aoyhLzwbFwIb1HMz89bfMWbVw1jTG+sGAEZlZOh2C4Vrs5IHoQsU8aNmFsF23SKOw0sqj5MxyKcGAsLw1CaWLhSLYC9MGjWczup7fbD2VF3npGSYtoCOxkzhaGhof6FhVKBtnnzqjFo8wqxYgSkxGEUv3l64hFfxJzJ8hbRhEG9km1WYDHT1NL5TLpwA3kWl5yb67gainzT81gGhyLSxYuji5B1HoTevGoCqHmFWBEC8vNDh/aSuR4Iqhl0CkmKmGu5cVy4yeH0gKRIvcURXV2dsl1pEHJZ2yRbYtpKlplIJ3fR33PDQlRdi0xPTxfpvjevGgTnI3S35QVkNI557KFt1kBLz+HQgwuy0qjc1A8wL/mEvC/mmu3q6nKFQ18ka167Mb8yEiGz4Go8ujAiXiJTQH73d+8rVsqVAm3r6vaR80YQ8ehJut/yAlLiHE0rTRzSI0y5UR1TKHvGYNp7pWbJ2pm+1fgEcg/0YOnyo9WgtAkGE40GWKpXy76Q8zLgvC+LrM/Oz+5027x5VT/QvNr32GPjtK2lBSQ2rWCLfPtiQxVCrAekS7Qz3MHmsDk1fdtM4UD0qHwmh3+koJ8Pi103JBjkQehaJvgJGd/j9rt4caZI99G88smJ9UOMsn1uW8sKCDGtEheV9vLEXcygUVhK0qISsMQMg7TGqDqi0bzC1abcTNlLBZP6yFStFUTAitKjp/C1r32tKHoW6HnrezeAR/2oADzjti1pRuEDu3cXxZjaKUZRQTYEbH8uig4/+uijE3CJUOZwQG+7rlQGqbT0xaCFwRDyuHgJzzwOVTQICgeaV7hA51KwHM2RhkX0eST+F2LzEdyfL5VT5lWPT06sH5yP7/teejzX1CD3735YqB02GjA2BPGqsUXBZPaXRRtOzIFLAEwn4dnrm1eDIddkEhSFaYiqzAGBGvdZL2x61BzT0xfhciJQXIaYkeIHDGuXb6lkZ+6iaaXqdXnUhWBfZutipzzw0MOY7qvme1vJfIhCGYIXh4eHmzqPU1VHRNOKeG/sEAVAatYekGezJjmRc+K+kOn2XVQ4cMDh9FpcyPOyw84s1o6H3koQ7PwP/+lrg655tcFPq20IFRYdzmqvKiDCrNor/i33OM1c+0TjgcVvyK9duxOaCMzUVTEPGrDIiiHQh6ImmHH7Ui+WS+CdbTceYUEvtTYzMwuXG/rtoIvUGQ8Z54ML8/Op1PbOLh/7aABj+6rQhUwBuf/B3XsZqVKo/ymQfptDBM0rtvxsvHTBEGmytABLz6XIghnwNOrOnULSmSdmtKP2QJseXbuXi5w7z2ReDuqlpHaCYmdnxxDti4FBb141AJ6klrhICcjwg/+tPwyDPbFXyPjwjas0bb6wpun0PMCeILBMHutNv1RvU8b5zDHDMq+R5QXT2qNe7rGYxqvzOoZXxd+BvPbbR4/C7Kyt0datXw8e9aOaeYWwBAT5RBhEByKTJmEO0UVfLHNENI9DE3BwdLQYRXyIp8vmpFJIVNUPN73EjaZb4OlFccjlmJ5nbhH8eJnnHsk96tUezRIQBL40SEKm3D569O1UP29eNYSq5hXCLi6bXzssvgrqX2snLTGyrhj5jhaWV9zMgMMeVj0nyjatYm2izSbOnIIM5kSWWUqU5m4xJ8jIVPRbQmsPXNm2XggtDE2E5iFSm5RKJTh+/LjVwZtXDWIR8wph/ovoshXj5A/UwK9qvui8jPgb9u7bt/xYiOIexUV4QrXXsRsPSZFxZtW9SjRJkqioTzQXkB8sshYv8/wRNAKlkaAJ0GkzgP9N1CbvvPMOdzWaN68aw2LmFcK8ckRcY4/0sKdhM11t2wjhePx7330EmoC8uHfkyCRfQlTcyaHKPM8WOnMi0Uha++CAjhswloDaA02rWmkl1YCPFYZh1rTcuqBSTay2N994M/W38eZVA+B8JCs4SCGHhAr4DUFiRVlvb+3TZSavo3nCIW8YRYMASy6Ps2jMgvRJrWBLYGx5SoCxOZ/P82uuuVqaVpOT56FR4B8JBWS5QFJORBumpqbZiRMnrD7d3d3evGoIwUjNHvijxFhR7qUJstYasj02+vmRZgrHwYOjRXHXDepepp1luHQdourIcZqk66AhdZPGn8wYiXwPbNiwHmcNwqlTHy777Z/P5/hyybrWIMg/0Lx69913uftcvu5VA+B8srIw+0ytbnH0ibNdyXmcrsqktYY5ocLYDmgmcgEGuzRxBvIcNT1Rjicr0zxE+eA8zdMJOTeaZN26dTJifv78Bb40RVUdTM7/kFN0YTlQFee5Nn/feP0N6/f0VRMbg/iDjuzbt69mYl0wLM2rOO+JeKusqCBPRuaT+5qcoMidMjUWEu+S5erlkKxvztOTlOR2EtiEVGoJ1UQa69evY5hvNTU1hRm7yx7Y8QpUjDdnyQHJ+VBwIWVeCe3RJGfAqkIAvKZ5JfuFPOinMQ5itxh3rhaUaJ43zbTSEFc2SYkprVEtIzZtipkjupnb6SmMJPyp31WZLmJfaA2G2gMJuQgIquNo0jQ+8JRkLpsbMDL56r333ksd7/YzB+uHMK/+8NFHa5pXCDFqou1UU5Bt+aUJOmBAZV9ztQdmpIoLLxaJ1zwkHQtJw3URpxbISbRKTMhxP8zlWBzvqMhUdpMwK7AcLYIahKl7LkdIlJwB/itee+0165g3rxoDmldL7YsxWte8Sr22caAtVSXVg5KeX1IFjMzjrkJ2Xa1jReBZOvXdStvAhr6+XukpOnv2jKl0ogflcs0srYUEWYfGEb8f0OX83ru2BvHkvDHQsj61EOhcKsKQKf8w2+UoaEpKCUWlXMZ7Z5JsJRxMvek5X6T6uis8PCmSQNy5pr/54CQonGeOg0++8ZVmUR/pNWpUSBKrNSlV2ggUl4Fjx95JHfPzzusHd8r61ELAAlagvMNNJTEXLs0egSYjh3HKZHBbMYuMRwKqEdy+1YREco/4DErQ5Xc8CaoiuMesMrmS1JO4e8CXIyCJizZsmEjr5331lVetdl/Wp2GM1dM5iCqVDVR7EEMdv8woXYpLrCHYi2q6PEJughPXgCxCD9asQiN3XFVPZEnQUPbr7u6Sg19oD05+bX0/UF5VtjwvlE6CZA1rEXzm85MX4IMPPrDafdXExlCPeYUIWIZxr17ZsZ0Rv8AZXAokprnlhiXbi0bCKbi9TiBPNIYVdMRxj/lMvKenh2F9XfExTgnUGC5HWQ4X0SYiftasaVTQOHt5/OVUqzev6ke95hUiAOLOVd/qkDFF5Jht9tRaRBmX203DSjbk1WveZqWlWDxKbdKsXblQdC6Xlx4qnE+hCTk1v9TlWGwWxekn0ACIMpaaiLHG3jMiOGjte/OqYYxBncARcAI3qGkVb5usV7kRdndfkloyzEkp0cH7yDa33NNMkJ9eivbFwU2IOb2fqRm1sFAybcqBx5JL6OuggOQaGtlRVDFReuRCjZhrp0+fhnPnzllt3rxqDOL/UffUDPRiTXI7xd0NHsRtpagITcZXBwYmxFcqI1AOfki0hHa/AmRPu81w5YK2Eqm5pM9bu3YN4JyKSqUC2pJMPFhAXL1xG5LsRmIZqmwjjxMOgTViZv3d3/4i1bbB172qGzyjauJSEAibY9yx+zU7t0gyh6gfLgHE/auSf55eFs0yuVxST71cenJRcjhx96J5ValERniYlZai+0vrU7c1mDLCTfVQ/NGIWeRGz33VxAbBG4vjCQNCxjeopygeOGDP0BMtOy8FDxFjcGyRo4xlzwpMTof4mRNhsSqcSFvR9mAZc8pEqLXSSYQlXjYESbu23BrzQhmJY9rdW8910HOFuWEUvih1Y4hYYzNf8X92WO/oty95cyfpGgz61nR23gHNBodxs0WQwS8sM9BoDDW61TbTrlVzYmACjspq02ZbfNlECGRCoAqAmHsaPoKcpl4zC004zW8acfe+/vrrqbbePl/3qm5g1cQGk2yDx7797XHkIbgjorbUo2VCwRqViO+FJkMM18wAJCdTY10O4XAOLcQ4CrXHijMnKMiYWRJBXSM2nXR2v+YdGU9oXMX1ahF9D30d/CH4z5I9YiffP2nt+6qJDYLBfmgQMXsE2E8TFRmr6o8sfP2hh/dAE3HbbQNj4maTQN7uCuRtn5QKZSrthLqANbfQ52TnZ+mUFZCzBTWnUCYVJ31AW5xxNRF9Cc5wbcJ6EJP0gGgl6UFb5M+b4P3330+ZVz0+9tEQsopSLxVSQAQBf8aQcwUAqBJ/gL3Du3cXoYngQZxdyReZTw6w+Awm7TGClHybCvBGwNC9i0QdB696y7PEa5Vok2SFKv1dX2YuxzLTQoOEYWCi+3jtrq7OmlrkzTffTLX5otQNYWw5c5ikgHz/0UfHxL9zDLed0UWDdiYpSgytJ5pZuJqVy09mNLtuZ+pqS7mkqfYhvMTskmuwSqUs+3bJQgeGkzheLKpVZFauJO31e5AYS5Iu4wV1UIvUOss1r3xZnwbB60stcUEz6B4xjaq8IYBVMI6eV2hmdXfxj0eifs65Dx3UtifLXiIZQEfRTTUiKRSQleSIQA2CH5xeGwTMIuYq3QRsEyvRZBhDWSpiV3LsDUOCrmOwYrAvqkFOTJxImVe+rE9jqFXWpxaMgMRaBMaIojDQJpejXQoVFhz/+kMPDcMyMTAwMCnGzg/VvWRbhp3OwMq1SpwImngr1k05B/VI0QAgzM7OSM8UCom5gdQascsXCHdJrhfHUJYaE4mLKzCmKiOaZ8AX0GKa6O1jvmpikzC23CniVg52JQru1yzXaI4gILFDk3tOItzBDx58+JvHH9j9+0VYBsoLYJlZ3K6fa2mMxHTS/ew0eJvsMxLRlvtSCEQknWOyYrwwTqj66RgKnZ0IJhYCyvRaakRcp7yDZvnMLBXFOzs7qp43cXzC2vfmVYNYpnmFSL2mYy8V36MFBWxaYvEBTuZh4NtYfMbzYbA/YmsPf/uR3687rP/8odEnxFWHXFLNsxMWSQSccR3bZCn3ribHsf2Ppg5X3l58Zpxui33QpEm0V0CuF/+6+K3ndKDpdObMmZq/D3q9rrnmGoBEwZnfB2Mk7zs8A/HWW2/BCwdfsNqu3bTJZ+/Wj7HvP/rdAVgmMsniN3Y/PCqGSpG6fk12IGkjwLkVshlNECS0uI8CI74nQxwYIiLJxJs6H+QgEA0hC7EmjqxhG5/DYE1+TWHTpk0FPbA5rx0ySARUkuDkl7KFwxISdX25jffesCG276empulEJ67fDXS1Wl2798yZs6xWQeurrroKPVayYETWnw1rb83P25Ubn/3TZ1N1d7fcUPAapA5g3lUEfKAZFXgy/+pl4PeKITUq/qEF3ebGSEyEjWiTOIPWpKkg4vnuMfFFkcCkECaLrsQ/pT0TC0IgTLyIT1+8COuEO7Me4WAmdqHaxXO4afvahEr8D7HmwZVosTg1VjXBGYa4BjoS+MSsjL1QtleMcSFUHIWk2rNhULG7u0v/bVwhkQKHFRxPnvzAFKhDYfFFqZcJETWPGOxoVnmqzHmgeHGUQPEPnYDMZ7DrZ4GSG54Vq7BWTSCDOjliDH/8zM7M8DjLdmlw38pa8zCV2kEPJxzE/B6yOw5QXCAH74sDMuYHTHMOcBStNL+EADAs+JA1mQpNq2uvvUZrIf1MlubCfjjwN2++3gjA8XeOp67lvVdLBWalw97vf+/RW5pZu40tdhCLygmDYlS8/grgkGbXZkDtYcwrMTKDeFu3m7YwkGaVfJVje2C+hYbBKl3CNOtYu5b39vZmWHLOw6e4hjK3SPQvg5842bsBqZwecnTj4uDH58aU+LffPobV1JM/FiO5KgKRECok+zi3Pa5gkpcCovopvmMeWOfPpH4x1Fzj40dS7l1cc9AXhqsOMQwnSwul8YsXp8fE33cSKqVnRkZGJqBJYLU6SCER5pbYLDD7wSwBwYGHvCOUQiAEI+EioIRADlx5XAiEFBDVL1RCFBCh6e7u5uKz6PNlE3JKrLOPGa5C3uha44DiJeiGxUGP2uTkyZPw97/4ezh27Jg0iTxaGGj18MpAs4SkpoBofGP3N38g2MJw+nliQZHFlVFAEq0BejvI5aQGCeM+sl0LSCiOyf4xf2FiX20Hghf0WHGK1MM7wlBLWKgQpPtqz1XcduLEu/An//9P4BNbPwGf++xn5TcCZ/dhlBuFBj+4f1Z85mbn4NimrfDu1R+HcpBwho9/9C786gf/CB6XFftGfvb0/dAELFlAEA/s3l0U1v0T4qSCk9xoCLrSENTkomZWrFlQoIimWexYl+AETjDPci9XM7PSWkN7pRKhiQm7lfmrzC4Gr7zyKvzxM39s7tvX1yeF5DOf/jT0bewT3GFz6u9zy/9+IfPv9q+O/jWsm6t/lSqPRsH3j/zsp/dCE1CXe0RF22/4+oMPD7GAiXgJFOTjKE+UsZVNpjo3KejG7karHIUJrESveFeV6NGXQBte2OYyBReFRAuHvmeaoOtva6otU8FCRo4rHkUfJfZiE1JuXRw1BZpZ+EHg83zsY5vFd6cUmE6xfy1U4HTGnzRfKYHHykRD/sPHH/vufvG1XwoK4/eIETcAakwnw1uZMYSmUq8VtgZkgPPs5Q5ktjjGG4QLFKe9purlUkHRt+LWkmzyy3VJK9Iu3csmxEMFo1DYQiP4KSCpdqsd/mq+AzqEiTWb74RymINcpQwbL56DjtIceFxGRPVXL6mGukysakAiL4ZuUZhE23NhcLPQJLcEdsAw4SWJR4trc4qSdyToavae2ZakXkC3adOtuklFPVXJPlPVElV3rS2YfZ2EvL90+CV2+PBL4LGiMCL4R9PWsGmKgGThW9/61pYSY31BPr8hn5NFRuNSo7nY/y9+QMws4ja5r+IB8ieeY/VTbXi0g5xLvpJuObqTbEKWysylv/Q54vvPXxjDKvTg0foQhsP5kZGnml5D2sPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw2MV458BRLg4pgumMhUAAAAASUVORK5CYII=", + "name": "Cat-PC.png", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "1c09dc21-4a02-4919-af00-361d6c296c61", + "content": "{\"disablepagevalidation\":false,\"displayimageonly\":false,\"displayorder\":1,\"displaypagechildlinks\":false,\"openinnewwindow\":false,\"pageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"robotsfollowlink\":true,\"weblinksetid\":\"3b8343ca-c04c-4768-a2f9-73b9a01bde4f\"}", + "name": "Home", + "powerpagecomponenttype": "5", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "230c16df-fb1b-4828-8be1-b0a87016a6a3", + "content": "{\"entityname\":\"adx_webpage\",\"isdefault\":false,\"rewriteurl\":\"~/Pages/Profile.aspx\",\"usewebsiteheaderandfooter\":true}", + "name": "Profile", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "2ef3c1a4-e3b2-45bd-932f-76adc12751c4", + "content": "{\"disablepagevalidation\":false,\"displayimageonly\":false,\"displayorder\":1,\"displaypagechildlinks\":false,\"openinnewwindow\":false,\"pageid\":\"6942c943-cc5d-44dc-883a-13ff114978e4\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"robotsfollowlink\":true,\"weblinksetid\":\"c04c7a09-83f3-4258-bd37-c9b164587996\"}", + "name": "Profile", + "powerpagecomponenttype": "5", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "30a5e35e-28b2-48d7-a983-6b2c275a6e57", + "content": "{\"display_name\":\"Mobile Header\",\"type\":756150001,\"value\":\"\\r\\n {%- if snippets['Logo URL'] %}{{ snippets[{% endif %}\\r\\n {% if snippets['Site name'] -%}\\r\\n

{{ snippets['Site name'] }}

\\r\\n {%- endif %}\\r\\n
\\r\\n\"}", + "name": "Mobile Header", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "32646387-95d6-4279-b9c9-435823a1c4d8", + "content": "{\"source\":\"{% assign current_page = current_page | default: 1 %}\\r\\n{% assign page_size = page_size | default: 10 %}\\r\\n{% assign total = total | default: 0 %}\\r\\n{% assign limit = 5 %}\\r\\n\\r\\n{% assign total_pages_remainder = total | modulo: page_size %}\\r\\n{% if total_pages_remainder > 0 %}\\r\\n {% assign total_pages = total | divided_by: page_size | plus: 1 %}\\r\\n{% else %}\\r\\n {% assign total_pages = total | divided_by: page_size %}\\r\\n{% endif %}\\r\\n\\r\\n{% if total_pages > 1 %}\\r\\n {% assign prev_page = current_page | minus: 1 %}\\r\\n {% assign next_page = current_page | plus: 1 %}\\r\\n\\r\\n {% assign start_page = 0 %}\\r\\n {% assign offset = limit | divided_by: 2 %}\\r\\n {% assign page_offset = current_page | minus: 1 %}\\r\\n {% if page_offset > offset %}\\r\\n {% assign start_page = current_page | minus: offset | minus: 1 %}\\r\\n {% endif %}\\r\\n\\r\\n
    \\r\\n {% if current_page == 1 %}\\r\\n
  • «
  • \\r\\n
  • \\r\\n {% else %}\\r\\n
  • «
  • \\r\\n
  • \\r\\n {% endif %}\\r\\n\\r\\n {% for page in (1..total_pages) offset: start_page limit: limit %}\\r\\n \\r\\n {{ page }}\\r\\n \\r\\n {% endfor -%}\\r\\n\\r\\n {% if current_page == total_pages %}\\r\\n
  • \\r\\n
  • »
  • \\r\\n {% else %}\\r\\n
  • \\r\\n
  • »
  • \\r\\n {% endif %}\\r\\n
\\r\\n{% endif %}\\r\\n\"}", + "name": "Pagination", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "33b351a2-b34c-4a43-8847-2e197c21d4d3", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"access-denied\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false}", + "name": "Access Denied", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "3639737b-f9d4-4fea-a546-1b4f74551574", + "content": "{\"description\":\"Blank Template\",\"entityname\":\"adx_webpage\",\"isdefault\":false,\"type\":756150001,\"usewebsiteheaderandfooter\":true,\"webtemplateid\":\"ad212595-91f1-4e7c-9d99-b0925011cfd9\"}", + "name": "Default studio template", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "3abfb98a-151c-4d03-a718-3c1036351f75", + "content": "{\"displayorder\":2,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"theme.css\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "LyohDQogKiBCb290c3RyYXAgdjMuMy42IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSkNCiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLg0KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkNCiAqLw0KLyogbGluZSAxOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQpoMS51bmRlcmxpbmUsIGg0LnVuZGVybGluZSB7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNiY2JjYmM7DQogICAgcGFkZGluZy1ib3R0b206IDIxcHg7DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgew0KICAgIC8qIGxpbmUgMjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC50ZXh0X2NlbnRlci1tb2JpbGUgew0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgfQ0KfQ0KDQovKiBsaW5lIDM0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5idG4tbGctaG9tZSB7DQogICAgcGFkZGluZzogMjBweCA0MHB4Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCn0NCg0KLyogbGluZSAzOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouYnRuLWluZm8taG9tZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KfQ0KICAgIC8qIGxpbmUgNDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5idG4taW5mby1ob21lOmhvdmVyIHsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSA0OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmJ0bi1pbmZvLWhvbWU6YWN0aXZlIHsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSA1NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmJ0bi1pbmZvLWhvbWU6Zm9jdXMgew0KICAgICAgICBjb2xvcjogIzAwMDsNCiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgIH0NCg0KLyogbGluZSA2NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouYnJlYWRjcnVtYiA+IGxpIGEgew0KICAgIGNvbG9yOiAjMzAyY2UxOw0KICAgIHBhZGRpbmc6IDJweCA0cHg7DQp9DQogLmJyZWFkY3J1bWIgPiBsaSBhOmhvdmVyIHsNCiAgICBjb2xvcjogIzMwMmNlMTsNCn0NCg0KLyogbGluZSA4NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoucGFnaW5hdGlvbiA+IGxpID4gYSwNCi5wYWdpbmF0aW9uID4gbGkgPiBzcGFuIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICBib3JkZXI6IDBweDsNCiAgICBtYXJnaW4tbGVmdDogMTBweDsNCiAgICB3aWR0aDogNDBweDsNCiAgICBoZWlnaHQ6IDQwcHg7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQovKiBsaW5lIDk2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5wYWdpbmF0aW9uID4gbGk6Zmlyc3QtY2hpbGQgPiBhOmhvdmVyLA0KLnBhZ2luYXRpb24gPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW46aG92ZXIgew0KICAgIGJhY2tncm91bmQ6IG5vbmU7DQp9DQoNCi8qIGxpbmUgMTAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5wYWdpbmF0aW9uID4gbGk6bGFzdC1jaGlsZCA+IGE6aG92ZXIsDQoucGFnaW5hdGlvbiA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KfQ0KDQovKiBsaW5lIDExMiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoucGFnaW5hdGlvbiA+IGxpID4gYTpob3ZlciwNCi5wYWdpbmF0aW9uID4gbGkgPiBhOmZvY3VzLA0KLnBhZ2luYXRpb24gPiBsaSA+IHNwYW46aG92ZXIsDQoucGFnaW5hdGlvbiA+IGxpID4gc3Bhbjpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCn0NCg0KLyogbGluZSAxMjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYSwNCi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGE6aG92ZXIsDQoucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhOmZvY3VzLA0KLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3BhbiwNCi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW46aG92ZXIsDQoucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuOmZvY3VzIHsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1yYWRpdXM6IDUwJTsNCglib3JkZXI6IHNvbGlkIDFweDsNCn0NCg0KLmxvZ28tY29udGFpbmVyIHsNCiAgICBoZWlnaHQ6IDUxcHg7DQogICAgd2lkdGg6IDE4N3B4Ow0KICAgIG1hcmdpbi1sZWZ0OiA5cHg7DQp9DQoNCi8qIGxpbmUgMTMyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wIHsNCiAgICBib3JkZXItd2lkdGg6IDA7DQp9DQoNCi8qIGxpbmUgMTM2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItc3RhdGljLXRvcCB7DQogICAgYm9yZGVyLXdpZHRoOiAwOw0KICAgIG1hcmdpbi1ib3R0b206IDA7DQp9DQoNCi8qIGxpbmUgMTQwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZGVmYXVsdCB7DQogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCn0NCg0KLyogbGluZSAxNDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmhvbWVsaW5rLCBhLmhvbWVsaW5rOmhvdmVyLCBhLmhvbWVsaW5rOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCi8qIGxpbmUgMTQ5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5yZWdpc3Rlci1iYXIgew0KICAgIGNsZWFyOiBib3RoOw0KfQ0KDQovKiBsaW5lIDE1MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgew0KICAgIG1pbi1oZWlnaHQ6IDY3cHg7DQp9DQogICAgLyogbGluZSAxNTYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhciAubmF2YmFyLWNvbGxhcHNlIHsNCiAgICAgICAgbWF4LWhlaWdodDogNTEwcHg7DQogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgICAgIGJvcmRlci10b3A6IG5vbmU7DQogICAgICAgIHBhZGRpbmctdG9wOiA4cHg7DQogICAgfQ0KICAgIC8qIGxpbmUgMTYzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm5hdmJhci1mb3JtIHsNCiAgICAgICAgYm9yZGVyOiBub25lOw0KICAgICAgICBtYXJnaW4tbGVmdDogMDsNCiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOw0KICAgIH0NCiAgICAgICAgLyogbGluZSAxNjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICAgICAgZm9udC1zaXplOiAxZW07DQogICAgICAgIH0NCg0KLyogbGluZSAxNzUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciAubmF2YmFyLWNvbGxhcHNlIHsNCiAgICBtYXgtaGVpZ2h0OiA1MTBweDsNCiAgICBib3gtc2hhZG93OiBub25lOw0KICAgIGJvcmRlci10b3A6IG5vbmU7DQp9DQoNCi8qIGxpbmUgMTgxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXIgLm5hdmJhci1mb3JtIHsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgbWFyZ2luLWxlZnQ6IDA7DQogICAgbWFyZ2luLXJpZ2h0OiAwOw0KfQ0KICAgIC8qIGxpbmUgMTg2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sIHsNCiAgICAgICAgZm9udC1zaXplOiAxZW07DQogICAgfQ0KDQpAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHsNCiAgICAvKiBsaW5lIDE5MSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmZpeC1uYXZiYXIgLnJlZ2lzdGVyLWJhciB7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgfQ0KfQ0KDQovKiBsaW5lIDE5NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgPiAuY29udGFpbmVyID4gLnJvdyA+IGRpdiB7DQogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsNCn0NCg0KLyogbGluZSAyMDIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciA+IC5jb250YWluZXIgPiAucm93ID4gZGl2IHsNCiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50Ow0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOw0KfQ0KDQovKiBsaW5lIDIxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm1lbnUtYmFyID4gLm5hdmJhci1uYXYgPiBsaSA+IGEgew0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgU2VtaWJvbGQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMWVtOw0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQovKiBsaW5lIDIxOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWZpeGVkLXRvcC5uYXZiYXIgLm1lbnUtYmFyID4gLm5hdmJhci1uYXYgPiAuZGl2aWRlci12ZXJ0aWNhbCB7DQogICAgaGVpZ2h0OiAyMXB4Ow0KICAgIG1hcmdpbjogMCA0cHg7DQogICAgbWFyZ2luLXRvcDogMTQuNXB4Ow0KICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNmZmY7DQogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNjY2Ow0KfQ0KDQovKiBsaW5lIDIzMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyIC5tZW51LWJhciA+IC5uYXZiYXItbmF2ID4gbGkgPiBhIHsNCiAgICBmb250LWZhbWlseTogIlNlZ29lIFVJIFNlbWlib2xkIiwgIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDFlbTsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KLyogbGluZSAyMzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciAubWVudS1iYXIgPiAubmF2YmFyLW5hdiA+IC5kaXZpZGVyLXZlcnRpY2FsIHsNCiAgICBoZWlnaHQ6IDIxcHg7DQogICAgbWFyZ2luOiAwIDRweDsNCiAgICBtYXJnaW4tdG9wOiAxNC41cHg7DQogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2ZmZjsNCiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICM2NjY7DQp9DQoNCi8qIGxpbmUgMjQ3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItYnJhbmQgew0KICAgIGZvbnQtc2l6ZTogMi4xMWVtOw0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgTGlnaHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGNvbG9yOiAjMjMyMjIyOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCkgew0KICAgIC8qIGxpbmUgMjQ3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWJyYW5kIHsNCiAgICAgICAgcG9zaXRpb246IGluaXRpYWw7DQogICAgICAgIGhlaWdodDogNDJweDsNCiAgICB9DQp9DQoNCi8qIGxpbmUgMjU5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaGVhZGVyIHsNCiAgICBwYWRkaW5nLXRvcDogOHB4Ow0KfQ0KDQovKiBsaW5lIDI2NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1icmFuZCB7DQogICAgZm9udC1zaXplOiAyLjExZW07DQogICAgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSBMaWdodCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgY29sb3I6ICMyMzIyMjI7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogMTIwMHB4KSB7DQogICAgLyogbGluZSAyNjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWJyYW5kIHsNCiAgICAgICAgcG9zaXRpb246IGluaXRpYWw7DQogICAgICAgIGhlaWdodDogNDJweDsNCiAgICB9DQp9DQoNCi8qIGxpbmUgMjg0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItZml4ZWQtdG9wLm5hdmJhci1pbnZlcnNlIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjMyMjIyOw0KICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQp9DQogICAgLyogbGluZSAyODgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSAyOTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhci1pbnZlcnNlIC5kaXZpZGVyLXZlcnRpY2FsIHsNCiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmOw0KICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogIzExMTsNCiAgICB9DQoNCi8qIGxpbmUgMjk2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggNXB4IHJnYmEoNTcsIDYzLCA3MiwgMC4zKTsNCiAgICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDVweCByZ2JhKDU3LCA2MywgNzIsIDAuMyk7DQogICAgYm94LXNoYWRvdzogMCAzcHggNXB4IHJnYmEoNTcsIDYzLCA3MiwgMC4zKTsNCn0NCiAgICAvKiBsaW5lIDMwMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICB9DQogICAgLyogbGluZSAzMDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAuZGl2aWRlci12ZXJ0aWNhbCB7DQogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2ZmZjsNCiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICMxMTE7DQogICAgfQ0KDQovKiBsaW5lIDMxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEgew0KICAgIGNvbG9yOiAjMDAwOw0KfQ0KICAgIC8qIGxpbmUgMzE0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMkNFMTsNCiAgICAgICAgLypib3JkZXItYm90dG9tOiA0cHggc29saWQgIzJGNUZFRjsNCiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsqLw0KICAgIH0NCiAgICAvKiBsaW5lIDMyMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHsNCiAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMDJDRTE7DQogICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjayAhaW1wb3J0YW50Ow0KICAgICAgICBvdXRsaW5lOiAxcHggZGFzaGVkICNGRkZGRkY7DQogICAgfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogMTE5OXB4KSB7DQogICAgLyogbGluZSAzMzEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyY2UxOw0KICAgICAgICAvKmJvcmRlci1ib3R0b206IDRweCBzb2xpZCAjMkY1RkVGOw0KICAgIHBhZGRpbmctYm90dG9tOiA2cHg7Ki8NCiAgICB9DQp9DQoNCi8qIGxpbmUgMzQyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5tZW51LWJhciAuc2hvcHBpbmdfbGluayB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KICAgIC8qIGxpbmUgMzQ1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubWVudS1iYXIgLnNob3BwaW5nX2xpbmsgLmNhcnRfYW1vdW50IHsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsNCiAgICAgICAgaGVpZ2h0OiAxN3B4Ow0KICAgICAgICB3aWR0aDogMTdweDsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBib3R0b206IDZweDsNCiAgICAgICAgcmlnaHQ6IC02cHg7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWY7DQogICAgICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyOw0KICAgICAgICBsaW5lLWhlaWdodDogMTdweDsNCiAgICAgICAgZm9udC1zaXplOiA5cHg7DQogICAgICAgIHBhZGRpbmctbGVmdDogMS45cHg7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgIH0NCiAgICAgICAgLyogbGluZSAzNTksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubWVudS1iYXIgLnNob3BwaW5nX2xpbmsgLmNhcnRfYW1vdW50OmhvdmVyIHsNCiAgICAgICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICB9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiAxMTk5cHgpIHsNCiAgICAvKiBsaW5lIDM2NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSAubmF2ID4gLmRpdmlkZXItdmVydGljYWwgew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgew0KICAgIC8qIGxpbmUgMzcyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1jb2xsYXBzZSAubmF2ID4gLmRpdmlkZXItdmVydGljYWwgew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7DQogICAgLyogbGluZSAzNzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZml4ZWQtdG9wLm5hdmJhciA+IC5jb250YWluZXIgPiAucm93ID4gZGl2IHsNCiAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgfQ0KICAgIC8qIGxpbmUgMzgxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLWhlYWRlciB7DQogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgew0KICAgIC8qIGxpbmUgMzg2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyID4gLmNvbnRhaW5lciA+IC5yb3cgPiBkaXYgew0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICB9DQogICAgLyogbGluZSAzOTAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItaGVhZGVyIHsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIH0NCn0NCg0KLyogbGluZSAzOTcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnBhbmVsIHsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMHB4IDBweCB0cmFuc3BhcmVudDsNCiAgICBib3gtc2hhZG93OiAwIDBweCAwcHggdHJhbnNwYXJlbnQ7DQp9DQoNCi8qIGxpbmUgNDA0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5wYW5lbC1ncm91cCB7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCn0NCiAgICAvKiBsaW5lIDQwNywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnBhbmVsLWdyb3VwLmJvcmRlci1ib3R0b20gew0KICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDg0cHg7DQogICAgfQ0KICAgIC8qIGxpbmUgNDEyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAucGFuZWwtZ3JvdXAgLnBhbmVsIHsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMHB4Ow0KICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDQxNywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwgKyAucGFuZWwgew0KICAgICAgICAgICAgbWFyZ2luLXRvcDogNXB4Ow0KICAgICAgICB9DQogICAgLyogbGluZSA0MjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyB7DQogICAgICAgIGJvcmRlci1ib3R0b206IDA7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDQyNiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyAucGFuZWwtdGl0bGUgYSB7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgIH0NCiAgICAgICAgICAgIC8qIGxpbmUgNDI5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyAucGFuZWwtdGl0bGUgYTpob3ZlciB7DQogICAgICAgICAgICAgICAgY29sb3I6ICMyZjVmZWY7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDQzMywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgICAgICAucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcgLnBhbmVsLXRpdGxlIGE6YmVmb3JlIHsNCiAgICAgICAgICAgICAgICBjb250ZW50OiAnICc7DQogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICAgICAgd2lkdGg6IDIycHg7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMnB4Ow0KICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MnB4IC01cHg7DQogICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMC41cHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDQ0NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgICAgICAucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcgLnBhbmVsLXRpdGxlIGEuY29sbGFwc2VkOmJlZm9yZSB7DQogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTVweCAtMTI2cHg7DQogICAgICAgICAgICB9DQogICAgICAgIC8qIGxpbmUgNDUyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHksDQogICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHsNCiAgICAgICAgICAgIGJvcmRlci10b3A6IG5vbmU7DQogICAgICAgIH0NCiAgICAvKiBsaW5lIDQ1NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXIgew0KICAgICAgICBib3JkZXItdG9wOiAwOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA0NjAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSAucGFuZWwtYm9keSB7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lOw0KICAgICAgICB9DQogICAgLyogbGluZSA0NjUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wYW5lbC1ncm91cCAucGFuZWwtZGVmYXVsdCB7DQogICAgICAgIGJvcmRlci1jb2xvcjogbm9uZTsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgNiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC9taXhpbnMvcGFuZWxzLnNjc3MgKi8NCiAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgew0KICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICAgICAgLyogbGluZSAxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC9taXhpbnMvcGFuZWxzLnNjc3MgKi8NCiAgICAgICAgICAgIC5wYW5lbC1ncm91cCAucGFuZWwtZGVmYXVsdCA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkgew0KICAgICAgICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6IG5vbmU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDE0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL21peGlucy9wYW5lbHMuc2NzcyAqLw0KICAgICAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHsNCiAgICAgICAgICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgLyogbGluZSAyMCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC9taXhpbnMvcGFuZWxzLnNjc3MgKi8NCiAgICAgICAgLnBhbmVsLWdyb3VwIC5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG5vbmU7DQogICAgICAgIH0NCg0KLyogbGluZSA0NzMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KYm9keSB7DQogICAgcGFkZGluZy10b3A6IDBweDsNCiAgICAvKiBCZWxvdyBjaGFuZ2VzIGluIGJvZHkgdGFnIHRvIHN1cHBvcnQgRGVmYXVsdFBvcnRhbFRlbXBsYXRlIGluIG1ha2VyKi8NCiAgICBtYXJnaW46IDA7DQogICAgaGVpZ2h0OiAxMDAlOw0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsNCiAgICAvKiBsaW5lIDQ3MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgYm9keSB7DQogICAgICAgIHBhZGRpbmctdG9wOiAwcHg7DQogICAgfQ0KfQ0KDQovKiBsaW5lIDQ4MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubGF5ZXJfZG93biB7DQogICAgaGVpZ2h0OiA1MHB4Ow0KICAgIGJhY2tncm91bmQ6IHVybCgibGF5ZXJfZG93bi5wbmciKSBuby1yZXBlYXQgYm90dG9tIGNlbnRlcjsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgYm90dG9tOiAwOw0KICAgIHotaW5kZXg6IDkwMDsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KLyogbGluZSA0OTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmxheWVyX3VwIHsNCiAgICBoZWlnaHQ6IDQwcHg7DQogICAgYmFja2dyb3VuZDogdXJsKCJsYXllcl91cC5wbmciKSBuby1yZXBlYXQgYm90dG9tIGNlbnRlcjsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgei1pbmRleDogMjA7DQp9DQoNCi8qIGxpbmUgNDk4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLW1hcmdpbiB7DQogICAgbWFyZ2luOiAyMXB4IDA7DQp9DQoNCi8qIGxpbmUgNTEzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWlubGluZS1zZWFyY2ggew0KICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQp9DQogICAgLyogbGluZSA1MTgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiB7DQogICAgICAgIG1hcmdpbi10b3A6IDEwMHB4Ow0KICAgIH0NCiAgICAgICAgLyogbGluZSA1MjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuc2VjdGlvbi1pbmxpbmUtc2VhcmNoIC5yb3cgPiBkaXYgaDEgew0KICAgICAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDUyMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24taW5saW5lLXNlYXJjaCAucm93ID4gZGl2IGgxIHsNCiAgICAgICAgZm9udC1zaXplOiAxNnZ3Ow0KICAgIH0NCn0NCi8qIGxpbmUgNTMxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAgLmlucHV0LWdyb3VwIHsNCiAgICBtYXJnaW4tcmlnaHQ6IDIxcHg7DQp9DQogICAgLyogbGluZSA1MzQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbiB7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsNCiAgICB9DQogICAgLyogbGluZSA1MzksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICBoZWlnaHQ6IDYwcHg7DQogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOw0KICAgICAgICBib3gtc2hhZG93OiBub25lOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA1NDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuc2VjdGlvbi1pbmxpbmUtc2VhcmNoIC5yb3cgPiBkaXYgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZvY3VzIHsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICNjY2M7DQogICAgICAgIH0NCg0KLyogbGluZSA1NTcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLndyYXBwZXIgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIG1hcmdpbjogMCBhdXRvOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAtbW96LXRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZS1vdXQ7DQogICAgLW8tdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlLW91dDsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZS1vdXQ7DQogICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlLW91dDsNCn0NCg0KICAgIC8qIGxpbmUgNTY3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAud3JhcHBlciAuY29udGFpbmVkIHsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICBoZWlnaHQ6IDQwMHB4Ow0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlOw0KICAgIH0NCg0KICAgICAgICAvKiBsaW5lIDU3MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC53cmFwcGVyIC5jb250YWluZWQgPiBzdmcgew0KICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEwMHB4Ow0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgIH0NCg0KLyogbGluZSA1NzksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmNvbnRhaW5lZCAucm93IHsNCiAgICBtYXJnaW4tdG9wOiA4MHB4Ow0KfQ0KDQovKiBsaW5lIDU4MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQpmb290ZXIgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBjb2xvcjogIzIyMjIxRTsNCn0NCiAgICAvKiBsaW5lIDU4NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgZm9vdGVyIC5mb290ZXItdG9wIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1pbi1oZWlnaHQ6IDEzMHB4Ow0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjMyMjIyOw0KICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA1OTQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICBmb290ZXIgLmZvb3Rlci10b3AgaDMsIGZvb3RlciAuZm9vdGVyLXRvcCBoNCB7DQogICAgICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgfQ0KICAgICAgICAvKiBsaW5lIDU5OCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIGZvb3RlciAuZm9vdGVyLXRvcCAubGlzdC1zb2NpYWwtbGlua3Mgew0KICAgICAgICAgICAgbWFyZ2luLXRvcDogMjVweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEyLjVweDsNCiAgICAgICAgfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5OTFweCkgew0KICAgIC8qIGxpbmUgNjA1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICBmb290ZXIgLmZvb3Rlci10b3AgaDMsDQogICAgZm9vdGVyIC5mb290ZXItdG9wIC5saXN0LXNvY2lhbC1saW5rcyB7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB9DQp9DQovKiBsaW5lIDYxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQpmb290ZXIgLmZvb3Rlci1ib3R0b20gew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIG1pbi1oZWlnaHQ6IDY4cHg7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0QyRDJDRTsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KfQ0KICAgIC8qIGxpbmUgNjE5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICBmb290ZXIgLmZvb3Rlci1ib3R0b20gcCB7DQogICAgICAgIG1hcmdpbjogMDsNCiAgICB9DQogICAgLyogbGluZSA2MjMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIGZvb3RlciAuZm9vdGVyLWJvdHRvbSBoNCB7DQogICAgICAgIG1hcmdpbi10b3A6IDA7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgIH0NCiAgICAvKiBsaW5lIDYyOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgZm9vdGVyIC5mb290ZXItYm90dG9tIHVsIHsNCiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOw0KICAgICAgICBtYXJnaW46IDA7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDYzOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIGZvb3RlciAuZm9vdGVyLWJvdHRvbSB1bCBsaSBhLA0KICAgICAgICBmb290ZXIgLmZvb3Rlci1ib3R0b20gdWwgbGkgYTpob3ZlciwNCiAgICAgICAgZm9vdGVyIC5mb290ZXItYm90dG9tIHVsIGxpIGE6Zm9jdXMsDQogICAgICAgIGZvb3RlciAuZm9vdGVyLWJvdHRvbSB1bCBsaSBhOmFjdGl2ZSwNCiAgICAgICAgZm9vdGVyIC5mb290ZXItYm90dG9tIHVsIGxpIGEuYWN0aXZlIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICAgICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICB9DQoNCi8qIGxpbmUgNjQ4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5saXN0LXNvY2lhbC1saW5rcyB7DQogICAgbGlzdC1zdHlsZS10eXBlOiBub25lOw0KICAgIHBhZGRpbmctbGVmdDogMDsNCn0NCiAgICAvKiBsaW5lIDY1MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmxpc3Qtc29jaWFsLWxpbmtzIGxpIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBtYXJnaW46IDAgMTBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgNjYxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLmxpc3Qtc29jaWFsLWxpbmtzIGxpIGEsDQogICAgICAgIC5saXN0LXNvY2lhbC1saW5rcyBsaSBhOmhvdmVyLA0KICAgICAgICAubGlzdC1zb2NpYWwtbGlua3MgbGkgYTpmb2N1cywNCiAgICAgICAgLmxpc3Qtc29jaWFsLWxpbmtzIGxpIGE6YWN0aXZlLA0KICAgICAgICAubGlzdC1zb2NpYWwtbGlua3MgbGkgYS5hY3RpdmUgew0KICAgICAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTkzcHgpIHsNCiAgICAvKiBsaW5lIDY2OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tbGFuZGluZyBoMSB7DQogICAgICAgIGZvbnQtc2l6ZTogNjVweDsNCiAgICB9DQogICAgLyogbGluZSA2NzMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWxhbmRpbmcgaDIgew0KICAgICAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOw0KICAgICAgICBtYXJnaW4tbGVmdDogLTNweDsNCiAgICB9DQp9DQoNCi8qIGxpbmUgNjc5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi51c2VyLWljb24gew0KICAgIHdpZHRoOiAxNnB4Ow0KICAgIGhlaWdodDogMTZweDsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgbWFyZ2luLXJpZ2h0OiA3cHg7DQp9DQoNCi8qIGxpbmUgNjg3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5hcnRpY2xlLXRpdGxlLWNvbnRhaW5lciB7DQogICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNiY2JjYmM7DQogICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNiY2JjYmM7DQogICAgcGFkZGluZy1sZWZ0OiAxNXB4Ow0KICAgIHBhZGRpbmctdG9wOiAyOHB4Ow0KICAgIHBhZGRpbmctYm90dG9tOiAyOHB4Ow0KfQ0KDQovKiBsaW5lIDY5NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouYXJ0aWNsZS10aXRsZSB7DQogICAgbWFyZ2luLWxlZnQ6IC0zNXB4Ow0KfQ0KICAgIC8qIGxpbmUgNjk4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuYXJ0aWNsZS10aXRsZSA+IHNwYW4gew0KICAgICAgICBtYXJnaW4tbGVmdDogM3B4Ow0KICAgIH0NCiAgICAgICAgLyogbGluZSA3MDEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuYXJ0aWNsZS10aXRsZSA+IHNwYW4gLmFydGljbGUtYXV0aG9yIHsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgICAgICAgICAgY29sb3I6ICMyZjVmZWY7DQogICAgICAgIH0NCg0KLyogbGluZSA3MDgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmFydGljbGUtY29udGVudCB7DQogICAgbWFyZ2luLXRvcDogMTVweDsNCn0NCiAgICAvKiBsaW5lIDcxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmFydGljbGUtY29udGVudCA+IHAgew0KICAgICAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTkzcHgpIHsNCiAgICAvKiBsaW5lIDcxNywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmFydGljbGUtdGl0bGUgew0KICAgICAgICBtYXJnaW4tbGVmdDogMDsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIH0NCiAgICAvKiBsaW5lIDcyMiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmFydGljbGUtYXV0aG9yIHsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIH0NCn0NCg0KLyogbGluZSA3MjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC5oZWFkZXItc2VhcmNoIHsNCiAgICBwYWRkaW5nLXRvcDogNDBweDsNCiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDsNCiAgICBtYXJnaW4tYm90dG9tOiA0MHB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7DQp9DQogICAgLyogbGluZSA3MzQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLXNlYXJjaCAuaGVhZGVyLXNlYXJjaCBpbWcgew0KICAgICAgICBtYXgtd2lkdGg6IDM1MHB4Ow0KICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDczOCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tc2VhcmNoIC5oZWFkZXItc2VhcmNoIGgxIHsNCiAgICAgICAgZm9udC1zaXplOiAxM3Z3Ow0KICAgIH0NCn0NCg0KLyogbGluZSA3NDUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC50aXRsZS1zZWFyY2ggew0KICAgIGZvbnQtc2l6ZTogMjZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KLyogbGluZSA3NTAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIGlucHV0IHsNCiAgICBib3JkZXItc3R5bGU6IG5vbmU7DQogICAgcGFkZGluZy1sZWZ0OiAxMHB4Ow0KICAgIGhlaWdodDogNjBweDsNCn0NCg0KLyogbGluZSA3NTgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC5tZWRpYSAubWVkaWEtbGVmdCA+IGltZyB7DQogICAgbWF4LXdpZHRoOiAyNDBweDsNCn0NCg0KLyogbGluZSA3NjMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tc2VhcmNoIC5tZWRpYSAubWVkaWEtYm9keSB7DQogICAgcGFkZGluZy1sZWZ0OiAyMHB4Ow0KfQ0KICAgIC8qIGxpbmUgNzY2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1zZWFyY2ggLm1lZGlhIC5tZWRpYS1ib2R5ID4gYSB7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgfQ0KICAgIC8qIGxpbmUgNzcxLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1zZWFyY2ggLm1lZGlhIC5tZWRpYS1ib2R5IC5tZWRpYS1oZWFkaW5nIHsNCiAgICAgICAgbWFyZ2luLXRvcDogNXB4Ow0KICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgIH0NCg0KLyogbGluZSA3ODAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLmNhcmRzLWNvbnRhaW5lciB7DQogICAgbWFyZ2luLXRvcDogODRweDsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5OTFweCkgew0KICAgIC8qIGxpbmUgNzgwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuY2FyZHMtY29udGFpbmVyIHsNCiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICB9DQp9DQoNCi8qIGxpbmUgNzk1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5jYXJvdXNlbC1jdXN0b20gLmNhcm91c2VsLWlubmVyID4gLml0ZW0gew0KICAgIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgICBtYXJnaW4tbGVmdDogYXV0bzsNCn0NCiAgICAvKiBsaW5lIDc5OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLmNhcm91c2VsLWN1c3RvbSAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSAuY2Fyb3VzZWwtY2FwdGlvbiB7DQogICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgIHRvcDogNSU7DQogICAgICAgIGxlZnQ6IDUlOw0KICAgICAgICByaWdodDogNSU7DQogICAgfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgew0KICAgIC8qIGxpbmUgNzk5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAuY2Fyb3VzZWwtY3VzdG9tIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtIC5jYXJvdXNlbC1jYXB0aW9uIHsNCiAgICAgICAgbGVmdDogNSU7DQogICAgICAgIHJpZ2h0OiA1JTsNCiAgICB9DQp9DQoNCi8qIGxpbmUgODE1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi5jYXJvdXNlbC1jdXN0b20gLmNhcm91c2VsLWluZGljYXRvcnMgbGkgew0KICAgIGJvcmRlci1jb2xvcjogIzIzMjIyMjsNCn0NCg0KLyogbGluZSA4MjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnRhYmxlLnRhYmxlLWZvcm1zIHRkIHsNCiAgICBwYWRkaW5nOiAxNXB4IDhweDsNCn0NCg0KLyogbGluZSA4MzAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KLnRhYmxlLnRhYmxlLWZvcm1zIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHsNCiAgICBib3JkZXItdG9wOiBub25lOw0KfQ0KDQovKiBsaW5lIDgzOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoucG9sbCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsNCiAgICBib3JkZXItdG9wOiA3cHggc29saWQgIzBiODBkMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgcGFkZGluZy1sZWZ0OiAxNXB4Ow0KICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQp9DQogICAgLyogbGluZSA4NDYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wb2xsIC5wb2xsLWhlYWRlciB7DQogICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7DQogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgODU2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtaGVhZGVyIGg0IHsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB9DQogICAgLyogbGluZSA4NjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wb2xsIC5wb2xsLWNvbnRlbnQgew0KICAgICAgICBwYWRkaW5nLXRvcDogMjVweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgODY1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtY29udGVudCBwIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgfQ0KICAgICAgICAvKiBsaW5lIDg2OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgIC5wb2xsIC5wb2xsLWNvbnRlbnQgZm9ybSB7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIC8qIGxpbmUgODc0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtY29udGVudCAucG9sbC1idXR0b25zIHsNCiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAyMHB4Ow0KICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxMXB4Ow0KICAgICAgICB9DQogICAgICAgICAgICAvKiBsaW5lIDg3OCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgICAgICAgICAucG9sbCAucG9sbC1jb250ZW50IC5wb2xsLWJ1dHRvbnMgLmJ0biB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDE0cHg7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLyogbGluZSA4ODMsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAgICAgLnBvbGwgLnBvbGwtY29udGVudCAucG9sbC1idXR0b25zIC5idG4tZGVmYXVsdCB7DQogICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8qIGxpbmUgODg3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgICAgICAgICAucG9sbCAucG9sbC1jb250ZW50IC5wb2xsLWJ1dHRvbnMgLmJ0bi1kZWZhdWx0OmhvdmVyIHsNCiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAgICAgICAgICAgICB9DQogICAgLyogbGluZSA4OTUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5wb2xsIC5wb2xsLXRhZ3Mgew0KICAgICAgICBwYWRkaW5nLXRvcDogMTBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgODk4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtdGFncyBoNCB7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JjYmNiYzsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIC8qIGxpbmUgOTAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnBvbGwgLnBvbGwtdGFncyAudGFnIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMWUxZTE7DQogICAgICAgICAgICBjb2xvcjogIzIzMjIyMjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxNHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA1cHggMHB4Ow0KICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICAgICAgfQ0KDQovKiBsaW5lIDkxNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQoubmF2LXNpZGViYXIgew0KICAgIHBhZGRpbmctbGVmdDogMjBweDsNCiAgICBtYXJnaW4tdG9wOiAyMHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQp9DQogICAgLyogbGluZSA5MjIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXYtc2lkZWJhciAubmF2ID4gbGkgPiBhIHsNCiAgICAgICAgcGFkZGluZzogNHB4IDIwcHg7DQogICAgICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjZWVlZWVlOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA5MjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiA+IGxpID4gYTpob3ZlciwNCiAgICAgICAgLm5hdi1zaWRlYmFyIC5uYXYgPiBsaSA+IGE6Zm9jdXMgew0KICAgICAgICAgICAgY29sb3I6ICMyMzIyMjI7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM1NTU1NTU7DQogICAgICAgIH0NCiAgICAgICAgLyogbGluZSA5MzUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiA+IGxpID4gYTpiZWZvcmUgew0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgdG9wOiAxcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJzsNCiAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMTsNCiAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICJcZTI1MCI7DQogICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDdweDsNCiAgICAgICAgfQ0KICAgIC8qIGxpbmUgOTUyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiA+IC5hY3RpdmUgPiBhIHsNCiAgICAgICAgY29sb3I6ICMyMzIyMjI7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM1NTU1NTU7DQogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIH0NCiAgICAgICAgLyogbGluZSA5NTksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiA+IC5hY3RpdmUgPiBhOmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAiXGUyNTIiOw0KICAgICAgICB9DQogICAgLyogbGluZSA5NjYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXYtc2lkZWJhciAubmF2ID4gLmFjdGl2ZTpob3ZlciA+IGEsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgPiAuYWN0aXZlZm9jdXMgPiBhIHsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgfQ0KICAgIC8qIGxpbmUgOTcyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiA+IC5hY3RpdmUgPiB1bC5uYXYgew0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICB9DQogICAgLyogbGluZSA5NzksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXYtc2lkZWJhciAubmF2IHVsLm5hdiB7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgfQ0KICAgIC8qIGxpbmUgOTg2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2ID4gbGkgPiBhIHsNCiAgICAgICAgcGFkZGluZy10b3A6IDFweDsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDFweDsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMHB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDk5NiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiA+IC5hY3RpdmUsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiA+IC5hY3RpdmU6aG92ZXIsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiA+IC5hY3RpdmU6Zm9jdXMgew0KICAgICAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICB9DQogICAgLyogbGluZSAxMDAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2IC5uYXYgPiBsaSA+IGEgew0KICAgICAgICBwYWRkaW5nLXRvcDogMXB4Ow0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDEwMDgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2IC5uYXYgPiBsaSA+IGE6YmVmb3JlIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICIiOw0KICAgICAgICB9DQogICAgLyogbGluZSAxMDE3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAubmF2LXNpZGViYXIgLm5hdiAubmF2IC5uYXYgPiAuYWN0aXZlLA0KICAgIC5uYXYtc2lkZWJhciAubmF2IC5uYXYgLm5hdiA+IC5hY3RpdmU6aG92ZXIsDQogICAgLm5hdi1zaWRlYmFyIC5uYXYgLm5hdiAubmF2ID4gLmFjdGl2ZTpmb2N1cyB7DQogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIH0NCg0KLyogbGluZSAxMDI4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiNuYXZiYXIgLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IDhweDsNCn0NCg0KLyogbGluZSAxMDMyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiNuYXZiYXIgLmRyb3Bkb3duLXNlYXJjaCB7DQogICAgcGFkZGluZy10b3A6IDA7DQogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyOiAwOw0KICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgbWFyZ2luOiA5cHg7DQp9DQogICAgLyogbGluZSAxMDM5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCiAgICAjbmF2YmFyIC5kcm9wZG93bi1zZWFyY2ggI3Egew0KICAgICAgICBtaW4td2lkdGg6IDIwMHB4Ow0KICAgIH0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgew0KICAgIC8qIGxpbmUgMTA0NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgI25hdmJhciAuZHJvcGRvd24tc2VhcmNoIC5pbnB1dC1ncm91cC1idG4gew0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KICAgIH0NCiAgICAvKiBsaW5lIDEwNDcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgICNuYXZiYXIgLmRyb3Bkb3duLXNlYXJjaCAjc2VhcmNoLWZpbHRlciB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7DQogICAgfQ0KICAgIC8qIGxpbmUgMTA1MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQogICAgI25hdmJhciAuZHJvcGRvd24tc2VhcmNoLmRyb3Bkb3duLW1lbnUgPiBsaTpob3ZlciwgI25hdmJhciAuZHJvcGRvd24tc2VhcmNoIC5kcm9wZG93bi1tZW51ID4gbGk6aG92ZXIgew0KICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIH0NCn0NCg0KLyogbGluZSAxMDYwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vdGhlbWUvYm9vdHN0cmFwL3RoZW1lLnNjc3MgKi8NCi50YWJzLWhlYWRlciB7DQogICAgcGFkZGluZy1ib3R0b206IDkuNXB4Ow0KICAgIG1hcmdpbjogNDJweCAwIDIxcHg7DQp9DQoNCi8qIGxpbmUgMTA3MywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL3RoZW1lL2Jvb3RzdHJhcC90aGVtZS5zY3NzICovDQouaGVscC1ibG9jay5lcnJvciwNCmxhYmVsLmNvbnRyb2wtbGFiZWwucmVxdWlyZWQ6YmVmb3JlLA0KLmNybUVudGl0eUZvcm1WaWV3IC5jZWxsIGRpdi5pbmZvLnJlcXVpcmVkIGxhYmVsOmFmdGVyLA0KLmNybUVudGl0eUZvcm1WaWV3IC5jZWxsIGRpdi5pbmZvIGRpdi52YWxpZGF0b3JzLA0KLmNybUVudGl0eUZvcm1WaWV3IC52YWxpZGF0b3ItdGV4dCwNCi5jcm1FbnRpdHlGb3JtVmlldyAucmFuay1vcmRlci1jZWxsIC52YWxpZGF0b3ItdGV4dCwNCi5jcm1FbnRpdHlGb3JtVmlldyAuY29uc3RhbnQtc3VtLWNlbGwgLnZhbGlkYXRvci10ZXh0LA0KLmNybUVudGl0eUZvcm1WaWV3IC5zdGFjay1yYW5rLWNlbGwgLnZhbGlkYXRvci10ZXh0IHsNCiAgICBjb2xvcjogI2E5NDQ0MjsNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHsNCiAgICAvKiBsaW5lIDEwNzgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODg4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDEwODIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi90aGVtZS9ib290c3RyYXAvdGhlbWUuc2NzcyAqLw0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIH0NCn0NCg0KLyogbGluZSAxMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQoucHItY29sb3Igew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KfQ0KDQovKiBsaW5lIDE2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5ibHVlX2JvcmRlciB7DQogICAgcGFkZGluZy1ib3R0b206IDEwcHg7DQogICAgYm9yZGVyLWJvdHRvbTogN3B4IHNvbGlkICMwYjgwZDA7DQp9DQoNCi8qIGxpbmUgMjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnBhZ2Vfc2VjdGlvbiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQogICAgY29sb3I6ICMwMDA7DQp9DQogICAgLyogbGluZSAyNiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnBhZ2Vfc2VjdGlvbiAucm93IHsNCiAgICAgICAgcGFkZGluZy10b3A6IDQwcHg7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgMzEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgICAgICAucGFnZV9zZWN0aW9uIC5yb3cuc2lkZWJhci1ob21lIHsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwOw0KICAgICAgICB9DQogICAgLyogbGluZSAzNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnBhZ2Vfc2VjdGlvbiBoMSB7DQogICAgICAgIGZvbnQtc2l6ZTogMzJweDsNCiAgICB9DQogICAgLyogbGluZSAzOSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnBhZ2Vfc2VjdGlvbiBoMiB7DQogICAgICAgIGNvbG9yOiAjNjY2NjY2Ow0KICAgICAgICBmb250LXNpemU6IDQwcHg7DQogICAgfQ0KICAgIC8qIGxpbmUgNDQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5wYWdlX3NlY3Rpb24gaDMgew0KICAgICAgICBmb250LXNpemU6IDY2cHg7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgTGlnaHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIH0NCiAgICAvKiBsaW5lIDQ5LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAucGFnZV9zZWN0aW9uIHAgew0KICAgICAgICBwYWRkaW5nLXRvcDogNXB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDU0LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAucGFnZV9zZWN0aW9uIC5idG4gew0KICAgICAgICBtYXJnaW4tdG9wOiA1MHB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDU4LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAucGFnZV9zZWN0aW9uIC5mb3JtLXNlYXJjaCAuYnRuIHsNCiAgICAgICAgcGFkZGluZzogNHB4IDEycHg7DQogICAgICAgIG1hcmdpbi10b3A6IDA7DQogICAgfQ0KICAgIC8qIGxpbmUgNjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5wYWdlX3NlY3Rpb24gLnNlY3Rpb24tbGFuZGluZy1oZWFkaW5nIHAsDQogICAgLnBhZ2Vfc2VjdGlvbiAuc2VjdGlvbi1sYW5kaW5nLXN1Yi1oZWFkaW5nIHAgew0KICAgICAgICBib3JkZXItdG9wOiAwOw0KICAgIH0NCg0KLyogbGluZSA3MSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZm9ybS1zZWFyY2ggLmJ0biB7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCn0NCg0KLyogbGluZSA3NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZm9ybS1zZWFyY2ggLmJ0bi1kZWZhdWx0OmhvdmVyIHsNCiAgICBib3JkZXItY29sb3I6ICNjY2M7DQp9DQoNCi8qIGxpbmUgNzgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmZvcm0tc2VhcmNoIC5kcm9wZG93bi1zdWJtZW51IHsNCiAgICByaWdodDogLTJweDsNCn0NCg0KLyogbGluZSA4MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZm9ybS1zZWFyY2ggLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IDBweDsNCn0NCg0KLyogbGluZSA4NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouZHJvcGRvd24tc2VhcmNoLmRyb3Bkb3duLW1lbnUgPiBsaTpob3ZlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQp9DQoNCi8qIGxpbmUgOTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KI25hdmJhciAuZm9ybS1zZWFyY2ggLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IDBweDsNCn0NCg0KLyogbGluZSA5NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1kaWFnb25hbC1sZWZ0IHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICAtbXMtdHJhbnNmb3JtOiBza2V3KDBkZWcsIC0xLjNkZWcpOw0KICAgIHRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIG1hcmdpbi10b3A6IC02MHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IC0yMHB4Ow0KfQ0KICAgIC8qIGxpbmUgMTAzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kaWFnb25hbC1sZWZ0IC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQtY29udGVudCB7DQogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgICAgIC1tcy10cmFuc2Zvcm06IHNrZXcoMGRlZywgMS4zZGVnKTsNCiAgICAgICAgdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQogICAgICAgIG1hcmdpbi10b3A6IC03MHB4Ow0KICAgIH0NCiAgICAgICAgLyogbGluZSAxMTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuc2VjdGlvbi1kaWFnb25hbC1sZWZ0IC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQtY29udGVudDpiZWZvcmUgew0KICAgICAgICAgICAgY29udGVudDogIiI7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBvcGFjaXR5OiAuMjsNCiAgICAgICAgICAgIHotaW5kZXg6IC0xOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICAgICAgfQ0KDQovKiBsaW5lIDEyNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1kaWFnb25hbC1yaWdodCB7DQogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNrZXcoMGRlZywgMS4zZGVnKTsNCiAgICAtbXMtdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgdHJhbnNmb3JtOiBza2V3KDBkZWcsIDEuM2RlZyk7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBtYXJnaW4tdG9wOiA2MHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IC0yMHB4Ow0KfQ0KICAgIC8qIGxpbmUgMTMzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodC5ob21lLXNlY3Rpb24gew0KICAgICAgICBtYXJnaW4tdG9wOiAtNjBweDsNCiAgICB9DQogICAgLyogbGluZSAxMzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWRpYWdvbmFsLXJpZ2h0IC5zZWN0aW9uLWRpYWdvbmFsLXJpZ2h0LWNvbnRlbnQgew0KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICAgICAgLW1zLXRyYW5zZm9ybTogc2tldygwZGVnLCAtMS4zZGVnKTsNCiAgICAgICAgdHJhbnNmb3JtOiBza2V3KDBkZWcsIC0xLjNkZWcpOw0KICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KICAgICAgICBtYXJnaW4tdG9wOiAtNzBweDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgMTQ1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnNlY3Rpb24tZGlhZ29uYWwtcmlnaHQgLnNlY3Rpb24tZGlhZ29uYWwtcmlnaHQtY29udGVudDpiZWZvcmUgew0KICAgICAgICAgICAgY29udGVudDogIiI7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBvcGFjaXR5OiAuODsNCiAgICAgICAgICAgIHotaW5kZXg6IC0xOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZjsNCiAgICAgICAgfQ0KDQogICAgLyogbGluZSAxNjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQgLnJvdywNCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodCAucm93IHsNCiAgICAgICAgcGFkZGluZy10b3A6IDEyNXB4Ow0KICAgIH0NCg0KICAgIC8qIGxpbmUgMTY1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kaWFnb25hbC1sZWZ0IC5jb2wtbWQtNSwNCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodCAuY29sLW1kLTUgew0KICAgICAgICBmbG9hdDogbm9uZTsNCiAgICAgICAgbWFyZ2luOiAwIGF1dG87DQogICAgfQ0KDQogICAgLyogbGluZSAxNzAsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWRpYWdvbmFsLWxlZnQgcCwNCiAgICAuc2VjdGlvbi1kaWFnb25hbC1yaWdodCBwIHsNCiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsNCiAgICB9DQoNCi8qIGxpbmUgMTc2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWxhbmRpbmcgew0KICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQpOw0KICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQp9DQogICAgLyogbGluZSAxODEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zZWN0aW9uLWxhbmRpbmcgLnJvdyA+IGRpdiB7DQogICAgICAgIG1hcmdpbi10b3A6IDgwcHg7DQogICAgfQ0KICAgICAgICAvKiBsaW5lIDE4NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgICAgIC5zZWN0aW9uLWxhbmRpbmcgLnJvdyA+IGRpdiAuc2VjdGlvbi1sYW5kaW5nLWhlYWRpbmcgew0KICAgICAgICAgICAgZm9udC1zaXplOiA0cmVtOw0KICAgICAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIH0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDE4NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tbGFuZGluZyAucm93ID4gZGl2IC5zZWN0aW9uLWxhbmRpbmctaGVhZGluZyB7DQogICAgICAgIGZvbnQtc2l6ZTogMTZ2dzsNCiAgICB9DQp9DQovKiBsaW5lIDE5NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1sYW5kaW5nIC5yb3cgPiBkaXYgLnNlY3Rpb24tbGFuZGluZy1zdWItaGVhZGluZyB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiA1MHB4Ow0KICAgIGZvbnQtc2l6ZTogMS41cmVtOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGZvbnQtd2VpZ2h0OiBTZW1pYm9sZDsNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsNCiAgICAvKiBsaW5lIDE5NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNlY3Rpb24tbGFuZGluZyAucm93ID4gZGl2IC5zZWN0aW9uLWxhbmRpbmctc3ViLWhlYWRpbmcgew0KICAgICAgICBmb250LXNpemU6IDR2dzsNCiAgICB9DQp9DQoNCi8qIGxpbmUgMjEwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLXN1Yi1sYW5kaW5nIHsNCiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KfQ0KDQovKiBsaW5lIDIxNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1kZWZhdWx0IHsNCiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KfQ0KDQpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgew0KICAgIC8qIGxpbmUgMjIwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2VjdGlvbi1kZWZhdWx0OmJlZm9yZSB7DQogICAgICAgIGNvbnRlbnQ6ICIgIjsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICB6LWluZGV4OiAwOw0KICAgICAgICB0b3A6IDA7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMCwgMCwgMCwgMC41OSkgNDElLCByZ2JhKDAsIDAsIDAsIDAuNjIpIDQzJSwgYmxhY2sgMTAwJSk7DQogICAgICAgIC8qIEZGMy42LTE1ICovDQogICAgICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMCwgMCwgMCwgMC41OSkgNDElLCByZ2JhKDAsIDAsIDAsIDAuNjIpIDQzJSwgYmxhY2sgMTAwJSk7DQogICAgICAgIC8qIENocm9tZTEwLTI1LFNhZmFyaTUuMS02ICovDQogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNTkpIDQxJSwgcmdiYSgwLCAwLCAwLCAwLjYyKSA0MyUsIGJsYWNrIDEwMCUpOw0KICAgICAgICAvKiBXM0MsIElFMTArLCBGRjE2KywgQ2hyb21lMjYrLCBPcGVyYTEyKywgU2FmYXJpNysgKi8NCiAgICAgICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoIHN0YXJ0Q29sb3JzdHI9JyMwMDAwMDAwMCcsIGVuZENvbG9yc3RyPScjMDAwMDAwJyxHcmFkaWVudFR5cGU9MCApOw0KICAgICAgICAvKiBJRTYtOSAqLw0KICAgIH0NCn0NCi8qIGxpbmUgMjM1LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5zZWN0aW9uLWRlZmF1bHQgLnJvdyB7DQogICAgcGFkZGluZy1ib3R0b206IDE1MHB4Ow0KfQ0KDQovKiBsaW5lIDI0MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1rbm93bGVkZ2Ugew0KICAgIG1hcmdpbi1ib3R0b206IDQwcHg7DQp9DQoNCi8qIGxpbmUgMjQ3LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5jb250ZW50LWhvbWUgLmJ0biB7DQogICAgbWFyZ2luLXRvcDogMDsNCn0NCg0KLyogbGluZSAyNTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmNvbnRlbnQtaG9tZSAucGFuZWwgew0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlcjogMDsNCiAgICBib3gtc2hhZG93OiBub25lOw0KfQ0KICAgIC8qIGxpbmUgMjU2LCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuY29udGVudC1ob21lIC5wYW5lbCBwIHsNCiAgICAgICAgYm9yZGVyOiAwOw0KICAgIH0NCg0KLyogbGluZSAyNjEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmNvbnRlbnQtaG9tZSAucGFuZWwtaGVhZGluZyB7DQogICAgZGlzcGxheTogbm9uZTsNCn0NCg0KLyogbGluZSAyNjUsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmNvbnRlbnQtaG9tZSAubGlzdC1ncm91cC1pdGVtIHsNCiAgICBwYWRkaW5nOiAyMHB4IDA7DQogICAgZm9udC1zaXplOiAyMHB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlcjogMDsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsNCn0NCiAgICAvKiBsaW5lIDI3MiwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLmNvbnRlbnQtaG9tZSAubGlzdC1ncm91cC1pdGVtIGltZyB7DQogICAgICAgIG1hcmdpbi1yaWdodDogMjVweDsNCiAgICB9DQoNCiAgICAvKiBsaW5lIDI3OCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLmNvbnRlbnQtaG9tZSBhLmxpc3QtZ3JvdXAtaXRlbSwNCiAgICAuY29udGVudC1ob21lIC5saXN0LWdyb3VwLWl0ZW0gYS50aXRsZSB7DQogICAgICAgIGNvbG9yOiAjMjMyMjIyOw0KICAgIH0NCiAgICAgICAgLyogbGluZSAyODIsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgICAgICAuY29udGVudC1ob21lIGEubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KICAgICAgICAuY29udGVudC1ob21lIGEubGlzdC1ncm91cC1pdGVtOmZvY3VzLA0KICAgICAgICAuY29udGVudC1ob21lIC5saXN0LWdyb3VwLWl0ZW0gYS50aXRsZTpob3ZlciwNCiAgICAgICAgLmNvbnRlbnQtaG9tZSAubGlzdC1ncm91cC1pdGVtIGEudGl0bGU6Zm9jdXMgew0KICAgICAgICAgICAgY29sb3I6ICMyMzIyMjI7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgICAgICB9DQoNCi8qIGxpbmUgMjkwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5jb250ZW50LWhvbWUgLnRpdGxlLA0KLmNvbnRlbnQtaG9tZSAuZGVzY3JpcHRpb24gew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQovKiBsaW5lIDI5NCwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouY29udGVudC1ob21lIC50aXRsZSB7DQogICAgZm9udC1zaXplOiAyNHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkgTGlnaHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KfQ0KDQovKiBsaW5lIDI5OSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouY29udGVudC1ob21lIC5kZXNjcmlwdGlvbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQovKiBsaW5lIDMwNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2lkZWJhci1ob21lIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOw0KICAgIGJvcmRlci10b3A6IDdweCBzb2xpZCAjMGI4MGQwOw0KICAgIG1hcmdpbi10b3A6IDM2cHg7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KICAgIC8qIGxpbmUgMzExLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2lkZWJhci1ob21lIGgzIHsNCiAgICAgICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIH0NCiAgICAvKiBsaW5lIDMxNSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNpZGViYXItaG9tZSAucGFuZWwgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgYm9yZGVyOiAwOw0KICAgICAgICBib3gtc2hhZG93OiBub25lOw0KICAgIH0NCiAgICAvKiBsaW5lIDMyMSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgLnNpZGViYXItaG9tZSAucGFuZWwtaGVhZGluZyB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlcjogMDsNCiAgICB9DQogICAgLyogbGluZSAzMjcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5zaWRlYmFyLWhvbWUgLnBhbmVsLXRpdGxlIHsNCiAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICBjb2xvcjogIzJmNWZlZjsNCiAgICAgICAgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSBTZW1pYm9sZCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgfQ0KICAgIC8qIGxpbmUgMzMzLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAuc2lkZWJhci1ob21lIC5saXN0LWdyb3VwLWl0ZW0gew0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlcjogMDsNCiAgICB9DQogICAgICAgIC8qIGxpbmUgMzQwLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCiAgICAgICAgLnNpZGViYXItaG9tZSAubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KICAgICAgICAuc2lkZWJhci1ob21lIC5saXN0LWdyb3VwLWl0ZW06Zm9jdXMgew0KICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgfQ0KICAgICAgICAvKiBsaW5lIDM0NSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQogICAgICAgIC5zaWRlYmFyLWhvbWUgLmxpc3QtZ3JvdXAtaXRlbSAuZGF0ZSB7DQogICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47DQogICAgICAgIH0NCg0KLyogbGluZSAzNTEsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24tbGFuZGluZy1zZWFyY2ggew0KICAgIG1pbi1oZWlnaHQ6IDI1MHB4Ow0KICAgIGJhY2tncm91bmQ6IHVybChob21laGVyby5qcGcpIG5vLXJlcGVhdCAwIDI1JTsNCiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOw0KfQ0KDQovKiBsaW5lIDM1NywgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQouc2VjdGlvbi1sYW5kaW5nLWZvcnVtcyB7DQogICAgbWluLWhlaWdodDogMjUwcHg7DQogICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsNCn0NCg0KLyogbGluZSAzNjQsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24ta25vd2xlZGdlIC5saXN0LWdyb3VwIGEubGlzdC1ncm91cC1pdGVtIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCn0NCg0KLyogbGluZSAzNjgsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnNlY3Rpb24ta25vd2xlZGdlIC5wYW5lbC10aXRsZSB7DQogICAgY29sb3I6ICMwMDA7DQp9DQoNCi8qIGxpbmUgMzczLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5wYWdlX3NlY3Rpb24uc2VjdGlvbi1sYW5kaW5nIC5yb3cgew0KICAgIHBhZGRpbmctYm90dG9tOiA2MHB4Ow0KfQ0KDQogICAgLyogbGluZSAzNzcsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KICAgIC5wYWdlX3NlY3Rpb24uc2VjdGlvbi1sYW5kaW5nIC5yb3cgPiBkaXYgew0KICAgICAgICBtYXJnaW4tdG9wOiAwcHg7DQogICAgfQ0KDQovKiBsaW5lIDM4MSwgQzovUG9ydGFsRnhSZXBvMi9SZXNvdXJjZXMvVGhlbWUvRWxlY3RyaWNCbHVlRGVzaWduL0RlZmF1bHRQb3J0YWxUZW1wbGF0ZS90aGVtZS5zY3NzICovDQp1bC50cmVlLCBvbC50cmVlIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCn0NCg0KLyogbGluZSAzODYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLnRyZWUgdWwsIC50cmVlIG9sLCAudHJlZSB1bCB1bCwgLnRyZWUgb2wgdWwsIC50cmVlIG9sIG9sIHVsLCAudHJlZSBvbCB1bCB1bCwgLnRyZWUgdWwgb2wgdWwsIC50cmVlIHVsIHVsIHVsIHsNCiAgICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7DQogICAgY29sb3I6ICMyZjVmZWY7DQp9DQoNCi8qIEFEWF9GT1JNUyAgKi8NCi8qIGxpbmUgMzkyLCBDOi9Qb3J0YWxGeFJlcG8yL1Jlc291cmNlcy9UaGVtZS9FbGVjdHJpY0JsdWVEZXNpZ24vRGVmYXVsdFBvcnRhbFRlbXBsYXRlL3RoZW1lLnNjc3MgKi8NCi5hZHhfZm9ybXNfZm9udF9jYWxpYnJpIHsNCiAgICBmb250LWZhbWlseTogQ2FsaWJyaTsNCn0NCg0KLyogbGluZSAzOTYsIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmFkeF9mb3Jtc19mb250X25ld19yb21hbiB7DQogICAgZm9udC1mYW1pbHk6IFRpbWVzIE5ldyBSb21hbjsNCn0NCg0KLyogbGluZSAzOTksIEM6L1BvcnRhbEZ4UmVwbzIvUmVzb3VyY2VzL1RoZW1lL0VsZWN0cmljQmx1ZURlc2lnbi9EZWZhdWx0UG9ydGFsVGVtcGxhdGUvdGhlbWUuc2NzcyAqLw0KLmFkeF9mb3Jtc19mb250X2hlbHZldGljYSB7DQogICAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EnLCBzYW5zLXNlcmlmOw0KfQ0KDQovKiBCZWxvdyBjaGFuZ2VzIGFyZSBkb25lIHRvIHN1cHBvcnQgRGVmYXVsdFBvcnRhbFRlbXBsYXRlIGluIG1ha2VyICovDQpodG1sIHsNCiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsNCiAgICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsNCiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIG1hcmdpbjogMDsNCn0NCg0KLndyYXBwZXItYm9keSB7DQogICAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMTMycHgpOw0KICAgIG1hcmdpbi1ib3R0b206IDBweDsNCn0NCg0KLmZvb3RlciAucHVzaCB7DQogICAgaGVpZ2h0OiA0M3B4Ow0KfQ0KDQouZm9vdGVyIHsNCiAgICBtYXJnaW4tdG9wOiAwcHg7DQp9DQoNCi5wYWdlLWNvcHkgew0KICAgIG1hcmdpbi10b3A6IDBweDsNCiAgICBtYXJnaW4tYm90dG9tOiAwcHg7DQp9DQoNCi5uYXZiYXItYnJhbmQgew0KICAgIGxpbmUtaGVpZ2h0OiAzN3B4Ow0KfQ0KDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsNCiAgICBjb2xvcjogdW5zZXQ7DQp9DQoNCmJvZHksIGxlZ2VuZCB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi5uYXYtdGFicyA+IGxpID4gYTpob3ZlciwgLm5hdi10YWJzID4gbGkgPiBhOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgIGNvbG9yOiAjMzAyQ0UxOw0KfQ0KDQouYnRuLWRlZmF1bHQgew0KICAgIGNvbG9yOiAjMzAyQ0UxOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KICAgIGJvcmRlci1jb2xvcjogIzMwMkNFMTsNCn0NCg0KLmJ0bi1kZWZhdWx0OmhvdmVyLA0KLmJ0bi1kZWZhdWx0OmFjdGl2ZSwNCi5idG4tZGVmYXVsdC5hY3RpdmUsDQouYnRuLWRlZmF1bHQ6Zm9jdXMsDQouYnRuLWRlZmF1bHQuZm9jdXMgew0KICAgIGNvbG9yOiAjMzAyQ0UxOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogICAgYm9yZGVyLWNvbG9yOiAjMzAyQ0UxOw0KfQ0KDQouYnRuLXByaW1hcnkgew0KICAgIGNvbG9yOiB3aGl0ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyQ0UxOw0KICAgIGJvcmRlci1jb2xvcjogIzMwMkNFMTsNCn0NCg0KLmJ0bi1wcmltYXJ5OmhvdmVyLA0KLmJ0bi1wcmltYXJ5OmFjdGl2ZSwNCi5idG4tcHJpbWFyeS5hY3RpdmUsDQouYnRuLXByaW1hcnk6YWN0aXZlOmhvdmVyLA0KLmJ0bi1wcmltYXJ5LmFjdGl2ZTpob3ZlciwNCi5idG4tcHJpbWFyeTphY3RpdmU6Zm9jdXMsDQouYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLA0KLmJ0bi1wcmltYXJ5OmFjdGl2ZS5mb2N1cywNCi5idG4tcHJpbWFyeS5hY3RpdmUuZm9jdXMsDQouYnRuLXByaW1hcnk6Zm9jdXMsDQouYnRuLXByaW1hcnkuZm9jdXMgew0KICAgIGNvbG9yOiB3aGl0ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWM1OWU3Ow0KICAgIGJvcmRlci1jb2xvcjogIzVjNTllNzsNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlIHsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzAyQ0UxOw0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NjQyZTQ7DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7DQogICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQ2NDJlNDsNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyQ0UxOw0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEgew0KICAgIGNvbG9yOiAjZmZmOw0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGENCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMkNFMTsNCiAgICBjb2xvcjogI2ZmZjsNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7DQogICAgY29sb3I6ICMzMDJDRTE7DQp9DQoNCi5uYXYgPiBsaSA+IGE6aG92ZXIsIC5uYXYgPiBsaSA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQp9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7DQp9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEgew0KICAgIGNvbG9yOiBibGFjazsNCn0NCg0KLm5hdiA+IC5vcGVuID4gYQ0KLm5hdiA+IC5vcGVuID4gYTpob3ZlciwNCi5uYXYgPiAub3BlbiA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQp9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cywNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsDQoubmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgIGNvbG9yOiBibGFjazsNCn0NCg0KI2ZpbHRlckRyb3Bkb3duSWQgPiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7DQoJYm9yZGVyOiAxcHggc29saWQ7DQp9DQoNCiNmaWx0ZXJEcm9wZG93bklkID4gYTpmb2N1c3sNCglib3JkZXI6IDFweCBzb2xpZDsNCn0NCg0KLmNybUVudGl0eUZvcm1WaWV3LCAuZW50aXR5bGlzdCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjZjJmMmYyOw0KfQ0KDQouc2VjdGlvblByaW1hcnlDb2xvciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMmNlMTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCn0NCg0KLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDEsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGgyLCAuc2VjdGlvblByaW1hcnlDb2xvciBoMywgLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDQsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGg1LCAuc2VjdGlvblByaW1hcnlDb2xvciBoNiB7DQogICAgY29sb3I6ICNmZmZmZmY7DQp9DQoNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMSwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMiwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMywNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNCwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNSwNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNiB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGgxLA0KLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDIsDQouc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoMywNCi5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGg0LA0KLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDUsDQouc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoNiB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi5zZWN0aW9uRml4ZWRTdHlsZSB7DQogICAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCmEgew0KICAgIGNvbG9yOiAjMzAyY2UxOw0KfQ0KDQphOm5vdCguYnRuKSB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCltyb2xlPSJuYXZpZ2F0aW9uIl0gYSwNCltyb2xlPSJjb250ZW50aW5mbyJdIGEsDQoudG9vbGJhciBhLA0KYS5saXN0LWdyb3VwLWl0ZW0gew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCg0KYTpob3ZlciwgYTpmb2N1cyB7DQogICAgY29sb3I6ICMzMDJjZTE7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCi5icmVhZGNydW1iID4gLmFjdGl2ZSB7DQogICAgY29sb3I6ICMwMDAwMDA7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoNCnAgew0KICAgIGZvbnQtc2l6ZTogMTZweA0KfQ0KDQpoMSB7DQogICAgZm9udC1zaXplOiAzNnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIG1hcmdpbi1sZWZ0OiAwcHg7DQogICAgbWFyZ2luLXJpZ2h0OiAwcHg7DQp9DQoNCmgyIHsNCiAgICBmb250LXNpemU6IDI4cHg7DQogICAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KaDMgew0KICAgIGZvbnQtc2l6ZTogMjRweDsNCiAgICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQoucGFnZS1oZWFkZXIgew0KICAgIGJvcmRlci1ib3R0b206IDBweDsNCn0NCg0KLm5hdmJhci1icmFuZCB7DQogICAgcGFkZGluZzogOHB4DQp9DQoNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIHsNCiAgICBmb250LXNpemU6IDI0cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6IHVuc2V0Ow0KfQ0KDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIHsNCiAgICBjb2xvcjogYmxhY2s7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KLmhlbHAtYmxvY2sNCnsNCiAgICBjb2xvcjpibGFjazsNCn0NCg0KLnNraXAtdG8tY29udGVudCBhIA0Kew0KICAgIHBhZGRpbmc6IDEwcHggMjBweDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOi00M3B4Ow0KICAgIGxlZnQ6MHB4Ow0KICAgIGNvbG9yOiNGRkZGRkY7DQogICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgIGJhY2tncm91bmQ6Izc0Mjc3NDsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHRvcCAxcyBlYXNlLW91dDsNCiAgICB0cmFuc2l0aW9uOiB0b3AgMXMgZWFzZS1vdXQ7DQogICAgei1pbmRleDogMTAwOw0KICAgIGZvbnQtZmFtaWx5OiBTZWdvZSBVSTsNCiAgICBmb250LXNpemU6IDE0cHg7DQp9DQoNCi5za2lwLXRvLWNvbnRlbnQgYTpmb2N1cyANCnsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICBsZWZ0OjBweDsNCiAgICB0b3A6MHB4Ow0KICAgIG91dGxpbmU6IG5vbmU7DQogICAgY29sb3I6I0ZGRkZGRjsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHRvcCAuMXMgZWFzZS1pbjsNCiAgICB0cmFuc2l0aW9uOiB0b3AgLjFzIGVhc2UtaW47DQp9DQoNCkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7DQogICAgLm5hdi10YWJzPmxpLmFjdGl2ZT5hLCAubmF2LXRhYnM+bGkuYWN0aXZlPmE6aG92ZXIsIC5uYXYtdGFicz5saS5hY3RpdmU+YTpmb2N1cw0KICAgIHsNCiAgICAgYm9yZGVyLWJvdHRvbTogMHB4IDsgDQogICAgfQ0KICAgIA0KICAgIC5uYXYtdGFicz5saT5hDQogICAgeyAgDQogICAgIGJvcmRlcjogMHB4Ow0KICAgIH0NCg0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkOw0KICAgIH0NCg0KICAgIC5mYWNldC1saXN0LWdyb3VwLWl0ZW0gDQogICAgew0KICAgICAgICBtYXJnaW46IDFweDsNCiAgICAgICAgYm9yZGVyOiAwcHg7DQogICAgfQ0KfQ0KDQouZnJlbmNoQWNjZXNzaWJpbGl0eUxpbmt7DQogICAgZmxvYXQ6IHJpZ2h0Ow0KICAgIHdpZHRoOiAyOTdweDsNCiAgICBoZWlnaHQ6IDI0cHg7DQogICAgZm9udC1mYW1pbHk6IFNlZ29lIFVJOw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBsaW5lLWhlaWdodDogMjFweDsNCiAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOw0KICAgIGNvbG9yOiAjMkMzM0Q4Ow0KfQ0KDQoNCi8qIFBvd2VyIFZpcnR1YWwgQWdlbnQgc3R5bGVzICovDQoucHZhLWZsb2F0aW5nLXN0eWxlIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBib3R0b206IDBweDsNCiAgcmlnaHQ6IDBweDsNCiAgbWFyZ2luLXJpZ2h0OiAxNnB4Ow0KICBtYXJnaW4tYm90dG9tOiAxOHB4Ow0KICB6LWluZGV4OiA5OTk5Ow0KfQ0KLyogUG93ZXIgVmlydHVhbCBBZ2VudCBzdHlsZXMgZW5kcyAqLw0KDQoudmlzaWJsZS1sZy1ibG9ja3sNCiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCn0=", + "name": "theme.css", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "3b8343ca-c04c-4768-a2f9-73b9a01bde4f", + "content": "{\"display_name\":\"Default\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "name": "Default", + "powerpagecomponenttype": "4", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "3d2aec03-5980-4d48-b780-cd25390ccf49", + "content": "{\"anonymoususersrole\":true,\"authenticatedusersrole\":false}", + "name": "Anonymous Users", + "powerpagecomponenttype": "11", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "41c9526c-f123-4b59-994f-ad06698902b2", + "content": "{\"source\":\"
\\r\\n
\\r\\n {% block breadcrumbs %}\\r\\n {% include 'Breadcrumbs' %}\\r\\n {% endblock %}\\r\\n {% block title %}\\r\\n {% include 'Page Header' %}\\r\\n {% endblock %}\\r\\n
\\r\\n
\\r\\n
\\r\\n {% block main %}\\r\\n {% include 'Page Copy' %}\\r\\n {% endblock %}\\r\\n
\\r\\n
\\r\\n {% block aside -%}\\r\\n {%- endblock %}\\r\\n
\\r\\n
\\r\\n
\\r\\n\"}", + "name": "Layout 2 Column Wide Left", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "4fdc558d-cbc6-49da-aeb5-314a59fb6e99", + "content": "{\"value\":\"False\"}", + "name": "Search/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "549b7114-711a-4096-8de5-8dae1575a67d", + "content": "{\"displayorder\":1,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"bootstrap.min.css\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "LyohDQogKiBCb290c3RyYXAgdjMuMy42IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSkNCiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLg0KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkNCiAqLw0KDQoNCi8qISBub3JtYWxpemUuY3NzIHYzLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi8NCg0KYXJ0aWNsZSwNCmFzaWRlLA0KZGV0YWlscywNCmZpZ2NhcHRpb24sDQpmaWd1cmUsDQpmb290ZXIsDQpoZWFkZXIsDQpoZ3JvdXAsDQptYWluLA0KbWVudSwNCm5hdiwNCnNlY3Rpb24sDQpzdW1tYXJ5IHsNCiAgICBkaXNwbGF5OiBibG9jaw0KfQ0KDQphdWRpbywNCmNhbnZhcywNCnByb2dyZXNzLA0KdmlkZW8gew0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmUNCn0NCg0KYXVkaW86bm90KFtjb250cm9sc10pIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIGhlaWdodDogMA0KfQ0KDQpbaGlkZGVuXSwNCnRlbXBsYXRlIHsNCiAgICBkaXNwbGF5OiBub25lDQp9DQoNCmEgew0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCmE6YWN0aXZlLA0KYTpob3ZlciB7DQogICAgb3V0bGluZTogMA0KfQ0KDQphYmJyW3RpdGxlXSB7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZA0KfQ0KDQpiLA0Kc3Ryb25nIHsNCiAgICBmb250LXdlaWdodDogYm9sZA0KfQ0KDQpkZm4gew0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYw0KfQ0KDQpoMSB7DQogICAgZm9udC1zaXplOiAyZW07DQogICAgbWFyZ2luOiAuNjdlbTsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KbWFyayB7DQogICAgYmFja2dyb3VuZDogI2ZmMDsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQpzbWFsbCB7DQogICAgZm9udC1zaXplOiA4MCUNCn0NCg0Kc3ViLA0Kc3VwIHsNCiAgICBmb250LXNpemU6IDc1JTsNCiAgICBsaW5lLWhlaWdodDogMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lDQp9DQoNCnN1cCB7DQogICAgdG9wOiAtLjVlbQ0KfQ0KDQpzdWIgew0KICAgIGJvdHRvbTogLS4yNWVtDQp9DQoNCmltZyB7DQogICAgYm9yZGVyOiAwDQp9DQoNCnN2Zzpub3QoOnJvb3QpIHsNCiAgICBvdmVyZmxvdzogaGlkZGVuDQp9DQoNCmZpZ3VyZSB7DQogICAgbWFyZ2luOiAxZW0gNDBweA0KfQ0KDQpociB7DQogICAgYm94LXNpemluZzogY29udGVudC1ib3g7DQogICAgaGVpZ2h0OiAwDQp9DQoNCnByZSB7DQogICAgb3ZlcmZsb3c6IGF1dG8NCn0NCg0KY29kZSwNCmtiZCwNCnByZSwNCnNhbXAgew0KICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsNCiAgICBmb250LXNpemU6IDFlbQ0KfQ0KDQpidXR0b24sDQppbnB1dCwNCm9wdGdyb3VwLA0Kc2VsZWN0LA0KdGV4dGFyZWEgew0KICAgIGNvbG9yOiBpbmhlcml0Ow0KICAgIGZvbnQ6IGluaGVyaXQ7DQogICAgbWFyZ2luOiAwDQp9DQoNCmJ1dHRvbiB7DQogICAgb3ZlcmZsb3c6IHZpc2libGUNCn0NCg0KYnV0dG9uLA0Kc2VsZWN0IHsNCiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZQ0KfQ0KDQpidXR0b24sDQpodG1sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLA0KaW5wdXRbdHlwZT0icmVzZXQiXSwNCmlucHV0W3R5cGU9InN1Ym1pdCJdIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsNCiAgICBjdXJzb3I6IHBvaW50ZXINCn0NCg0KYnV0dG9uW2Rpc2FibGVkXSwNCmh0bWwgaW5wdXRbZGlzYWJsZWRdIHsNCiAgICBjdXJzb3I6IGRlZmF1bHQNCn0NCg0KYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLA0KaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIgew0KICAgIGJvcmRlcjogMDsNCiAgICBwYWRkaW5nOiAwDQp9DQoNCmlucHV0IHsNCiAgICBsaW5lLWhlaWdodDogbm9ybWFsDQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0sDQppbnB1dFt0eXBlPSJyYWRpbyJdIHsNCiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIHBhZGRpbmc6IDANCn0NCg0KaW5wdXRbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sDQppbnB1dFt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCmlucHV0W3R5cGU9InNlYXJjaCJdIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsNCiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveA0KfQ0KDQppbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwNCmlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmUNCn0NCg0KZmllbGRzZXQgew0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7DQogICAgbWFyZ2luOiAwIDJweDsNCiAgICBwYWRkaW5nOiAuMzVlbSAuNjI1ZW0gLjc1ZW0NCn0NCg0KbGVnZW5kIHsNCiAgICBib3JkZXI6IDA7DQogICAgcGFkZGluZzogMA0KfQ0KDQp0ZXh0YXJlYSB7DQogICAgb3ZlcmZsb3c6IGF1dG8NCn0NCg0Kb3B0Z3JvdXAgew0KICAgIGZvbnQtd2VpZ2h0OiBib2xkDQp9DQoNCnRhYmxlIHsNCiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KICAgIGJvcmRlci1zcGFjaW5nOiAwDQp9DQoNCnRkLA0KdGggew0KICAgIHBhZGRpbmc6IDANCn0NCg0KLyoNCi5maXhlZC1ib3R0b217DQoJDQoJcG9zaXRpb246IGZpeGVkOw0KCXJpZ2h0OiAwOw0KCWJvdHRvbTogMDsNCglsZWZ0OiAwOw0KCXdpZHRoOjEwMCU7DQoJaGVpZ2h0OjQzcHg7ICAgIEhlaWdodCBvZiB0aGUgZm9vdGVyIA0KfQ0KKi8NCg0KDQovKiEgU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9ibG9iL21hc3Rlci9zcmMvY3NzL21haW4uY3NzICovDQoNCkBtZWRpYSBwcmludCB7DQoNCiAgICAqLA0KICAgICo6YmVmb3JlLA0KICAgICo6YWZ0ZXIgew0KICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Ow0KICAgICAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50Ow0KICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICBhLA0KICAgIGE6dmlzaXRlZCB7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lDQogICAgfQ0KDQogICAgYVtocmVmXTphZnRlciB7DQogICAgICAgIGNvbnRlbnQ6ICIgKCJhdHRyKGhyZWYpICIpIg0KICAgIH0NCg0KICAgIGFiYnJbdGl0bGVdOmFmdGVyIHsNCiAgICAgICAgY29udGVudDogIiAoImF0dHIodGl0bGUpICIpIg0KICAgIH0NCg0KICAgIGFbaHJlZl49IiMiXTphZnRlciwNCiAgICBhW2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyIHsNCiAgICAgICAgY29udGVudDogIiINCiAgICB9DQoNCiAgICBwcmUsDQogICAgYmxvY2txdW90ZSB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7DQogICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZA0KICAgIH0NCg0KICAgIHRoZWFkIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwDQogICAgfQ0KDQogICAgdHIsDQogICAgaW1nIHsNCiAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkDQogICAgfQ0KDQogICAgaW1nIHsNCiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICBwLA0KICAgIGgyLA0KICAgIGgzIHsNCiAgICAgICAgb3JwaGFuczogMzsNCiAgICAgICAgd2lkb3dzOiAzDQogICAgfQ0KDQogICAgaDIsDQogICAgaDMgew0KICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZA0KICAgIH0NCg0KICAgIGgzIHsNCiAgICAgICAgZm9udC1zaXplOiAxLjVlbTsNCiAgICB9DQoNCiAgICBwIHsNCiAgICAgICAgZm9udC1zaXplOiAxZW07DQogICAgICAgIGNvbG9yOiAjMjAxZjFlOw0KICAgIH0NCg0KICAgIC5uYXZiYXIgew0KICAgICAgICBkaXNwbGF5OiBub25lDQogICAgfQ0KDQogICAgLmJ0bj4uY2FyZXQsDQogICAgLmRyb3B1cD4uYnRuPi5jYXJldCB7DQogICAgICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIC5sYWJlbCB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDANCiAgICB9DQoNCiAgICAudGFibGUgew0KICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICAudGFibGUgdGQsDQogICAgLnRhYmxlIHRoIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZiAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgLnRhYmxlLWJvcmRlcmVkIHRoLA0KICAgIC50YWJsZS1ib3JkZXJlZCB0ZCB7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQGZvbnQtZmFjZSB7DQogICAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7DQogICAgc3JjOiB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90Iik7DQogICAgc3JjOiB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90PyNpZWZpeCIpIGZvcm1hdCgiZW1iZWRkZWQtb3BlbnR5cGUiKSwgdXJsKCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpLCB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZiIpIGZvcm1hdCgid29mZiIpLCB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmIikgZm9ybWF0KCJ0cnVldHlwZSIpLCB1cmwoIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnI2dseXBoaWNvbnNfaGFsZmxpbmdzcmVndWxhciIpIGZvcm1hdCgic3ZnIikNCn0NCg0KLmdseXBoaWNvbiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogMXB4Ow0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJzsNCiAgICBmb250LXN0eWxlOiBub3JtYWw7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMTsNCiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlDQp9DQoNCi5nbHlwaGljb24tYXN0ZXJpc2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAiKiINCn0NCg0KLmdseXBoaWNvbi1wbHVzOmJlZm9yZSB7DQogICAgY29udGVudDogIisiDQp9DQoNCi5nbHlwaGljb24tZXVybzpiZWZvcmUsDQouZ2x5cGhpY29uLWV1cjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLigqwiDQp9DQoNCi5nbHlwaGljb24tbWludXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi4oiSIg0KfQ0KDQouZ2x5cGhpY29uLWNsb3VkOmJlZm9yZSB7DQogICAgY29udGVudDogIuKYgSINCn0NCg0KLmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLinIkiDQp9DQoNCi5nbHlwaGljb24tcGVuY2lsOmJlZm9yZSB7DQogICAgY29udGVudDogIuKcjyINCn0NCg0KLmdseXBoaWNvbi1nbGFzczpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugIEiDQp9DQoNCi5nbHlwaGljb24tbXVzaWM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCCIg0KfQ0KDQouZ2x5cGhpY29uLXNlYXJjaDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugIMiDQp9DQoNCi5nbHlwaGljb24taGVhcnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCFIg0KfQ0KDQouZ2x5cGhpY29uLXN0YXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCGIg0KfQ0KDQouZ2x5cGhpY29uLXN0YXItZW1wdHk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCHIg0KfQ0KDQouZ2x5cGhpY29uLXVzZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCIIg0KfQ0KDQouZ2x5cGhpY29uLWZpbG06YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCJIg0KfQ0KDQouZ2x5cGhpY29uLXRoLWxhcmdlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AkCINCn0NCg0KLmdseXBoaWNvbi10aDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJEiDQp9DQoNCi5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJIiDQp9DQoNCi5nbHlwaGljb24tb2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCTIg0KfQ0KDQouZ2x5cGhpY29uLXJlbW92ZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJQiDQp9DQoNCi5nbHlwaGljb24tem9vbS1pbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJUiDQp9DQoNCi5nbHlwaGljb24tem9vbS1vdXQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCWIg0KfQ0KDQouZ2x5cGhpY29uLW9mZjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugJciDQp9DQoNCi5nbHlwaGljb24tc2lnbmFsOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AmCINCn0NCg0KLmdseXBoaWNvbi1jb2c6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCZIg0KfQ0KDQouZ2x5cGhpY29uLXRyYXNoOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoCINCn0NCg0KLmdseXBoaWNvbi1ob21lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoSINCn0NCg0KLmdseXBoaWNvbi1maWxlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoiINCn0NCg0KLmdseXBoaWNvbi10aW1lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AoyINCn0NCg0KLmdseXBoaWNvbi1yb2FkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ApCINCn0NCg0KLmdseXBoaWNvbi1kb3dubG9hZC1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oClIg0KfQ0KDQouZ2x5cGhpY29uLWRvd25sb2FkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ApiINCn0NCg0KLmdseXBoaWNvbi11cGxvYWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oCnIg0KfQ0KDQouZ2x5cGhpY29uLWluYm94OmJlZm9yZSB7DQogICAgY29udGVudDogIu6AqCINCn0NCg0KLmdseXBoaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugKkiDQp9DQoNCi5nbHlwaGljb24tcmVwZWF0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6AsCINCn0NCg0KLmdseXBoaWNvbi1yZWZyZXNoOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AsSINCn0NCg0KLmdseXBoaWNvbi1saXN0LWFsdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLIiDQp9DQoNCi5nbHlwaGljb24tbG9jazpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLMiDQp9DQoNCi5nbHlwaGljb24tZmxhZzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLQiDQp9DQoNCi5nbHlwaGljb24taGVhZHBob25lczpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLUiDQp9DQoNCi5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLYiDQp9DQoNCi5nbHlwaGljb24tdm9sdW1lLWRvd246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oC3Ig0KfQ0KDQouZ2x5cGhpY29uLXZvbHVtZS11cDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugLgiDQp9DQoNCi5nbHlwaGljb24tcXJjb2RlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6AuSINCn0NCg0KLmdseXBoaWNvbi1iYXJjb2RlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BgCINCn0NCg0KLmdseXBoaWNvbi10YWc6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGBIg0KfQ0KDQouZ2x5cGhpY29uLXRhZ3M6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGCIg0KfQ0KDQouZ2x5cGhpY29uLWJvb2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGDIg0KfQ0KDQouZ2x5cGhpY29uLWJvb2ttYXJrOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BhCINCn0NCg0KLmdseXBoaWNvbi1wcmludDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugYUiDQp9DQoNCi5nbHlwaGljb24tY2FtZXJhOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BhiINCn0NCg0KLmdseXBoaWNvbi1mb250OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BhyINCn0NCg0KLmdseXBoaWNvbi1ib2xkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BiCINCn0NCg0KLmdseXBoaWNvbi1pdGFsaWM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGJIg0KfQ0KDQouZ2x5cGhpY29uLXRleHQtaGVpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BkCINCn0NCg0KLmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BkSINCn0NCg0KLmdseXBoaWNvbi1hbGlnbi1sZWZ0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BkiINCn0NCg0KLmdseXBoaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGTIg0KfQ0KDQouZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BlCINCn0NCg0KLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BlSINCn0NCg0KLmdseXBoaWNvbi1saXN0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BliINCn0NCg0KLmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugZciDQp9DQoNCi5nbHlwaGljb24taW5kZW50LXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BmCINCn0NCg0KLmdseXBoaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugZkiDQp9DQoNCi5nbHlwaGljb24tcGljdHVyZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugaAiDQp9DQoNCi5nbHlwaGljb24tbWFwLW1hcmtlcjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugaIiDQp9DQoNCi5nbHlwaGljb24tYWRqdXN0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BoyINCn0NCg0KLmdseXBoaWNvbi10aW50OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BpCINCn0NCg0KLmdseXBoaWNvbi1lZGl0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BpSINCn0NCg0KLmdseXBoaWNvbi1zaGFyZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugaYiDQp9DQoNCi5nbHlwaGljb24tY2hlY2s6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGnIg0KfQ0KDQouZ2x5cGhpY29uLW1vdmU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGoIg0KfQ0KDQouZ2x5cGhpY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGpIg0KfQ0KDQouZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oGwIg0KfQ0KDQouZ2x5cGhpY29uLWJhY2t3YXJkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BsSINCn0NCg0KLmdseXBoaWNvbi1wbGF5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BsiINCn0NCg0KLmdseXBoaWNvbi1wYXVzZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugbMiDQp9DQoNCi5nbHlwaGljb24tc3RvcDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugbQiDQp9DQoNCi5nbHlwaGljb24tZm9yd2FyZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugbUiDQp9DQoNCi5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6BtiINCn0NCg0KLmdseXBoaWNvbi1zdGVwLWZvcndhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oG3Ig0KfQ0KDQouZ2x5cGhpY29uLWVqZWN0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6BuCINCn0NCg0KLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oG5Ig0KfQ0KDQouZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKAIg0KfQ0KDQouZ2x5cGhpY29uLXBsdXMtc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugoEiDQp9DQoNCi5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugoIiDQp9DQoNCi5nbHlwaGljb24tcmVtb3ZlLXNpZ246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKDIg0KfQ0KDQouZ2x5cGhpY29uLW9rLXNpZ246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKEIg0KfQ0KDQouZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKFIg0KfQ0KDQouZ2x5cGhpY29uLWluZm8tc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugoYiDQp9DQoNCi5nbHlwaGljb24tc2NyZWVuc2hvdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugociDQp9DQoNCi5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugogiDQp9DQoNCi5nbHlwaGljb24tb2stY2lyY2xlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6CiSINCn0NCg0KLmdseXBoaWNvbi1iYW4tY2lyY2xlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6CkCINCn0NCg0KLmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6CkSINCn0NCg0KLmdseXBoaWNvbi1hcnJvdy1yaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugpIiDQp9DQoNCi5nbHlwaGljb24tYXJyb3ctdXA6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKTIg0KfQ0KDQouZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKUIg0KfQ0KDQouZ2x5cGhpY29uLXNoYXJlLWFsdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugpUiDQp9DQoNCi5nbHlwaGljb24tcmVzaXplLWZ1bGw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oKWIg0KfQ0KDQouZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLugpciDQp9DQoNCi5nbHlwaGljb24tZXhjbGFtYXRpb24tc2lnbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIEiDQp9DQoNCi5nbHlwaGljb24tZ2lmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIIiDQp9DQoNCi5nbHlwaGljb24tbGVhZjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIMiDQp9DQoNCi5nbHlwaGljb24tZmlyZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIQiDQp9DQoNCi5nbHlwaGljb24tZXllLW9wZW46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSFIg0KfQ0KDQouZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIYiDQp9DQoNCi5nbHlwaGljb24td2FybmluZy1zaWduOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EhyINCn0NCg0KLmdseXBoaWNvbi1wbGFuZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhIgiDQp9DQoNCi5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSJIg0KfQ0KDQouZ2x5cGhpY29uLXJhbmRvbTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJAiDQp9DQoNCi5nbHlwaGljb24tY29tbWVudDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJEiDQp9DQoNCi5nbHlwaGljb24tbWFnbmV0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6EkiINCn0NCg0KLmdseXBoaWNvbi1jaGV2cm9uLXVwOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EkyINCn0NCg0KLmdseXBoaWNvbi1jaGV2cm9uLWRvd246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSUIg0KfQ0KDQouZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSVIg0KfQ0KDQouZ2x5cGhpY29uLXNob3BwaW5nLWNhcnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSWIg0KfQ0KDQouZ2x5cGhpY29uLWZvbGRlci1jbG9zZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJciDQp9DQoNCi5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSYIg0KfQ0KDQouZ2x5cGhpY29uLXJlc2l6ZS12ZXJ0aWNhbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhJkiDQp9DQoNCi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSgIg0KfQ0KDQouZ2x5cGhpY29uLWhkZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhKEiDQp9DQoNCi5nbHlwaGljb24tYnVsbGhvcm46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSiIg0KfQ0KDQouZ2x5cGhpY29uLWJlbGw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSjIg0KfQ0KDQouZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EpCINCn0NCg0KLmdseXBoaWNvbi10aHVtYnMtdXA6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSlIg0KfQ0KDQouZ2x5cGhpY29uLXRodW1icy1kb3duOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EpiINCn0NCg0KLmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6EpyINCn0NCg0KLmdseXBoaWNvbi1oYW5kLWxlZnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSoIg0KfQ0KDQouZ2x5cGhpY29uLWhhbmQtdXA6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oSpIg0KfQ0KDQouZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLAiDQp9DQoNCi5nbHlwaGljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6EsSINCn0NCg0KLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLIiDQp9DQoNCi5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EsyINCn0NCg0KLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93bjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLQiDQp9DQoNCi5nbHlwaGljb24tZ2xvYmU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oS1Ig0KfQ0KDQouZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLYiDQp9DQoNCi5nbHlwaGljb24tdGFza3M6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oS3Ig0KfQ0KDQouZ2x5cGhpY29uLWZpbHRlcjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhLgiDQp9DQoNCi5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6EuSINCn0NCg0KLmdseXBoaWNvbi1mdWxsc2NyZWVuOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FgCINCn0NCg0KLmdseXBoaWNvbi1kYXNoYm9hcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWBIg0KfQ0KDQouZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhYIiDQp9DQoNCi5nbHlwaGljb24taGVhcnQtZW1wdHk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWDIg0KfQ0KDQouZ2x5cGhpY29uLWxpbms6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWEIg0KfQ0KDQouZ2x5cGhpY29uLXBob25lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FhSINCn0NCg0KLmdseXBoaWNvbi1wdXNocGluOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FhiINCn0NCg0KLmdseXBoaWNvbi11c2Q6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWIIg0KfQ0KDQouZ2x5cGhpY29uLWdicDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhYkiDQp9DQoNCi5nbHlwaGljb24tc29ydDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhZAiDQp9DQoNCi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhZEiDQp9DQoNCi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWSIg0KfQ0KDQouZ2x5cGhpY29uLXNvcnQtYnktb3JkZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWTIg0KfQ0KDQouZ2x5cGhpY29uLXNvcnQtYnktb3JkZXItYWx0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6FlCINCn0NCg0KLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWVIg0KfQ0KDQouZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcy1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWWIg0KfQ0KDQouZ2x5cGhpY29uLXVuY2hlY2tlZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhZciDQp9DQoNCi5nbHlwaGljb24tZXhwYW5kOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FmCINCn0NCg0KLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FmSINCn0NCg0KLmdseXBoaWNvbi1jb2xsYXBzZS11cDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaAiDQp9DQoNCi5nbHlwaGljb24tbG9nLWluOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FoSINCn0NCg0KLmdseXBoaWNvbi1mbGFzaDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaIiDQp9DQoNCi5nbHlwaGljb24tbG9nLW91dDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaMiDQp9DQoNCi5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhaQiDQp9DQoNCi5nbHlwaGljb24tcmVjb3JkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FpSINCn0NCg0KLmdseXBoaWNvbi1zYXZlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FpiINCn0NCg0KLmdseXBoaWNvbi1vcGVuOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FpyINCn0NCg0KLmdseXBoaWNvbi1zYXZlZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhagiDQp9DQoNCi5nbHlwaGljb24taW1wb3J0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6FqSINCn0NCg0KLmdseXBoaWNvbi1leHBvcnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWwIg0KfQ0KDQouZ2x5cGhpY29uLXNlbmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWxIg0KfQ0KDQouZ2x5cGhpY29uLWZsb3BweS1kaXNrOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FsiINCn0NCg0KLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oWzIg0KfQ0KDQouZ2x5cGhpY29uLWZsb3BweS1yZW1vdmU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oW0Ig0KfQ0KDQouZ2x5cGhpY29uLWZsb3BweS1zYXZlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FtSINCn0NCg0KLmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhbYiDQp9DQoNCi5nbHlwaGljb24tY3JlZGl0LWNhcmQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oW3Ig0KfQ0KDQouZ2x5cGhpY29uLXRyYW5zZmVyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6FuCINCn0NCg0KLmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6FuSINCn0NCg0KLmdseXBoaWNvbi1oZWFkZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaAIg0KfQ0KDQouZ2x5cGhpY29uLWNvbXByZXNzZWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaBIg0KfQ0KDQouZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GgiINCn0NCg0KLmdseXBoaWNvbi1waG9uZS1hbHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaDIg0KfQ0KDQouZ2x5cGhpY29uLXRvd2VyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GhCINCn0NCg0KLmdseXBoaWNvbi1zdGF0czpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhoUiDQp9DQoNCi5nbHlwaGljb24tc2QtdmlkZW86YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaGIg0KfQ0KDQouZ2x5cGhpY29uLWhkLXZpZGVvOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GhyINCn0NCg0KLmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaIIg0KfQ0KDQouZ2x5cGhpY29uLXNvdW5kLXN0ZXJlbzpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhokiDQp9DQoNCi5nbHlwaGljb24tc291bmQtZG9sYnk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaQIg0KfQ0KDQouZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhpEiDQp9DQoNCi5nbHlwaGljb24tc291bmQtNi0xOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GkiINCn0NCg0KLmdseXBoaWNvbi1zb3VuZC03LTE6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaTIg0KfQ0KDQouZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GlCINCn0NCg0KLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyazpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhpUiDQp9DQoNCi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oaXIg0KfQ0KDQouZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuhpgiDQp9DQoNCi5nbHlwaGljb24tdHJlZS1jb25pZmVyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6GmSINCn0NCg0KLmdseXBoaWNvbi10cmVlLWRlY2lkdW91czpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIAiDQp9DQoNCi5nbHlwaGljb24tY2Q6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiBIg0KfQ0KDQouZ2x5cGhpY29uLXNhdmUtZmlsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIIiDQp9DQoNCi5nbHlwaGljb24tb3Blbi1maWxlOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IgyINCn0NCg0KLmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIQiDQp9DQoNCi5nbHlwaGljb24tY29weTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiIUiDQp9DQoNCi5nbHlwaGljb24tcGFzdGU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiGIg0KfQ0KDQouZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6IiSINCn0NCg0KLmdseXBoaWNvbi1lcXVhbGl6ZXI6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiQIg0KfQ0KDQouZ2x5cGhpY29uLWtpbmc6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiRIg0KfQ0KDQouZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IkiINCn0NCg0KLmdseXBoaWNvbi1wYXduOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IkyINCn0NCg0KLmdseXBoaWNvbi1iaXNob3A6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiUIg0KfQ0KDQouZ2x5cGhpY29uLWtuaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiJUiDQp9DQoNCi5nbHlwaGljb24tYmFieS1mb3JtdWxhOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IliINCn0NCg0KLmdseXBoaWNvbi10ZW50OmJlZm9yZSB7DQogICAgY29udGVudDogIuKbuiINCn0NCg0KLmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ImCINCn0NCg0KLmdseXBoaWNvbi1iZWQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oiZIg0KfQ0KDQouZ2x5cGhpY29uLWFwcGxlOmJlZm9yZSB7DQogICAgY29udGVudDogIu+jvyINCn0NCg0KLmdseXBoaWNvbi1lcmFzZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiKEiDQp9DQoNCi5nbHlwaGljb24taG91cmdsYXNzOmJlZm9yZSB7DQogICAgY29udGVudDogIuKMmyINCn0NCg0KLmdseXBoaWNvbi1sYW1wOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IoyINCn0NCg0KLmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oikIg0KfQ0KDQouZ2x5cGhpY29uLXBpZ2d5LWJhbms6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oilIg0KfQ0KDQouZ2x5cGhpY29uLXNjaXNzb3JzOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IpiINCn0NCg0KLmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IpyINCn0NCg0KLmdseXBoaWNvbi1idGM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oinIg0KfQ0KDQouZ2x5cGhpY29uLXhidDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiKciDQp9DQoNCi5nbHlwaGljb24teWVuOmJlZm9yZSB7DQogICAgY29udGVudDogIsKlIg0KfQ0KDQouZ2x5cGhpY29uLWpweTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLCpSINCn0NCg0KLmdseXBoaWNvbi1ydWJsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLigr0iDQp9DQoNCi5nbHlwaGljb24tcnViOmJlZm9yZSB7DQogICAgY29udGVudDogIuKCvSINCn0NCg0KLmdseXBoaWNvbi1zY2FsZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiLAiDQp9DQoNCi5nbHlwaGljb24taWNlLWxvbGx5OmJlZm9yZSB7DQogICAgY29udGVudDogIu6IsSINCn0NCg0KLmdseXBoaWNvbi1pY2UtbG9sbHktdGFzdGVkOmJlZm9yZSB7DQogICAgY29udGVudDogIu6IsiINCn0NCg0KLmdseXBoaWNvbi1lZHVjYXRpb246YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oizIg0KfQ0KDQouZ2x5cGhpY29uLW9wdGlvbi1ob3Jpem9udGFsOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ItCINCn0NCg0KLmdseXBoaWNvbi1vcHRpb24tdmVydGljYWw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oi1Ig0KfQ0KDQouZ2x5cGhpY29uLW1lbnUtaGFtYnVyZ2VyOmJlZm9yZSB7DQogICAgY29udGVudDogIu6ItiINCn0NCg0KLmdseXBoaWNvbi1tb2RhbC13aW5kb3c6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oi3Ig0KfQ0KDQouZ2x5cGhpY29uLW9pbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiLgiDQp9DQoNCi5nbHlwaGljb24tZ3JhaW46YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7oi5Ig0KfQ0KDQouZ2x5cGhpY29uLXN1bmdsYXNzZXM6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omAIg0KfQ0KDQouZ2x5cGhpY29uLXRleHQtc2l6ZTpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYEiDQp9DQoNCi5nbHlwaGljb24tdGV4dC1jb2xvcjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYIiDQp9DQoNCi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JgyINCn0NCg0KLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdG9wOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JhCINCn0NCg0KLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JhSINCn0NCg0KLmdseXBoaWNvbi1vYmplY3QtYWxpZ24taG9yaXpvbnRhbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYYiDQp9DQoNCi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWxlZnQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omHIg0KfQ0KDQouZ2x5cGhpY29uLW9iamVjdC1hbGlnbi12ZXJ0aWNhbDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiYgiDQp9DQoNCi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6JiSINCn0NCg0KLmdseXBoaWNvbi10cmlhbmdsZS1yaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZAiDQp9DQoNCi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZEiDQp9DQoNCi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JkiINCn0NCg0KLmdseXBoaWNvbi10cmlhbmdsZS10b3A6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omTIg0KfQ0KDQouZ2x5cGhpY29uLWNvbnNvbGU6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omUIg0KfQ0KDQouZ2x5cGhpY29uLXN1cGVyc2NyaXB0OmJlZm9yZSB7DQogICAgY29udGVudDogIu6JlSINCn0NCg0KLmdseXBoaWNvbi1zdWJzY3JpcHQ6YmVmb3JlIHsNCiAgICBjb250ZW50OiAi7omWIg0KfQ0KDQouZ2x5cGhpY29uLW1lbnUtbGVmdDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZciDQp9DQoNCi5nbHlwaGljb24tbWVudS1yaWdodDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICLuiZgiDQp9DQoNCi5nbHlwaGljb24tbWVudS1kb3duOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JmSINCn0NCg0KLmdseXBoaWNvbi1tZW51LXVwOmJlZm9yZSB7DQogICAgY29udGVudDogIu6JoCINCn0NCg0KKiB7DQogICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94DQp9DQoNCio6YmVmb3JlLA0KKjphZnRlciB7DQogICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94DQp9DQoNCmh0bWwgew0KICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCmJvZHkgew0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBjb2xvcjogIzY2NjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmDQp9DQoNCmlucHV0LA0KYnV0dG9uLA0Kc2VsZWN0LA0KdGV4dGFyZWEgew0KICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Ow0KICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsNCiAgICBsaW5lLWhlaWdodDogaW5oZXJpdA0KfQ0KDQphIHsNCiAgICBjb2xvcjogIzAwMTQ3OTsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUNCn0NCg0KYTpob3ZlciwNCmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjMDAxMDVFOw0KICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lDQp9DQoNCmE6Zm9jdXMgew0KICAgIG91dGxpbmU6IHRoaW4gZG90dGVkOw0KICAgIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsNCiAgICBvdXRsaW5lLW9mZnNldDogLTJweA0KfQ0KDQpmaWd1cmUgew0KICAgIG1hcmdpbjogMA0KfQ0KDQppbWcgew0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUNCn0NCg0KLmltZy1yZXNwb25zaXZlIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtYXgtd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5pbWctcm91bmRlZCB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouaW1nLXRodW1ibmFpbCB7DQogICAgcGFkZGluZzogNHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlLWluLW91dDsNCiAgICAtby10cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2UtaW4tb3V0Ow0KICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZS1pbi1vdXQ7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIG1heC13aWR0aDogMTAwJTsNCiAgICBoZWlnaHQ6IGF1dG8NCn0NCg0KLmltZy1jaXJjbGUgew0KICAgIGJvcmRlci1yYWRpdXM6IDUwJQ0KfQ0KDQpociB7DQogICAgbWFyZ2luLXRvcDogMjFweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJvcmRlcjogMDsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZQ0KfQ0KDQouc3Itb25seSB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHdpZHRoOiAxcHg7DQogICAgaGVpZ2h0OiAxcHg7DQogICAgbWFyZ2luOiAtMXB4Ow0KICAgIHBhZGRpbmc6IDA7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBjbGlwOiByZWN0KDAsIDAsIDAsIDApOw0KICAgIGJvcmRlcjogMA0KfQ0KDQouc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLA0KLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzIHsNCiAgICBwb3NpdGlvbjogc3RhdGljOw0KICAgIHdpZHRoOiBhdXRvOw0KICAgIGhlaWdodDogYXV0bzsNCiAgICBtYXJnaW46IDA7DQogICAgb3ZlcmZsb3c6IHZpc2libGU7DQogICAgY2xpcDogYXV0bw0KfQ0KDQpbcm9sZT0iYnV0dG9uIl0gew0KICAgIGN1cnNvcjogcG9pbnRlcg0KfQ0KDQpoMSwNCmgyLA0KaDMsDQpoNCwNCmg1LA0KaDYsDQouaDEsDQouaDIsDQouaDMsDQouaDQsDQouaDUsDQouaDYgew0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgbGluZS1oZWlnaHQ6IDEuMTsNCiAgICBjb2xvcjogIzIzMjIyMg0KfQ0KDQpoMSBzbWFsbCwNCmgxIC5zbWFsbCwNCmgyIHNtYWxsLA0KaDIgLnNtYWxsLA0KaDMgc21hbGwsDQpoMyAuc21hbGwsDQpoNCBzbWFsbCwNCmg0IC5zbWFsbCwNCmg1IHNtYWxsLA0KaDUgLnNtYWxsLA0KaDYgc21hbGwsDQpoNiAuc21hbGwsDQouaDEgc21hbGwsDQouaDEgLnNtYWxsLA0KLmgyIHNtYWxsLA0KLmgyIC5zbWFsbCwNCi5oMyBzbWFsbCwNCi5oMyAuc21hbGwsDQouaDQgc21hbGwsDQouaDQgLnNtYWxsLA0KLmg1IHNtYWxsLA0KLmg1IC5zbWFsbCwNCi5oNiBzbWFsbCwNCi5oNiAuc21hbGwgew0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgbGluZS1oZWlnaHQ6IDE7DQogICAgY29sb3I6ICM1NTUNCn0NCg0KaDEsDQouaDEsDQpoMiwNCi5oMiwNCmgzLA0KLmgzIHsNCiAgICBtYXJnaW4tdG9wOiAyMXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDEwLjVweA0KfQ0KDQpoMSBzbWFsbCwNCmgxIC5zbWFsbCwNCi5oMSBzbWFsbCwNCi5oMSAuc21hbGwsDQpoMiBzbWFsbCwNCmgyIC5zbWFsbCwNCi5oMiBzbWFsbCwNCi5oMiAuc21hbGwsDQpoMyBzbWFsbCwNCmgzIC5zbWFsbCwNCi5oMyBzbWFsbCwNCi5oMyAuc21hbGwgew0KICAgIGZvbnQtc2l6ZTogNjUlDQp9DQoNCmg0LA0KLmg0LA0KaDUsDQouaDUsDQpoNiwNCi5oNiB7DQogICAgbWFyZ2luLXRvcDogMTAuNXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDEwLjVweA0KfQ0KDQpoNCBzbWFsbCwNCmg0IC5zbWFsbCwNCi5oNCBzbWFsbCwNCi5oNCAuc21hbGwsDQpoNSBzbWFsbCwNCmg1IC5zbWFsbCwNCi5oNSBzbWFsbCwNCi5oNSAuc21hbGwsDQpoNiBzbWFsbCwNCmg2IC5zbWFsbCwNCi5oNiBzbWFsbCwNCi5oNiAuc21hbGwgew0KICAgIGZvbnQtc2l6ZTogNzUlDQp9DQoNCmgxLA0KLmgxIHsNCiAgICBmb250LXNpemU6IDMycHg7DQogICAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KaDIsDQouaDIgew0KICAgIGZvbnQtc2l6ZTogMzRweA0KfQ0KDQpoMywNCi5oMyB7DQogICAgZm9udC1zaXplOiAyNHB4DQp9DQoNCmg0LA0KLmg0IHsNCiAgICBmb250LXNpemU6IDIwcHgNCn0NCg0KaDUsDQouaDUgew0KICAgIGZvbnQtc2l6ZTogMTVweA0KfQ0KDQpoNiwNCi5oNiB7DQogICAgZm9udC1zaXplOiAxNHB4DQp9DQoNCnAgew0KICAgIG1hcmdpbjogMCAwIDEwLjVweA0KfQ0KDQoubGVhZCB7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCiAgICBmb250LXNpemU6IDE3cHg7DQogICAgZm9udC13ZWlnaHQ6IDMwMDsNCiAgICBsaW5lLWhlaWdodDogMS40DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIHsNCiAgICAubGVhZCB7DQogICAgICAgIGZvbnQtc2l6ZTogMjIuNXB4DQogICAgfQ0KfQ0KDQpzbWFsbCwNCi5zbWFsbCB7DQogICAgZm9udC1zaXplOiA4NiUNCn0NCg0KbWFyaywNCi5tYXJrIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFlYmNjOw0KICAgIHBhZGRpbmc6IC4yZW0NCn0NCg0KLnRleHQtbGVmdCB7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQoudGV4dC1yaWdodCB7DQogICAgdGV4dC1hbGlnbjogcmlnaHQNCn0NCg0KLnRleHQtY2VudGVyIHsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXINCn0NCg0KLnRleHQtanVzdGlmeSB7DQogICAgdGV4dC1hbGlnbjoganVzdGlmeQ0KfQ0KDQoudGV4dC1ub3dyYXAgew0KICAgIHdoaXRlLXNwYWNlOiBub3dyYXANCn0NCg0KLnRleHQtbG93ZXJjYXNlIHsNCiAgICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlDQp9DQoNCi50ZXh0LXVwcGVyY2FzZSwNCi5pbml0aWFsaXNtIHsNCiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlDQp9DQoNCi50ZXh0LWNhcGl0YWxpemUgew0KICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplDQp9DQoNCi50ZXh0LW11dGVkIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoudGV4dC1wcmltYXJ5IHsNCiAgICBjb2xvcjogIzJmNWZlZg0KfQ0KDQphLnRleHQtcHJpbWFyeTpob3ZlciwNCmEudGV4dC1wcmltYXJ5OmZvY3VzIHsNCiAgICBjb2xvcjogIzExNDNkYQ0KfQ0KDQoudGV4dC1zdWNjZXNzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLnRleHQtc3VjY2Vzczpob3ZlciwNCmEudGV4dC1zdWNjZXNzOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQoudGV4dC1pbmZvIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLnRleHQtaW5mbzpob3ZlciwNCmEudGV4dC1pbmZvOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQoudGV4dC13YXJuaW5nIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLnRleHQtd2FybmluZzpob3ZlciwNCmEudGV4dC13YXJuaW5nOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQoudGV4dC1kYW5nZXIgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCmEudGV4dC1kYW5nZXI6aG92ZXIsDQphLnRleHQtZGFuZ2VyOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYmctcHJpbWFyeSB7DQogICAgY29sb3I6ICNmZmYNCn0NCg0KLmJnLXByaW1hcnkgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWYNCn0NCg0KYS5iZy1wcmltYXJ5OmhvdmVyLA0KYS5iZy1wcmltYXJ5OmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0M2RhDQp9DQoNCi5iZy1zdWNjZXNzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZlOWM2DQp9DQoNCmEuYmctc3VjY2Vzczpob3ZlciwNCmEuYmctc3VjY2Vzczpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZGJhMQ0KfQ0KDQouYmctaW5mbyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZThmMQ0KfQ0KDQphLmJnLWluZm86aG92ZXIsDQphLmJnLWluZm86Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM5MmRhZTgNCn0NCg0KLmJnLXdhcm5pbmcgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWViY2MNCn0NCg0KYS5iZy13YXJuaW5nOmhvdmVyLA0KYS5iZy13YXJuaW5nOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVkOTllDQp9DQoNCi5iZy1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjZDENCn0NCg0KYS5iZy1kYW5nZXI6aG92ZXIsDQphLmJnLWRhbmdlcjpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkYTdiMA0KfQ0KDQoucGFnZS1oZWFkZXIgew0KICAgIHBhZGRpbmctYm90dG9tOiA5LjVweDsNCiAgICBtYXJnaW46IDQycHggMCAyMXB4Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlDQp9DQoNCnVsLA0Kb2wgew0KICAgIG1hcmdpbi10b3A6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMTAuNXB4DQp9DQoNCnVsIHVsLA0KdWwgb2wsDQpvbCB1bCwNCm9sIG9sIHsNCiAgICBtYXJnaW4tYm90dG9tOiAwDQp9DQoNCi5saXN0LXVuc3R5bGVkIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZQ0KfQ0KDQoubGlzdC1pbmxpbmUgew0KICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICBsaXN0LXN0eWxlOiBub25lOw0KICAgIG1hcmdpbi1sZWZ0OiAtNXB4DQp9DQoNCi5saXN0LWlubGluZT5saSB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIHBhZGRpbmctbGVmdDogNXB4Ow0KICAgIHBhZGRpbmctcmlnaHQ6IDVweA0KfQ0KDQpkbCB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4DQp9DQoNCmR0LA0KZGQgew0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3DQp9DQoNCmR0IHsNCiAgICBmb250LXdlaWdodDogYm9sZA0KfQ0KDQpkZCB7DQogICAgbWFyZ2luLWxlZnQ6IDANCn0NCg0KLmRsLWhvcml6b250YWwgZGQ6YmVmb3JlLA0KLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouZGwtaG9yaXpvbnRhbCBkZDphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAuZGwtaG9yaXpvbnRhbCBkdCB7DQogICAgICAgIGZsb2F0OiBsZWZ0Ow0KICAgICAgICB3aWR0aDogMTYwcHg7DQogICAgICAgIGNsZWFyOiBsZWZ0Ow0KICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsNCiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXANCiAgICB9DQoNCiAgICAuZGwtaG9yaXpvbnRhbCBkZCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxODBweA0KICAgIH0NCn0NCg0KYWJiclt0aXRsZV0sDQphYmJyW2RhdGEtb3JpZ2luYWwtdGl0bGVdIHsNCiAgICBjdXJzb3I6IGhlbHA7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjNzc3DQp9DQoNCi5pbml0aWFsaXNtIHsNCiAgICBmb250LXNpemU6IDkwJQ0KfQ0KDQpibG9ja3F1b3RlIHsNCiAgICBwYWRkaW5nOiAxMC41cHggMjFweDsNCiAgICBtYXJnaW46IDAgMCAyMXB4Ow0KICAgIGZvbnQtc2l6ZTogMTguNzVweDsNCiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNlZWUNCn0NCg0KYmxvY2txdW90ZSBwOmxhc3QtY2hpbGQsDQpibG9ja3F1b3RlIHVsOmxhc3QtY2hpbGQsDQpibG9ja3F1b3RlIG9sOmxhc3QtY2hpbGQgew0KICAgIG1hcmdpbi1ib3R0b206IDANCn0NCg0KYmxvY2txdW90ZSBmb290ZXIsDQpibG9ja3F1b3RlIHNtYWxsLA0KYmxvY2txdW90ZSAuc21hbGwgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGZvbnQtc2l6ZTogODAlOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIGNvbG9yOiAjNzc3DQp9DQoNCmJsb2NrcXVvdGUgZm9vdGVyOmJlZm9yZSwNCmJsb2NrcXVvdGUgc21hbGw6YmVmb3JlLA0KYmxvY2txdW90ZSAuc21hbGw6YmVmb3JlIHsNCiAgICBjb250ZW50OiAn4oCUwqAnDQp9DQoNCi5ibG9ja3F1b3RlLXJldmVyc2UsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgew0KICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICNlZWU7DQogICAgYm9yZGVyLWxlZnQ6IDA7DQogICAgdGV4dC1hbGlnbjogcmlnaHQNCn0NCg0KLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YmVmb3JlLA0KLmJsb2NrcXVvdGUtcmV2ZXJzZSBzbWFsbDpiZWZvcmUsDQouYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDpiZWZvcmUsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmJlZm9yZSwNCmJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmUsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgLnNtYWxsOmJlZm9yZSB7DQogICAgY29udGVudDogJycNCn0NCg0KLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YWZ0ZXIsDQouYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmFmdGVyLA0KLmJsb2NrcXVvdGUtcmV2ZXJzZSAuc21hbGw6YWZ0ZXIsDQpibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmFmdGVyLA0KYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVyLA0KYmxvY2txdW90ZS5wdWxsLXJpZ2h0IC5zbWFsbDphZnRlciB7DQogICAgY29udGVudDogJ8Kg4oCUJw0KfQ0KDQphZGRyZXNzIHsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1Nw0KfQ0KDQpjb2RlLA0Ka2JkLA0KcHJlLA0Kc2FtcCB7DQogICAgZm9udC1mYW1pbHk6IE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UNCn0NCg0KY29kZSB7DQogICAgcGFkZGluZzogMnB4IDRweDsNCiAgICBmb250LXNpemU6IDkwJTsNCiAgICBjb2xvcjogI2M3MjU0ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmMmY0Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0Ka2JkIHsNCiAgICBwYWRkaW5nOiAycHggNHB4Ow0KICAgIGZvbnQtc2l6ZTogOTAlOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIC4yNSkNCn0NCg0Ka2JkIGtiZCB7DQogICAgcGFkZGluZzogMDsNCiAgICBmb250LXNpemU6IDEwMCU7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgYm94LXNoYWRvdzogbm9uZQ0KfQ0KDQpwcmUgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IDEwcHg7DQogICAgbWFyZ2luOiAwIDAgMTAuNXB4Ow0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7DQogICAgd29yZC13cmFwOiBicmVhay13b3JkOw0KICAgIGNvbG9yOiAjMzMzOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCnByZSBjb2RlIHsNCiAgICBwYWRkaW5nOiAwOw0KICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsNCiAgICBjb2xvcjogaW5oZXJpdDsNCiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoucHJlLXNjcm9sbGFibGUgew0KICAgIG1heC1oZWlnaHQ6IDM0MHB4Ow0KICAgIG92ZXJmbG93LXk6IHNjcm9sbA0KfQ0KDQouY29udGFpbmVyIHsNCiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87DQogICAgbWFyZ2luLWxlZnQ6IGF1dG87DQogICAgcGFkZGluZy1sZWZ0OiAxNXB4Ow0KICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQp9DQoNCi5jb250YWluZXI6YmVmb3JlLA0KLmNvbnRhaW5lcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5jb250YWluZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIHsNCiAgICAuY29udGFpbmVyIHsNCiAgICAgICAgd2lkdGg6IDc1MHB4DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSB7DQogICAgLmNvbnRhaW5lciB7DQogICAgICAgIHdpZHRoOiA5NzBweA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAuY29udGFpbmVyIHsNCiAgICAgICAgd2lkdGg6IDExNzBweA0KICAgIH0NCn0NCg0KLmNvbnRhaW5lci1mbHVpZCB7DQogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICAgIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICAgIHBhZGRpbmctbGVmdDogMTVweDsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4DQp9DQoNCi5jb250YWluZXItZmx1aWQ6YmVmb3JlLA0KLmNvbnRhaW5lci1mbHVpZDphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5jb250YWluZXItZmx1aWQ6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5yb3cgew0KICAgIG1hcmdpbi1sZWZ0OiAtMTVweDsNCiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4DQp9DQoNCi5yb3c6YmVmb3JlLA0KLnJvdzphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5yb3c6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5jb2wteHMtMSwNCi5jb2wtc20tMSwNCi5jb2wtbWQtMSwNCi5jb2wtbGctMSwNCi5jb2wteHMtMiwNCi5jb2wtc20tMiwNCi5jb2wtbWQtMiwNCi5jb2wtbGctMiwNCi5jb2wteHMtMywNCi5jb2wtc20tMywNCi5jb2wtbWQtMywNCi5jb2wtbGctMywNCi5jb2wteHMtNCwNCi5jb2wtc20tNCwNCi5jb2wtbWQtNCwNCi5jb2wtbGctNCwNCi5jb2wteHMtNSwNCi5jb2wtc20tNSwNCi5jb2wtbWQtNSwNCi5jb2wtbGctNSwNCi5jb2wteHMtNiwNCi5jb2wtc20tNiwNCi5jb2wtbWQtNiwNCi5jb2wtbGctNiwNCi5jb2wteHMtNywNCi5jb2wtc20tNywNCi5jb2wtbWQtNywNCi5jb2wtbGctNywNCi5jb2wteHMtOCwNCi5jb2wtc20tOCwNCi5jb2wtbWQtOCwNCi5jb2wtbGctOCwNCi5jb2wteHMtOSwNCi5jb2wtc20tOSwNCi5jb2wtbWQtOSwNCi5jb2wtbGctOSwNCi5jb2wteHMtMTAsDQouY29sLXNtLTEwLA0KLmNvbC1tZC0xMCwNCi5jb2wtbGctMTAsDQouY29sLXhzLTExLA0KLmNvbC1zbS0xMSwNCi5jb2wtbWQtMTEsDQouY29sLWxnLTExLA0KLmNvbC14cy0xMiwNCi5jb2wtc20tMTIsDQouY29sLW1kLTEyLA0KLmNvbC1sZy0xMiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIG1pbi1oZWlnaHQ6IDFweDsNCiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7DQogICAgcGFkZGluZy1yaWdodDogMTVweA0KfQ0KDQouY29sLXhzLTEsDQouY29sLXhzLTIsDQouY29sLXhzLTMsDQouY29sLXhzLTQsDQouY29sLXhzLTUsDQouY29sLXhzLTYsDQouY29sLXhzLTcsDQouY29sLXhzLTgsDQouY29sLXhzLTksDQouY29sLXhzLTEwLA0KLmNvbC14cy0xMSwNCi5jb2wteHMtMTIgew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5jb2wteHMtMSB7DQogICAgd2lkdGg6IDguMzMzMzMlDQp9DQoNCi5jb2wteHMtMiB7DQogICAgd2lkdGg6IDE2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLTMgew0KICAgIHdpZHRoOiAyNSUNCn0NCg0KLmNvbC14cy00IHsNCiAgICB3aWR0aDogMzMuMzMzMzMlDQp9DQoNCi5jb2wteHMtNSB7DQogICAgd2lkdGg6IDQxLjY2NjY3JQ0KfQ0KDQouY29sLXhzLTYgew0KICAgIHdpZHRoOiA1MCUNCn0NCg0KLmNvbC14cy03IHsNCiAgICB3aWR0aDogNTguMzMzMzMlDQp9DQoNCi5jb2wteHMtOCB7DQogICAgd2lkdGg6IDY2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLTkgew0KICAgIHdpZHRoOiA3NSUNCn0NCg0KLmNvbC14cy0xMCB7DQogICAgd2lkdGg6IDgzLjMzMzMzJQ0KfQ0KDQouY29sLXhzLTExIHsNCiAgICB3aWR0aDogOTEuNjY2NjclDQp9DQoNCi5jb2wteHMtMTIgew0KICAgIHdpZHRoOiAxMDAlDQp9DQoNCi5jb2wteHMtcHVsbC0wIHsNCiAgICByaWdodDogYXV0bw0KfQ0KDQouY29sLXhzLXB1bGwtMSB7DQogICAgcmlnaHQ6IDguMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVsbC0yIHsNCiAgICByaWdodDogMTYuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVsbC0zIHsNCiAgICByaWdodDogMjUlDQp9DQoNCi5jb2wteHMtcHVsbC00IHsNCiAgICByaWdodDogMzMuMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVsbC01IHsNCiAgICByaWdodDogNDEuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVsbC02IHsNCiAgICByaWdodDogNTAlDQp9DQoNCi5jb2wteHMtcHVsbC03IHsNCiAgICByaWdodDogNTguMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVsbC04IHsNCiAgICByaWdodDogNjYuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVsbC05IHsNCiAgICByaWdodDogNzUlDQp9DQoNCi5jb2wteHMtcHVsbC0xMCB7DQogICAgcmlnaHQ6IDgzLjMzMzMzJQ0KfQ0KDQouY29sLXhzLXB1bGwtMTEgew0KICAgIHJpZ2h0OiA5MS42NjY2NyUNCn0NCg0KLmNvbC14cy1wdWxsLTEyIHsNCiAgICByaWdodDogMTAwJQ0KfQ0KDQouY29sLXhzLXB1c2gtMCB7DQogICAgbGVmdDogYXV0bw0KfQ0KDQouY29sLXhzLXB1c2gtMSB7DQogICAgbGVmdDogOC4zMzMzMyUNCn0NCg0KLmNvbC14cy1wdXNoLTIgew0KICAgIGxlZnQ6IDE2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLXB1c2gtMyB7DQogICAgbGVmdDogMjUlDQp9DQoNCi5jb2wteHMtcHVzaC00IHsNCiAgICBsZWZ0OiAzMy4zMzMzMyUNCn0NCg0KLmNvbC14cy1wdXNoLTUgew0KICAgIGxlZnQ6IDQxLjY2NjY3JQ0KfQ0KDQouY29sLXhzLXB1c2gtNiB7DQogICAgbGVmdDogNTAlDQp9DQoNCi5jb2wteHMtcHVzaC03IHsNCiAgICBsZWZ0OiA1OC4zMzMzMyUNCn0NCg0KLmNvbC14cy1wdXNoLTggew0KICAgIGxlZnQ6IDY2LjY2NjY3JQ0KfQ0KDQouY29sLXhzLXB1c2gtOSB7DQogICAgbGVmdDogNzUlDQp9DQoNCi5jb2wteHMtcHVzaC0xMCB7DQogICAgbGVmdDogODMuMzMzMzMlDQp9DQoNCi5jb2wteHMtcHVzaC0xMSB7DQogICAgbGVmdDogOTEuNjY2NjclDQp9DQoNCi5jb2wteHMtcHVzaC0xMiB7DQogICAgbGVmdDogMTAwJQ0KfQ0KDQouY29sLXhzLW9mZnNldC0wIHsNCiAgICBtYXJnaW4tbGVmdDogMCUNCn0NCg0KLmNvbC14cy1vZmZzZXQtMSB7DQogICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlDQp9DQoNCi5jb2wteHMtb2Zmc2V0LTIgew0KICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyUNCn0NCg0KLmNvbC14cy1vZmZzZXQtMyB7DQogICAgbWFyZ2luLWxlZnQ6IDI1JQ0KfQ0KDQouY29sLXhzLW9mZnNldC00IHsNCiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlDQp9DQoNCi5jb2wteHMtb2Zmc2V0LTUgew0KICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyUNCn0NCg0KLmNvbC14cy1vZmZzZXQtNiB7DQogICAgbWFyZ2luLWxlZnQ6IDUwJQ0KfQ0KDQouY29sLXhzLW9mZnNldC03IHsNCiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMlDQp9DQoNCi5jb2wteHMtb2Zmc2V0LTggew0KICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyUNCn0NCg0KLmNvbC14cy1vZmZzZXQtOSB7DQogICAgbWFyZ2luLWxlZnQ6IDc1JQ0KfQ0KDQouY29sLXhzLW9mZnNldC0xMCB7DQogICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJQ0KfQ0KDQouY29sLXhzLW9mZnNldC0xMSB7DQogICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY3JQ0KfQ0KDQouY29sLXhzLW9mZnNldC0xMiB7DQogICAgbWFyZ2luLWxlZnQ6IDEwMCUNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgew0KDQogICAgLmNvbC1zbS0xLA0KICAgIC5jb2wtc20tMiwNCiAgICAuY29sLXNtLTMsDQogICAgLmNvbC1zbS00LA0KICAgIC5jb2wtc20tNSwNCiAgICAuY29sLXNtLTYsDQogICAgLmNvbC1zbS03LA0KICAgIC5jb2wtc20tOCwNCiAgICAuY29sLXNtLTksDQogICAgLmNvbC1zbS0xMCwNCiAgICAuY29sLXNtLTExLA0KICAgIC5jb2wtc20tMTIgew0KICAgICAgICBmbG9hdDogbGVmdA0KICAgIH0NCg0KICAgIC5jb2wtc20tMSB7DQogICAgICAgIHdpZHRoOiA4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tMiB7DQogICAgICAgIHdpZHRoOiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTMgew0KICAgICAgICB3aWR0aDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1zbS00IHsNCiAgICAgICAgd2lkdGg6IDMzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tNSB7DQogICAgICAgIHdpZHRoOiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTYgew0KICAgICAgICB3aWR0aDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1zbS03IHsNCiAgICAgICAgd2lkdGg6IDU4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tOCB7DQogICAgICAgIHdpZHRoOiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTkgew0KICAgICAgICB3aWR0aDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1zbS0xMCB7DQogICAgICAgIHdpZHRoOiA4My4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLXNtLTExIHsNCiAgICAgICAgd2lkdGg6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tMTIgew0KICAgICAgICB3aWR0aDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0wIHsNCiAgICAgICAgcmlnaHQ6IGF1dG8NCiAgICB9DQoNCiAgICAuY29sLXNtLXB1bGwtMSB7DQogICAgICAgIHJpZ2h0OiA4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0yIHsNCiAgICAgICAgcmlnaHQ6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0zIHsNCiAgICAgICAgcmlnaHQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC00IHsNCiAgICAgICAgcmlnaHQ6IDMzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC01IHsNCiAgICAgICAgcmlnaHQ6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC02IHsNCiAgICAgICAgcmlnaHQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC03IHsNCiAgICAgICAgcmlnaHQ6IDU4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC04IHsNCiAgICAgICAgcmlnaHQ6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC05IHsNCiAgICAgICAgcmlnaHQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVsbC0xMCB7DQogICAgICAgIHJpZ2h0OiA4My4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1bGwtMTEgew0KICAgICAgICByaWdodDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdWxsLTEyIHsNCiAgICAgICAgcmlnaHQ6IDEwMCUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtMCB7DQogICAgICAgIGxlZnQ6IGF1dG8NCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtMSB7DQogICAgICAgIGxlZnQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdXNoLTIgew0KICAgICAgICBsZWZ0OiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtMyB7DQogICAgICAgIGxlZnQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC00IHsNCiAgICAgICAgbGVmdDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdXNoLTUgew0KICAgICAgICBsZWZ0OiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtNiB7DQogICAgICAgIGxlZnQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC03IHsNCiAgICAgICAgbGVmdDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1zbS1wdXNoLTggew0KICAgICAgICBsZWZ0OiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLXB1c2gtOSB7DQogICAgICAgIGxlZnQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC0xMCB7DQogICAgICAgIGxlZnQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC0xMSB7DQogICAgICAgIGxlZnQ6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtc20tcHVzaC0xMiB7DQogICAgICAgIGxlZnQ6IDEwMCUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0wIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDAlDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtMSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tb2Zmc2V0LTIgew0KICAgICAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtMyB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAyNSUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC00IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tb2Zmc2V0LTUgew0KICAgICAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtNiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA1MCUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC03IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtc20tb2Zmc2V0LTggew0KICAgICAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1zbS1vZmZzZXQtOSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA3NSUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0xMCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0xMSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLXNtLW9mZnNldC0xMiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxMDAlDQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSB7DQoNCiAgICAuY29sLW1kLTEsDQogICAgLmNvbC1tZC0yLA0KICAgIC5jb2wtbWQtMywNCiAgICAuY29sLW1kLTQsDQogICAgLmNvbC1tZC01LA0KICAgIC5jb2wtbWQtNiwNCiAgICAuY29sLW1kLTcsDQogICAgLmNvbC1tZC04LA0KICAgIC5jb2wtbWQtOSwNCiAgICAuY29sLW1kLTEwLA0KICAgIC5jb2wtbWQtMTEsDQogICAgLmNvbC1tZC0xMiB7DQogICAgICAgIGZsb2F0OiBsZWZ0DQogICAgfQ0KDQogICAgLmNvbC1tZC0xIHsNCiAgICAgICAgd2lkdGg6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC0yIHsNCiAgICAgICAgd2lkdGg6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtMyB7DQogICAgICAgIHdpZHRoOiAyNSUNCiAgICB9DQoNCiAgICAuY29sLW1kLTQgew0KICAgICAgICB3aWR0aDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC01IHsNCiAgICAgICAgd2lkdGg6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtNiB7DQogICAgICAgIHdpZHRoOiA1MCUNCiAgICB9DQoNCiAgICAuY29sLW1kLTcgew0KICAgICAgICB3aWR0aDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC04IHsNCiAgICAgICAgd2lkdGg6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtOSB7DQogICAgICAgIHdpZHRoOiA3NSUNCiAgICB9DQoNCiAgICAuY29sLW1kLTEwIHsNCiAgICAgICAgd2lkdGg6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtMTEgew0KICAgICAgICB3aWR0aDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC0xMiB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTAgew0KICAgICAgICByaWdodDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVsbC0xIHsNCiAgICAgICAgcmlnaHQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTIgew0KICAgICAgICByaWdodDogMTYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTMgew0KICAgICAgICByaWdodDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTQgew0KICAgICAgICByaWdodDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTUgew0KICAgICAgICByaWdodDogNDEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTYgew0KICAgICAgICByaWdodDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTcgew0KICAgICAgICByaWdodDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTggew0KICAgICAgICByaWdodDogNjYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTkgew0KICAgICAgICByaWdodDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdWxsLTEwIHsNCiAgICAgICAgcmlnaHQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVsbC0xMSB7DQogICAgICAgIHJpZ2h0OiA5MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1bGwtMTIgew0KICAgICAgICByaWdodDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC0wIHsNCiAgICAgICAgbGVmdDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC0xIHsNCiAgICAgICAgbGVmdDogOC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1c2gtMiB7DQogICAgICAgIGxlZnQ6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC0zIHsNCiAgICAgICAgbGVmdDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTQgew0KICAgICAgICBsZWZ0OiAzMy4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1c2gtNSB7DQogICAgICAgIGxlZnQ6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC02IHsNCiAgICAgICAgbGVmdDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTcgew0KICAgICAgICBsZWZ0OiA1OC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLW1kLXB1c2gtOCB7DQogICAgICAgIGxlZnQ6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtcHVzaC05IHsNCiAgICAgICAgbGVmdDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTEwIHsNCiAgICAgICAgbGVmdDogODMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTExIHsNCiAgICAgICAgbGVmdDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1tZC1wdXNoLTEyIHsNCiAgICAgICAgbGVmdDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTAgew0KICAgICAgICBtYXJnaW4tbGVmdDogMCUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC0xIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1vZmZzZXQtMiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC0zIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTQgew0KICAgICAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1vZmZzZXQtNSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC02IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTcgew0KICAgICAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1tZC1vZmZzZXQtOCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLW1kLW9mZnNldC05IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTEwIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTExIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbWQtb2Zmc2V0LTEyIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMCUNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQoNCiAgICAuY29sLWxnLTEsDQogICAgLmNvbC1sZy0yLA0KICAgIC5jb2wtbGctMywNCiAgICAuY29sLWxnLTQsDQogICAgLmNvbC1sZy01LA0KICAgIC5jb2wtbGctNiwNCiAgICAuY29sLWxnLTcsDQogICAgLmNvbC1sZy04LA0KICAgIC5jb2wtbGctOSwNCiAgICAuY29sLWxnLTEwLA0KICAgIC5jb2wtbGctMTEsDQogICAgLmNvbC1sZy0xMiB7DQogICAgICAgIGZsb2F0OiBsZWZ0DQogICAgfQ0KDQogICAgLmNvbC1sZy0xIHsNCiAgICAgICAgd2lkdGg6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy0yIHsNCiAgICAgICAgd2lkdGg6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctMyB7DQogICAgICAgIHdpZHRoOiAyNSUNCiAgICB9DQoNCiAgICAuY29sLWxnLTQgew0KICAgICAgICB3aWR0aDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy01IHsNCiAgICAgICAgd2lkdGg6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctNiB7DQogICAgICAgIHdpZHRoOiA1MCUNCiAgICB9DQoNCiAgICAuY29sLWxnLTcgew0KICAgICAgICB3aWR0aDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy04IHsNCiAgICAgICAgd2lkdGg6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctOSB7DQogICAgICAgIHdpZHRoOiA3NSUNCiAgICB9DQoNCiAgICAuY29sLWxnLTEwIHsNCiAgICAgICAgd2lkdGg6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctMTEgew0KICAgICAgICB3aWR0aDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy0xMiB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTAgew0KICAgICAgICByaWdodDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVsbC0xIHsNCiAgICAgICAgcmlnaHQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTIgew0KICAgICAgICByaWdodDogMTYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTMgew0KICAgICAgICByaWdodDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTQgew0KICAgICAgICByaWdodDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTUgew0KICAgICAgICByaWdodDogNDEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTYgew0KICAgICAgICByaWdodDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTcgew0KICAgICAgICByaWdodDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTggew0KICAgICAgICByaWdodDogNjYuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTkgew0KICAgICAgICByaWdodDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdWxsLTEwIHsNCiAgICAgICAgcmlnaHQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVsbC0xMSB7DQogICAgICAgIHJpZ2h0OiA5MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1bGwtMTIgew0KICAgICAgICByaWdodDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC0wIHsNCiAgICAgICAgbGVmdDogYXV0bw0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC0xIHsNCiAgICAgICAgbGVmdDogOC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1c2gtMiB7DQogICAgICAgIGxlZnQ6IDE2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC0zIHsNCiAgICAgICAgbGVmdDogMjUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTQgew0KICAgICAgICBsZWZ0OiAzMy4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1c2gtNSB7DQogICAgICAgIGxlZnQ6IDQxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC02IHsNCiAgICAgICAgbGVmdDogNTAlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTcgew0KICAgICAgICBsZWZ0OiA1OC4zMzMzMyUNCiAgICB9DQoNCiAgICAuY29sLWxnLXB1c2gtOCB7DQogICAgICAgIGxlZnQ6IDY2LjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctcHVzaC05IHsNCiAgICAgICAgbGVmdDogNzUlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTEwIHsNCiAgICAgICAgbGVmdDogODMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTExIHsNCiAgICAgICAgbGVmdDogOTEuNjY2NjclDQogICAgfQ0KDQogICAgLmNvbC1sZy1wdXNoLTEyIHsNCiAgICAgICAgbGVmdDogMTAwJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTAgew0KICAgICAgICBtYXJnaW4tbGVmdDogMCUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC0xIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1vZmZzZXQtMiB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC0zIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDI1JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTQgew0KICAgICAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1vZmZzZXQtNSB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC02IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDUwJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTcgew0KICAgICAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMlDQogICAgfQ0KDQogICAgLmNvbC1sZy1vZmZzZXQtOCB7DQogICAgICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyUNCiAgICB9DQoNCiAgICAuY29sLWxnLW9mZnNldC05IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDc1JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTEwIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTExIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY3JQ0KICAgIH0NCg0KICAgIC5jb2wtbGctb2Zmc2V0LTEyIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMCUNCiAgICB9DQp9DQoNCnRhYmxlIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQpjYXB0aW9uIHsNCiAgICBwYWRkaW5nLXRvcDogOHB4Ow0KICAgIHBhZGRpbmctYm90dG9tOiA4cHg7DQogICAgY29sb3I6ICM2NjY7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQp0aCB7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQoudGFibGUgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIG1heC13aWR0aDogMTAwJTsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4DQp9DQoNCi50YWJsZT50aGVhZD50cj50aCwNCi50YWJsZT50aGVhZD50cj50ZCwNCi50YWJsZT50Ym9keT50cj50aCwNCi50YWJsZT50Ym9keT50cj50ZCwNCi50YWJsZT50Zm9vdD50cj50aCwNCi50YWJsZT50Zm9vdD50cj50ZCB7DQogICAgcGFkZGluZzogOHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7DQogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQNCn0NCg0KLnRhYmxlPnRoZWFkPnRyPnRoIHsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOw0KICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGRkDQp9DQoNCi50YWJsZT5jYXB0aW9uK3RoZWFkPnRyOmZpcnN0LWNoaWxkPnRoLA0KLnRhYmxlPmNhcHRpb24rdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsDQoudGFibGU+Y29sZ3JvdXArdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGgsDQoudGFibGU+Y29sZ3JvdXArdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsDQoudGFibGU+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQ+dGgsDQoudGFibGU+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQ+dGQgew0KICAgIGJvcmRlci10b3A6IDANCn0NCg0KLnRhYmxlPnRib2R5K3Rib2R5IHsNCiAgICBib3JkZXItdG9wOiAycHggc29saWQgI2RkZA0KfQ0KDQoudGFibGUgLnRhYmxlIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmDQp9DQoNCi50YWJsZS1jb25kZW5zZWQ+dGhlYWQ+dHI+dGgsDQoudGFibGUtY29uZGVuc2VkPnRoZWFkPnRyPnRkLA0KLnRhYmxlLWNvbmRlbnNlZD50Ym9keT50cj50aCwNCi50YWJsZS1jb25kZW5zZWQ+dGJvZHk+dHI+dGQsDQoudGFibGUtY29uZGVuc2VkPnRmb290PnRyPnRoLA0KLnRhYmxlLWNvbmRlbnNlZD50Zm9vdD50cj50ZCB7DQogICAgcGFkZGluZzogNXB4DQp9DQoNCi50YWJsZS1ib3JkZXJlZCB7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZA0KfQ0KDQoudGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGgsDQoudGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQsDQoudGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGgsDQoudGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGQsDQoudGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGgsDQoudGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGQgew0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQNCn0NCg0KLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoLA0KLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkIHsNCiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHgNCn0NCg0KLnRhYmxlLXN0cmlwZWQ+dGJvZHk+dHI6bnRoLW9mLXR5cGUob2RkKSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYg0KfQ0KDQoudGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUNCn0NCg0KdGFibGUgY29sW2NsYXNzKj0iY29sLSJdIHsNCiAgICBwb3NpdGlvbjogc3RhdGljOw0KICAgIGZsb2F0OiBub25lOw0KICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbg0KfQ0KDQp0YWJsZSB0ZFtjbGFzcyo9ImNvbC0iXSwNCnRhYmxlIHRoW2NsYXNzKj0iY29sLSJdIHsNCiAgICBwb3NpdGlvbjogc3RhdGljOw0KICAgIGZsb2F0OiBub25lOw0KICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwNCn0NCg0KLnRhYmxlPnRoZWFkPnRyPnRkLmFjdGl2ZSwNCi50YWJsZT50aGVhZD50cj50aC5hY3RpdmUsDQoudGFibGU+dGhlYWQ+dHIuYWN0aXZlPnRkLA0KLnRhYmxlPnRoZWFkPnRyLmFjdGl2ZT50aCwNCi50YWJsZT50Ym9keT50cj50ZC5hY3RpdmUsDQoudGFibGU+dGJvZHk+dHI+dGguYWN0aXZlLA0KLnRhYmxlPnRib2R5PnRyLmFjdGl2ZT50ZCwNCi50YWJsZT50Ym9keT50ci5hY3RpdmU+dGgsDQoudGFibGU+dGZvb3Q+dHI+dGQuYWN0aXZlLA0KLnRhYmxlPnRmb290PnRyPnRoLmFjdGl2ZSwNCi50YWJsZT50Zm9vdD50ci5hY3RpdmU+dGQsDQoudGFibGU+dGZvb3Q+dHIuYWN0aXZlPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1DQp9DQoNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50ZC5hY3RpdmU6aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguYWN0aXZlOmhvdmVyLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLmFjdGl2ZTpob3Zlcj50ZCwNCi50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uYWN0aXZlLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLmFjdGl2ZTpob3Zlcj50aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZThlOA0KfQ0KDQoudGFibGU+dGhlYWQ+dHI+dGQuc3VjY2VzcywNCi50YWJsZT50aGVhZD50cj50aC5zdWNjZXNzLA0KLnRhYmxlPnRoZWFkPnRyLnN1Y2Nlc3M+dGQsDQoudGFibGU+dGhlYWQ+dHIuc3VjY2Vzcz50aCwNCi50YWJsZT50Ym9keT50cj50ZC5zdWNjZXNzLA0KLnRhYmxlPnRib2R5PnRyPnRoLnN1Y2Nlc3MsDQoudGFibGU+dGJvZHk+dHIuc3VjY2Vzcz50ZCwNCi50YWJsZT50Ym9keT50ci5zdWNjZXNzPnRoLA0KLnRhYmxlPnRmb290PnRyPnRkLnN1Y2Nlc3MsDQoudGFibGU+dGZvb3Q+dHI+dGguc3VjY2VzcywNCi50YWJsZT50Zm9vdD50ci5zdWNjZXNzPnRkLA0KLnRhYmxlPnRmb290PnRyLnN1Y2Nlc3M+dGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmU5YzYNCn0NCg0KLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRkLnN1Y2Nlc3M6aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguc3VjY2Vzczpob3ZlciwNCi50YWJsZS1ob3Zlcj50Ym9keT50ci5zdWNjZXNzOmhvdmVyPnRkLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyOmhvdmVyPi5zdWNjZXNzLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLnN1Y2Nlc3M6aG92ZXI+dGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNjOWUyYjQNCn0NCg0KLnRhYmxlPnRoZWFkPnRyPnRkLmluZm8sDQoudGFibGU+dGhlYWQ+dHI+dGguaW5mbywNCi50YWJsZT50aGVhZD50ci5pbmZvPnRkLA0KLnRhYmxlPnRoZWFkPnRyLmluZm8+dGgsDQoudGFibGU+dGJvZHk+dHI+dGQuaW5mbywNCi50YWJsZT50Ym9keT50cj50aC5pbmZvLA0KLnRhYmxlPnRib2R5PnRyLmluZm8+dGQsDQoudGFibGU+dGJvZHk+dHIuaW5mbz50aCwNCi50YWJsZT50Zm9vdD50cj50ZC5pbmZvLA0KLnRhYmxlPnRmb290PnRyPnRoLmluZm8sDQoudGFibGU+dGZvb3Q+dHIuaW5mbz50ZCwNCi50YWJsZT50Zm9vdD50ci5pbmZvPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNlOGYxDQp9DQoNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50ZC5pbmZvOmhvdmVyLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRoLmluZm86aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIuaW5mbzpob3Zlcj50ZCwNCi50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uaW5mbywNCi50YWJsZS1ob3Zlcj50Ym9keT50ci5pbmZvOmhvdmVyPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTdlMWVkDQp9DQoNCi50YWJsZT50aGVhZD50cj50ZC53YXJuaW5nLA0KLnRhYmxlPnRoZWFkPnRyPnRoLndhcm5pbmcsDQoudGFibGU+dGhlYWQ+dHIud2FybmluZz50ZCwNCi50YWJsZT50aGVhZD50ci53YXJuaW5nPnRoLA0KLnRhYmxlPnRib2R5PnRyPnRkLndhcm5pbmcsDQoudGFibGU+dGJvZHk+dHI+dGgud2FybmluZywNCi50YWJsZT50Ym9keT50ci53YXJuaW5nPnRkLA0KLnRhYmxlPnRib2R5PnRyLndhcm5pbmc+dGgsDQoudGFibGU+dGZvb3Q+dHI+dGQud2FybmluZywNCi50YWJsZT50Zm9vdD50cj50aC53YXJuaW5nLA0KLnRhYmxlPnRmb290PnRyLndhcm5pbmc+dGQsDQoudGFibGU+dGZvb3Q+dHIud2FybmluZz50aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZWJjYw0KfQ0KDQoudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQud2FybmluZzpob3ZlciwNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50aC53YXJuaW5nOmhvdmVyLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyLndhcm5pbmc6aG92ZXI+dGQsDQoudGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXI+Lndhcm5pbmcsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIud2FybmluZzpob3Zlcj50aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZTJiNQ0KfQ0KDQoudGFibGU+dGhlYWQ+dHI+dGQuZGFuZ2VyLA0KLnRhYmxlPnRoZWFkPnRyPnRoLmRhbmdlciwNCi50YWJsZT50aGVhZD50ci5kYW5nZXI+dGQsDQoudGFibGU+dGhlYWQ+dHIuZGFuZ2VyPnRoLA0KLnRhYmxlPnRib2R5PnRyPnRkLmRhbmdlciwNCi50YWJsZT50Ym9keT50cj50aC5kYW5nZXIsDQoudGFibGU+dGJvZHk+dHIuZGFuZ2VyPnRkLA0KLnRhYmxlPnRib2R5PnRyLmRhbmdlcj50aCwNCi50YWJsZT50Zm9vdD50cj50ZC5kYW5nZXIsDQoudGFibGU+dGZvb3Q+dHI+dGguZGFuZ2VyLA0KLnRhYmxlPnRmb290PnRyLmRhbmdlcj50ZCwNCi50YWJsZT50Zm9vdD50ci5kYW5nZXI+dGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjZDENCn0NCg0KLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRkLmRhbmdlcjpob3ZlciwNCi50YWJsZS1ob3Zlcj50Ym9keT50cj50aC5kYW5nZXI6aG92ZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIuZGFuZ2VyOmhvdmVyPnRkLA0KLnRhYmxlLWhvdmVyPnRib2R5PnRyOmhvdmVyPi5kYW5nZXIsDQoudGFibGUtaG92ZXI+dGJvZHk+dHIuZGFuZ2VyOmhvdmVyPnRoIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTRiYWMwDQp9DQoNCi50YWJsZS1yZXNwb25zaXZlIHsNCiAgICBvdmVyZmxvdy14OiBhdXRvOw0KICAgIG1pbi1oZWlnaHQ6IC4wMSUNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjdweCkgew0KICAgIC50YWJsZS1yZXNwb25zaXZlIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDE1Ljc1cHg7DQogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsNCiAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQNCiAgICB9DQoNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGUgew0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRoZWFkPnRyPnRoLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50aGVhZD50cj50ZCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGJvZHk+dHI+dGgsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRib2R5PnRyPnRkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50Zm9vdD50cj50aCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGZvb3Q+dHI+dGQgew0KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkIHsNCiAgICAgICAgYm9yZGVyOiAwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmZpcnN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50ZDpmaXJzdC1jaGlsZCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6Zmlyc3QtY2hpbGQsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmZpcnN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpmaXJzdC1jaGlsZCwNCiAgICAudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGQ6Zmlyc3QtY2hpbGQgew0KICAgICAgICBib3JkZXItbGVmdDogMA0KICAgIH0NCg0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50ZDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50aDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpsYXN0LWNoaWxkLA0KICAgIC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50ZDpsYXN0LWNoaWxkIHsNCiAgICAgICAgYm9yZGVyLXJpZ2h0OiAwDQogICAgfQ0KDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGgsDQogICAgLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQgew0KICAgICAgICBib3JkZXItYm90dG9tOiAwDQogICAgfQ0KfQ0KDQpmaWVsZHNldCB7DQogICAgcGFkZGluZzogMDsNCiAgICBtYXJnaW46IDA7DQogICAgYm9yZGVyOiAwOw0KICAgIG1pbi13aWR0aDogMA0KfQ0KDQpsZWdlbmQgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIHBhZGRpbmc6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCiAgICBmb250LXNpemU6IDIyLjVweDsNCiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsNCiAgICBjb2xvcjogIzMzMzsNCiAgICBib3JkZXI6IDA7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTUNCn0NCg0KbGFiZWwgew0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBtYXgtd2lkdGg6IDEwMCU7DQogICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkDQp9DQoNCmlucHV0W3R5cGU9InNlYXJjaCJdIHsNCiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7DQogICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3gNCn0NCg0KaW5wdXRbdHlwZT0icmFkaW8iXSwNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgIG1hcmdpbjogNHB4IDAgMDsNCiAgICBtYXJnaW4tdG9wOiAxcHggXDk7DQogICAgbGluZS1oZWlnaHQ6IG5vcm1hbA0KfQ0KDQppbnB1dFt0eXBlPSJmaWxlIl0gew0KICAgIGRpc3BsYXk6IGJsb2NrDQp9DQoNCmlucHV0W3R5cGU9InJhbmdlIl0gew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAxMDAlDQp9DQoNCnNlbGVjdFttdWx0aXBsZV0sDQpzZWxlY3Rbc2l6ZV0gew0KICAgIGhlaWdodDogYXV0bw0KfQ0KDQppbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXMsDQppbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLA0KaW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1cyB7DQogICAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7DQogICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOw0KICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4DQp9DQoNCm91dHB1dCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZy10b3A6IDdweDsNCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNDI4NTc7DQogICAgY29sb3I6ICM1NTUNCn0NCg0KLmZvcm0tY29udHJvbCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiAzNXB4Ow0KICAgIHBhZGRpbmc6IDZweCAxMnB4Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBjb2xvcjogIzU1NTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSk7DQogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzOw0KICAgIC1vLXRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7DQogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1cw0KfQ0KDQouZm9ybS1jb250cm9sOmZvY3VzIHsNCiAgICBib3JkZXItY29sb3I6ICM2NmFmZTk7DQogICAgb3V0bGluZTogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgLjYpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgLjYpDQp9DQoNCi5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIgew0KICAgIGNvbG9yOiAjNGE0OTQ5Ow0KICAgIG9wYWNpdHk6IDENCn0NCg0KLmZvcm0tY29udHJvbDotbXMtaW5wdXQtcGxhY2Vob2xkZXIgew0KICAgIGNvbG9yOiAjNGE0OTQ5DQp9DQoNCi5mb3JtLWNvbnRyb2w6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgew0KICAgIGNvbG9yOiAjNGE0OTQ5DQp9DQoNCi5mb3JtLWNvbnRyb2w6Oi1tcy1leHBhbmQgew0KICAgIGJvcmRlcjogMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouZm9ybS1jb250cm9sW2Rpc2FibGVkXSwNCi5mb3JtLWNvbnRyb2xbcmVhZG9ubHldLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7DQogICAgb3BhY2l0eTogMQ0KfQ0KDQouZm9ybS1jb250cm9sW2Rpc2FibGVkXSwNCmZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9sIHsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCnRleHRhcmVhLmZvcm0tY29udHJvbCB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCmlucHV0W3R5cGU9InNlYXJjaCJdIHsNCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmUNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7DQoNCiAgICBpbnB1dFt0eXBlPSJkYXRlIl0uZm9ybS1jb250cm9sLA0KICAgIGlucHV0W3R5cGU9InRpbWUiXS5mb3JtLWNvbnRyb2wsDQogICAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5mb3JtLWNvbnRyb2wsDQogICAgaW5wdXRbdHlwZT0ibW9udGgiXS5mb3JtLWNvbnRyb2wgew0KICAgICAgICBsaW5lLWhlaWdodDogMzVweA0KICAgIH0NCg0KICAgIGlucHV0W3R5cGU9ImRhdGUiXS5pbnB1dC1zbSwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0iZGF0ZSJdLmZvcm0tY29udHJvbCwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0iZGF0ZSJdLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPmlucHV0W3R5cGU9ImRhdGUiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9ImRhdGUiXSwNCiAgICBpbnB1dFt0eXBlPSJ0aW1lIl0uaW5wdXQtc20sDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9InRpbWUiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9InRpbWUiXS5pbnB1dC1ncm91cC1hZGRvbiwNCiAgICAuaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj5pbnB1dFt0eXBlPSJ0aW1lIl0uYnRuLA0KICAgIC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPSJ0aW1lIl0sDQogICAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5pbnB1dC1zbSwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sDQogICAgaW5wdXRbdHlwZT0ibW9udGgiXS5pbnB1dC1zbSwNCiAgICAuaW5wdXQtZ3JvdXAtc20+aW5wdXRbdHlwZT0ibW9udGgiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLXNtPmlucHV0W3R5cGU9Im1vbnRoIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0ibW9udGgiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9Im1vbnRoIl0gew0KICAgICAgICBsaW5lLWhlaWdodDogMzFweA0KICAgIH0NCg0KICAgIGlucHV0W3R5cGU9ImRhdGUiXS5pbnB1dC1sZywNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0iZGF0ZSJdLmZvcm0tY29udHJvbCwNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0iZGF0ZSJdLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPmlucHV0W3R5cGU9ImRhdGUiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9ImRhdGUiXSwNCiAgICBpbnB1dFt0eXBlPSJ0aW1lIl0uaW5wdXQtbGcsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9InRpbWUiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9InRpbWUiXS5pbnB1dC1ncm91cC1hZGRvbiwNCiAgICAuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj5pbnB1dFt0eXBlPSJ0aW1lIl0uYnRuLA0KICAgIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPSJ0aW1lIl0sDQogICAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5pbnB1dC1sZywNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLWxnPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sDQogICAgaW5wdXRbdHlwZT0ibW9udGgiXS5pbnB1dC1sZywNCiAgICAuaW5wdXQtZ3JvdXAtbGc+aW5wdXRbdHlwZT0ibW9udGgiXS5mb3JtLWNvbnRyb2wsDQogICAgLmlucHV0LWdyb3VwLWxnPmlucHV0W3R5cGU9Im1vbnRoIl0uaW5wdXQtZ3JvdXAtYWRkb24sDQogICAgLmlucHV0LWdyb3VwLWxnPi5pbnB1dC1ncm91cC1idG4+aW5wdXRbdHlwZT0ibW9udGgiXS5idG4sDQogICAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9Im1vbnRoIl0gew0KICAgICAgICBsaW5lLWhlaWdodDogNDhweA0KICAgIH0NCn0NCg0KLmZvcm0tZ3JvdXAgew0KICAgIG1hcmdpbi1ib3R0b206IDE1cHgNCn0NCg0KLnJhZGlvLA0KLmNoZWNrYm94IHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbWFyZ2luLXRvcDogMTBweDsNCiAgICBtYXJnaW4tYm90dG9tOiAxMHB4DQp9DQoNCi5yYWRpbyBsYWJlbCwNCi5jaGVja2JveCBsYWJlbCB7DQogICAgbWluLWhlaWdodDogMjFweDsNCiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBmb250LXdlaWdodDogbm9ybWFsOw0KICAgIGN1cnNvcjogcG9pbnRlcg0KfQ0KDQoucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwNCi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT0icmFkaW8iXSwNCi5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJdLA0KLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgbWFyZ2luLWxlZnQ6IC0yMHB4Ow0KICAgIG1hcmdpbi10b3A6IDRweCBcOQ0KfQ0KDQoucmFkaW8rLnJhZGlvLA0KLmNoZWNrYm94Ky5jaGVja2JveCB7DQogICAgbWFyZ2luLXRvcDogLTVweA0KfQ0KDQoucmFkaW8taW5saW5lLA0KLmNoZWNrYm94LWlubGluZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgY3Vyc29yOiBwb2ludGVyDQp9DQoNCi5yYWRpby1pbmxpbmUrLnJhZGlvLWlubGluZSwNCi5jaGVja2JveC1pbmxpbmUrLmNoZWNrYm94LWlubGluZSB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tbGVmdDogMTBweA0KfQ0KDQppbnB1dFt0eXBlPSJyYWRpbyJdW2Rpc2FibGVkXSwNCmlucHV0W3R5cGU9InJhZGlvIl0uZGlzYWJsZWQsDQpmaWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT0icmFkaW8iXSwNCmlucHV0W3R5cGU9ImNoZWNrYm94Il1bZGlzYWJsZWRdLA0KaW5wdXRbdHlwZT0iY2hlY2tib3giXS5kaXNhYmxlZCwNCmZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCi5yYWRpby1pbmxpbmUuZGlzYWJsZWQsDQpmaWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvLWlubGluZSwNCi5jaGVja2JveC1pbmxpbmUuZGlzYWJsZWQsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94LWlubGluZSB7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZA0KfQ0KDQoucmFkaW8uZGlzYWJsZWQgbGFiZWwsDQpmaWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVsLA0KLmNoZWNrYm94LmRpc2FibGVkIGxhYmVsLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveCBsYWJlbCB7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZA0KfQ0KDQouZm9ybS1jb250cm9sLXN0YXRpYyB7DQogICAgcGFkZGluZy10b3A6IDdweDsNCiAgICBwYWRkaW5nLWJvdHRvbTogN3B4Ow0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgbWluLWhlaWdodDogMzZweA0KfQ0KDQouZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz4uZm9ybS1jb250cm9sLXN0YXRpYy5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uZm9ybS1jb250cm9sLXN0YXRpYy5idG4sDQouZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT4uZm9ybS1jb250cm9sLXN0YXRpYy5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtc20+LmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj4uZm9ybS1jb250cm9sLXN0YXRpYy5idG4gew0KICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICBwYWRkaW5nLXJpZ2h0OiAwDQp9DQoNCi5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT4uZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG4gew0KICAgIGhlaWdodDogMzFweDsNCiAgICBwYWRkaW5nOiA1cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNTsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCnNlbGVjdC5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT5zZWxlY3QuZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLXNtPnNlbGVjdC5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPnNlbGVjdC5idG4gew0KICAgIGhlaWdodDogMzFweDsNCiAgICBsaW5lLWhlaWdodDogMzFweA0KfQ0KDQp0ZXh0YXJlYS5pbnB1dC1zbSwNCi5pbnB1dC1ncm91cC1zbT50ZXh0YXJlYS5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtc20+dGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj50ZXh0YXJlYS5idG4sDQpzZWxlY3RbbXVsdGlwbGVdLmlucHV0LXNtLA0KLmlucHV0LWdyb3VwLXNtPnNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLXNtPnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj5zZWxlY3RbbXVsdGlwbGVdLmJ0biB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wgew0KICAgIGhlaWdodDogMzFweDsNCiAgICBwYWRkaW5nOiA1cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNTsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5mb3JtLWdyb3VwLXNtIHNlbGVjdC5mb3JtLWNvbnRyb2wgew0KICAgIGhlaWdodDogMzFweDsNCiAgICBsaW5lLWhlaWdodDogMzFweA0KfQ0KDQouZm9ybS1ncm91cC1zbSB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsDQouZm9ybS1ncm91cC1zbSBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHsNCiAgICBoZWlnaHQ6IDMxcHg7DQogICAgbWluLWhlaWdodDogMzRweDsNCiAgICBwYWRkaW5nOiA2cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNQ0KfQ0KDQouaW5wdXQtbGcsDQouaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbCwNCi5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRuIHsNCiAgICBoZWlnaHQ6IDQ4cHg7DQogICAgcGFkZGluZzogMTBweCAxNnB4Ow0KICAgIGZvbnQtc2l6ZTogMTlweDsNCiAgICBsaW5lLWhlaWdodDogMS4zMzMzMzsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCnNlbGVjdC5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz5zZWxlY3QuZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLWxnPnNlbGVjdC5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPnNlbGVjdC5idG4gew0KICAgIGhlaWdodDogNDhweDsNCiAgICBsaW5lLWhlaWdodDogNDhweA0KfQ0KDQp0ZXh0YXJlYS5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz50ZXh0YXJlYS5mb3JtLWNvbnRyb2wsDQouaW5wdXQtZ3JvdXAtbGc+dGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj50ZXh0YXJlYS5idG4sDQpzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWxnLA0KLmlucHV0LWdyb3VwLWxnPnNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sLA0KLmlucHV0LWdyb3VwLWxnPnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj5zZWxlY3RbbXVsdGlwbGVdLmJ0biB7DQogICAgaGVpZ2h0OiBhdXRvDQp9DQoNCi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wgew0KICAgIGhlaWdodDogNDhweDsNCiAgICBwYWRkaW5nOiAxMHB4IDE2cHg7DQogICAgZm9udC1zaXplOiAxOXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmZvcm0tZ3JvdXAtbGcgc2VsZWN0LmZvcm0tY29udHJvbCB7DQogICAgaGVpZ2h0OiA0OHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiA0OHB4DQp9DQoNCi5mb3JtLWdyb3VwLWxnIHRleHRhcmVhLmZvcm0tY29udHJvbCwNCi5mb3JtLWdyb3VwLWxnIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHsNCiAgICBoZWlnaHQ6IGF1dG8NCn0NCg0KLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbC1zdGF0aWMgew0KICAgIGhlaWdodDogNDhweDsNCiAgICBtaW4taGVpZ2h0OiA0MHB4Ow0KICAgIHBhZGRpbmc6IDExcHggMTZweDsNCiAgICBmb250LXNpemU6IDE5cHg7DQogICAgbGluZS1oZWlnaHQ6IDEuMzMzMzMNCn0NCg0KLmhhcy1mZWVkYmFjayB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlDQp9DQoNCi5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbCB7DQogICAgcGFkZGluZy1yaWdodDogNDMuNzVweA0KfQ0KDQouZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAwOw0KICAgIHJpZ2h0OiAwOw0KICAgIHotaW5kZXg6IDI7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgd2lkdGg6IDM1cHg7DQogICAgaGVpZ2h0OiAzNXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAzNXB4Ow0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICBwb2ludGVyLWV2ZW50czogbm9uZQ0KfQ0KDQouaW5wdXQtbGcrLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1sZz4uZm9ybS1jb250cm9sKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWFkZG9uKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRuKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssDQouaW5wdXQtZ3JvdXAtbGcrLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wrLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgd2lkdGg6IDQ4cHg7DQogICAgaGVpZ2h0OiA0OHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiA0OHB4DQp9DQoNCi5pbnB1dC1zbSsuZm9ybS1jb250cm9sLWZlZWRiYWNrLA0KLmlucHV0LWdyb3VwLXNtPi5mb3JtLWNvbnRyb2wrLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24rLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG4rLmZvcm0tY29udHJvbC1mZWVkYmFjaywNCi5pbnB1dC1ncm91cC1zbSsuZm9ybS1jb250cm9sLWZlZWRiYWNrLA0KLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCsuZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICB3aWR0aDogMzFweDsNCiAgICBoZWlnaHQ6IDMxcHg7DQogICAgbGluZS1oZWlnaHQ6IDMxcHgNCn0NCg0KLmhhcy1zdWNjZXNzIC5oZWxwLWJsb2NrLA0KLmhhcy1zdWNjZXNzIC5jb250cm9sLWxhYmVsLA0KLmhhcy1zdWNjZXNzIC5yYWRpbywNCi5oYXMtc3VjY2VzcyAuY2hlY2tib3gsDQouaGFzLXN1Y2Nlc3MgLnJhZGlvLWlubGluZSwNCi5oYXMtc3VjY2VzcyAuY2hlY2tib3gtaW5saW5lLA0KLmhhcy1zdWNjZXNzLnJhZGlvIGxhYmVsLA0KLmhhcy1zdWNjZXNzLmNoZWNrYm94IGxhYmVsLA0KLmhhcy1zdWNjZXNzLnJhZGlvLWlubGluZSBsYWJlbCwNCi5oYXMtc3VjY2Vzcy5jaGVja2JveC1pbmxpbmUgbGFiZWwgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sIHsNCiAgICBib3JkZXItY29sb3I6ICMwMDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KTsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KQ0KfQ0KDQouaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbDpmb2N1cyB7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSksIDAgMCA2cHggIzMzMzsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KSwgMCAwIDZweCAjMzMzDQp9DQoNCi5oYXMtc3VjY2VzcyAuaW5wdXQtZ3JvdXAtYWRkb24gew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZlOWM2DQp9DQoNCi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouaGFzLXdhcm5pbmcgLmhlbHAtYmxvY2ssDQouaGFzLXdhcm5pbmcgLmNvbnRyb2wtbGFiZWwsDQouaGFzLXdhcm5pbmcgLnJhZGlvLA0KLmhhcy13YXJuaW5nIC5jaGVja2JveCwNCi5oYXMtd2FybmluZyAucmFkaW8taW5saW5lLA0KLmhhcy13YXJuaW5nIC5jaGVja2JveC1pbmxpbmUsDQouaGFzLXdhcm5pbmcucmFkaW8gbGFiZWwsDQouaGFzLXdhcm5pbmcuY2hlY2tib3ggbGFiZWwsDQouaGFzLXdhcm5pbmcucmFkaW8taW5saW5lIGxhYmVsLA0KLmhhcy13YXJuaW5nLmNoZWNrYm94LWlubGluZSBsYWJlbCB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wgew0KICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpDQp9DQoNCi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3VzIHsNCiAgICBib3JkZXItY29sb3I6ICMwMDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KSwgMCAwIDZweCAjMzMzOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgNnB4ICMzMzMNCn0NCg0KLmhhcy13YXJuaW5nIC5pbnB1dC1ncm91cC1hZGRvbiB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWViY2MNCn0NCg0KLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssDQouaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLA0KLmhhcy1lcnJvciAucmFkaW8sDQouaGFzLWVycm9yIC5jaGVja2JveCwNCi5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSwNCi5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSwNCi5oYXMtZXJyb3IucmFkaW8gbGFiZWwsDQouaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLA0KLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWwsDQouaGFzLWVycm9yLmNoZWNrYm94LWlubGluZSBsYWJlbCB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KLmhhcy1lcnJvciAuZm9ybS1jb250cm9sIHsNCiAgICBib3JkZXItY29sb3I6ICMwMDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KTsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAuMDc1KQ0KfQ0KDQouaGFzLWVycm9yIC5mb3JtLWNvbnRyb2w6Zm9jdXMgew0KICAgIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNzUpLCAwIDAgNnB4ICMzMzM7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA3NSksIDAgMCA2cHggIzMzMw0KfQ0KDQouaGFzLWVycm9yIC5pbnB1dC1ncm91cC1hZGRvbiB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlYmNjZDENCn0NCg0KLmhhcy1lcnJvciAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouaGFzLWZlZWRiYWNrIGxhYmVsfi5mb3JtLWNvbnRyb2wtZmVlZGJhY2sgew0KICAgIHRvcDogMjZweA0KfQ0KDQouaGFzLWZlZWRiYWNrIGxhYmVsLnNyLW9ubHl+LmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgdG9wOiAwDQp9DQoNCi5oZWxwLWJsb2NrIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICBjb2xvcjogI2E2YTZhNg0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIHdpZHRoOiBhdXRvOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtc3RhdGljIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0biwNCiAgICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICB3aWR0aDogYXV0bw0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXA+LmZvcm0tY29udHJvbCB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5jb250cm9sLWxhYmVsIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAucmFkaW8sDQogICAgLmZvcm0taW5saW5lIC5jaGVja2JveCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAucmFkaW8gbGFiZWwsDQogICAgLmZvcm0taW5saW5lIC5jaGVja2JveCBsYWJlbCB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMA0KICAgIH0NCg0KICAgIC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwNCiAgICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAwDQogICAgfQ0KDQogICAgLmZvcm0taW5saW5lIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgICAgIHRvcDogMA0KICAgIH0NCn0NCg0KLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sDQouZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCwNCi5mb3JtLWhvcml6b250YWwgLnJhZGlvLWlubGluZSwNCi5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LWlubGluZSB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgIHBhZGRpbmctdG9wOiA3cHgNCn0NCg0KLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sDQouZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCB7DQogICAgbWluLWhlaWdodDogMjhweA0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwIHsNCiAgICBtYXJnaW4tbGVmdDogLTE1cHg7DQogICAgbWFyZ2luLXJpZ2h0OiAtMTVweA0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmJlZm9yZSwNCi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmFmdGVyIHsNCiAgICBjbGVhcjogYm90aA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbCB7DQogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0Ow0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICBwYWRkaW5nLXRvcDogN3B4DQogICAgfQ0KfQ0KDQouZm9ybS1ob3Jpem9udGFsIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgcmlnaHQ6IDE1cHgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgew0KICAgIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtbGcgLmNvbnRyb2wtbGFiZWwgew0KICAgICAgICBwYWRkaW5nLXRvcDogMTFweDsNCiAgICAgICAgZm9udC1zaXplOiAxOXB4DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbCB7DQogICAgICAgIHBhZGRpbmctdG9wOiA2cHg7DQogICAgICAgIGZvbnQtc2l6ZTogMTNweA0KICAgIH0NCn0NCg0KLmJ0biB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIHBhZGRpbmc6IDZweCAxMnB4Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgdXNlci1zZWxlY3Q6IG5vbmUNCn0NCg0KLmJ0bjpmb2N1cywNCi5idG4uZm9jdXMsDQouYnRuOmFjdGl2ZTpmb2N1cywNCi5idG46YWN0aXZlLmZvY3VzLA0KLmJ0bi5hY3RpdmU6Zm9jdXMsDQouYnRuLmFjdGl2ZS5mb2N1cyB7DQogICAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7DQogICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOw0KICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4DQp9DQoNCi5idG46aG92ZXIsDQouYnRuOmZvY3VzLA0KLmJ0bi5mb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lDQp9DQoNCi5idG46YWN0aXZlLA0KLmJ0bi5hY3RpdmUgew0KICAgIG91dGxpbmU6IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIC4xMjUpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIC4xMjUpDQp9DQoNCi5idG4uZGlzYWJsZWQsDQouYnRuW2Rpc2FibGVkXSwNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuIHsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOw0KICAgIG9wYWNpdHk6IC42NTsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjUpOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsNCiAgICBib3gtc2hhZG93OiBub25lDQp9DQoNCmEuYnRuLmRpc2FibGVkLA0KZmllbGRzZXRbZGlzYWJsZWRdIGEuYnRuIHsNCiAgICBwb2ludGVyLWV2ZW50czogbm9uZQ0KfQ0KDQouYnRuLWRlZmF1bHQgew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5idG4tZGVmYXVsdDpmb2N1cywNCi5idG4tZGVmYXVsdC5mb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1kZWZhdWx0OmhvdmVyIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2Ow0KICAgIGJvcmRlci1jb2xvcjogIzEwNDBkMQ0KfQ0KDQouYnRuLWRlZmF1bHQ6YWN0aXZlLA0KLmJ0bi1kZWZhdWx0LmFjdGl2ZSwNCi5vcGVuPi5idG4tZGVmYXVsdC5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7DQogICAgYm9yZGVyLWNvbG9yOiAjMTA0MGQxDQp9DQoNCi5idG4tZGVmYXVsdDphY3RpdmU6aG92ZXIsDQouYnRuLWRlZmF1bHQ6YWN0aXZlOmZvY3VzLA0KLmJ0bi1kZWZhdWx0OmFjdGl2ZS5mb2N1cywNCi5idG4tZGVmYXVsdC5hY3RpdmU6aG92ZXIsDQouYnRuLWRlZmF1bHQuYWN0aXZlOmZvY3VzLA0KLmJ0bi1kZWZhdWx0LmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4tZGVmYXVsdC5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZDRkNDsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1kZWZhdWx0OmFjdGl2ZSwNCi5idG4tZGVmYXVsdC5hY3RpdmUsDQoub3Blbj4uYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4tZGVmYXVsdC5kaXNhYmxlZDpob3ZlciwNCi5idG4tZGVmYXVsdC5kaXNhYmxlZDpmb2N1cywNCi5idG4tZGVmYXVsdC5kaXNhYmxlZC5mb2N1cywNCi5idG4tZGVmYXVsdFtkaXNhYmxlZF06aG92ZXIsDQouYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdC5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLmJ0bi1kZWZhdWx0IC5iYWRnZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZg0KfQ0KDQouYnRuLXByaW1hcnkgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWY7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5idG4tcHJpbWFyeTpmb2N1cywNCi5idG4tcHJpbWFyeS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzExNDNkYTsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1wcmltYXJ5OmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0M2RhOw0KICAgIGJvcmRlci1jb2xvcjogIzEwNDBkMQ0KfQ0KDQouYnRuLXByaW1hcnk6YWN0aXZlLA0KLmJ0bi1wcmltYXJ5LmFjdGl2ZSwNCi5vcGVuPi5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMxMTQzZGE7DQogICAgYm9yZGVyLWNvbG9yOiAjMTA0MGQxDQp9DQoNCi5idG4tcHJpbWFyeTphY3RpdmU6aG92ZXIsDQouYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLA0KLmJ0bi1wcmltYXJ5OmFjdGl2ZS5mb2N1cywNCi5idG4tcHJpbWFyeS5hY3RpdmU6aG92ZXIsDQouYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLA0KLmJ0bi1wcmltYXJ5LmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzBlMzliOTsNCiAgICBib3JkZXItY29sb3I6ICMwYjJkOTMNCn0NCg0KLmJ0bi1wcmltYXJ5OmFjdGl2ZSwNCi5idG4tcHJpbWFyeS5hY3RpdmUsDQoub3Blbj4uYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4tcHJpbWFyeS5kaXNhYmxlZDpob3ZlciwNCi5idG4tcHJpbWFyeS5kaXNhYmxlZDpmb2N1cywNCi5idG4tcHJpbWFyeS5kaXNhYmxlZC5mb2N1cywNCi5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsDQouYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZjsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLmJ0bi1wcmltYXJ5IC5iYWRnZSB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLXN1Y2Nlc3Mgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzYzc2M2Q7DQogICAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkDQp9DQoNCi5idG4tc3VjY2Vzczpmb2N1cywNCi5idG4tc3VjY2Vzcy5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJiNTQyYzsNCiAgICBib3JkZXItY29sb3I6ICMxMTIxMTENCn0NCg0KLmJ0bi1zdWNjZXNzOmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmI1NDJjOw0KICAgIGJvcmRlci1jb2xvcjogIzI3NGQyOA0KfQ0KDQouYnRuLXN1Y2Nlc3M6YWN0aXZlLA0KLmJ0bi1zdWNjZXNzLmFjdGl2ZSwNCi5vcGVuPi5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyYjU0MmM7DQogICAgYm9yZGVyLWNvbG9yOiAjMjc0ZDI4DQp9DQoNCi5idG4tc3VjY2VzczphY3RpdmU6aG92ZXIsDQouYnRuLXN1Y2Nlc3M6YWN0aXZlOmZvY3VzLA0KLmJ0bi1zdWNjZXNzOmFjdGl2ZS5mb2N1cywNCi5idG4tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsDQouYnRuLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLA0KLmJ0bi1zdWNjZXNzLmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzFmM2QxZjsNCiAgICBib3JkZXItY29sb3I6ICMxMTIxMTENCn0NCg0KLmJ0bi1zdWNjZXNzOmFjdGl2ZSwNCi5idG4tc3VjY2Vzcy5hY3RpdmUsDQoub3Blbj4uYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4tc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwNCi5idG4tc3VjY2Vzcy5kaXNhYmxlZDpmb2N1cywNCi5idG4tc3VjY2Vzcy5kaXNhYmxlZC5mb2N1cywNCi5idG4tc3VjY2Vzc1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3M6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcy5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzNjNzYzZDsNCiAgICBib3JkZXItY29sb3I6ICMzYzc2M2QNCn0NCg0KLmJ0bi1zdWNjZXNzIC5iYWRnZSB7DQogICAgY29sb3I6ICMzYzc2M2Q7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLWluZm8gew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGY7DQogICAgYm9yZGVyLWNvbG9yOiAjMzE3MDhmDQp9DQoNCi5idG4taW5mbzpmb2N1cywNCi5idG4taW5mby5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI0NTI2OTsNCiAgICBib3JkZXItY29sb3I6ICMxMDI2MzANCn0NCg0KLmJ0bi1pbmZvOmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQ1MjY5Ow0KICAgIGJvcmRlci1jb2xvcjogIzIxNGM2MQ0KfQ0KDQouYnRuLWluZm86YWN0aXZlLA0KLmJ0bi1pbmZvLmFjdGl2ZSwNCi5vcGVuPi5idG4taW5mby5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNDUyNjk7DQogICAgYm9yZGVyLWNvbG9yOiAjMjE0YzYxDQp9DQoNCi5idG4taW5mbzphY3RpdmU6aG92ZXIsDQouYnRuLWluZm86YWN0aXZlOmZvY3VzLA0KLmJ0bi1pbmZvOmFjdGl2ZS5mb2N1cywNCi5idG4taW5mby5hY3RpdmU6aG92ZXIsDQouYnRuLWluZm8uYWN0aXZlOmZvY3VzLA0KLmJ0bi1pbmZvLmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4taW5mby5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzFiM2Q0ZTsNCiAgICBib3JkZXItY29sb3I6ICMxMDI2MzANCn0NCg0KLmJ0bi1pbmZvOmFjdGl2ZSwNCi5idG4taW5mby5hY3RpdmUsDQoub3Blbj4uYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4taW5mby5kaXNhYmxlZDpob3ZlciwNCi5idG4taW5mby5kaXNhYmxlZDpmb2N1cywNCi5idG4taW5mby5kaXNhYmxlZC5mb2N1cywNCi5idG4taW5mb1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLWluZm9bZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1pbmZvW2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzMxNzA4ZjsNCiAgICBib3JkZXItY29sb3I6ICMzMTcwOGYNCn0NCg0KLmJ0bi1pbmZvIC5iYWRnZSB7DQogICAgY29sb3I6ICMzMTcwOGY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLXdhcm5pbmcgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4YTZkM2I7DQogICAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiDQp9DQoNCi5idG4td2FybmluZzpmb2N1cywNCi5idG4td2FybmluZy5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzY2NTEyYzsNCiAgICBib3JkZXItY29sb3I6ICMzMTI2MTUNCn0NCg0KLmJ0bi13YXJuaW5nOmhvdmVyIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY1MTJjOw0KICAgIGJvcmRlci1jb2xvcjogIzVmNGIyOQ0KfQ0KDQouYnRuLXdhcm5pbmc6YWN0aXZlLA0KLmJ0bi13YXJuaW5nLmFjdGl2ZSwNCi5vcGVuPi5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGUgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjUxMmM7DQogICAgYm9yZGVyLWNvbG9yOiAjNWY0YjI5DQp9DQoNCi5idG4td2FybmluZzphY3RpdmU6aG92ZXIsDQouYnRuLXdhcm5pbmc6YWN0aXZlOmZvY3VzLA0KLmJ0bi13YXJuaW5nOmFjdGl2ZS5mb2N1cywNCi5idG4td2FybmluZy5hY3RpdmU6aG92ZXIsDQouYnRuLXdhcm5pbmcuYWN0aXZlOmZvY3VzLA0KLmJ0bi13YXJuaW5nLmFjdGl2ZS5mb2N1cywNCi5vcGVuPi5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6aG92ZXIsDQoub3Blbj4uYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRkM2QyMTsNCiAgICBib3JkZXItY29sb3I6ICMzMTI2MTUNCn0NCg0KLmJ0bi13YXJuaW5nOmFjdGl2ZSwNCi5idG4td2FybmluZy5hY3RpdmUsDQoub3Blbj4uYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQp9DQoNCi5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwNCi5idG4td2FybmluZy5kaXNhYmxlZDpmb2N1cywNCi5idG4td2FybmluZy5kaXNhYmxlZC5mb2N1cywNCi5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5mb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5mb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYjsNCiAgICBib3JkZXItY29sb3I6ICM4YTZkM2INCn0NCg0KLmJ0bi13YXJuaW5nIC5iYWRnZSB7DQogICAgY29sb3I6ICM4YTZkM2I7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQouYnRuLWRhbmdlciB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2E5NDQ0MjsNCiAgICBib3JkZXItY29sb3I6ICNhOTQ0NDINCn0NCg0KLmJ0bi1kYW5nZXI6Zm9jdXMsDQouYnRuLWRhbmdlci5mb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzg0MzUzNDsNCiAgICBib3JkZXItY29sb3I6ICM0ZDFmMWUNCn0NCg0KLmJ0bi1kYW5nZXI6aG92ZXIgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4NDM1MzQ7DQogICAgYm9yZGVyLWNvbG9yOiAjN2QzMjMxDQp9DQoNCi5idG4tZGFuZ2VyOmFjdGl2ZSwNCi5idG4tZGFuZ2VyLmFjdGl2ZSwNCi5vcGVuPi5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzg0MzUzNDsNCiAgICBib3JkZXItY29sb3I6ICM3ZDMyMzENCn0NCg0KLmJ0bi1kYW5nZXI6YWN0aXZlOmhvdmVyLA0KLmJ0bi1kYW5nZXI6YWN0aXZlOmZvY3VzLA0KLmJ0bi1kYW5nZXI6YWN0aXZlLmZvY3VzLA0KLmJ0bi1kYW5nZXIuYWN0aXZlOmhvdmVyLA0KLmJ0bi1kYW5nZXIuYWN0aXZlOmZvY3VzLA0KLmJ0bi1kYW5nZXIuYWN0aXZlLmZvY3VzLA0KLm9wZW4+LmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLA0KLm9wZW4+LmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLA0KLm9wZW4+LmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlLmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmIyYjJhOw0KICAgIGJvcmRlci1jb2xvcjogIzRkMWYxZQ0KfQ0KDQouYnRuLWRhbmdlcjphY3RpdmUsDQouYnRuLWRhbmdlci5hY3RpdmUsDQoub3Blbj4uYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGUgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUNCn0NCg0KLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsDQouYnRuLWRhbmdlci5kaXNhYmxlZDpmb2N1cywNCi5idG4tZGFuZ2VyLmRpc2FibGVkLmZvY3VzLA0KLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmhvdmVyLA0KLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmZvY3VzLA0KLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVyLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTk0NDQyOw0KICAgIGJvcmRlci1jb2xvcjogI2E5NDQ0Mg0KfQ0KDQouYnRuLWRhbmdlciAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjYTk0NDQyOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLmJ0bi1saW5rIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCiAgICBmb250LXdlaWdodDogbm9ybWFsOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1saW5rLA0KLmJ0bi1saW5rOmFjdGl2ZSwNCi5idG4tbGluay5hY3RpdmUsDQouYnRuLWxpbmtbZGlzYWJsZWRdLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluayB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOw0KICAgIGJveC1zaGFkb3c6IG5vbmUNCn0NCg0KLmJ0bi1saW5rLA0KLmJ0bi1saW5rOmhvdmVyLA0KLmJ0bi1saW5rOmZvY3VzLA0KLmJ0bi1saW5rOmFjdGl2ZSB7DQogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouYnRuLWxpbms6aG92ZXIsDQouYnRuLWxpbms6Zm9jdXMgew0KICAgIGNvbG9yOiAjMGYzY2MzOw0KICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCi5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsDQouYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluazpob3ZlciwNCmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6Zm9jdXMgew0KICAgIGNvbG9yOiAjNzc3Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZQ0KfQ0KDQouYnRuLWxnLA0KLmJ0bi1ncm91cC1sZz4uYnRuIHsNCiAgICBwYWRkaW5nOiAxMHB4IDE2cHg7DQogICAgZm9udC1zaXplOiAxOXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1zbSwNCi5idG4tZ3JvdXAtc20+LmJ0biB7DQogICAgcGFkZGluZzogNXB4IDEwcHg7DQogICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjU7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLXhzLA0KLmJ0bi1ncm91cC14cz4uYnRuIHsNCiAgICBwYWRkaW5nOiAxcHggNXB4Ow0KICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICBsaW5lLWhlaWdodDogMS41Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ibG9jayB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgd2lkdGg6IDEwMCUNCn0NCg0KLmJ0bi1ibG9jaysuYnRuLWJsb2NrIHsNCiAgICBtYXJnaW4tdG9wOiA1cHgNCn0NCg0KaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLWJsb2NrLA0KaW5wdXRbdHlwZT0icmVzZXQiXS5idG4tYmxvY2ssDQppbnB1dFt0eXBlPSJidXR0b24iXS5idG4tYmxvY2sgew0KICAgIHdpZHRoOiAxMDAlDQp9DQoNCi5mYWRlIHsNCiAgICBvcGFjaXR5OiAwOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAuMTVzIGxpbmVhcjsNCiAgICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IC4xNXMgbGluZWFyOw0KICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjE1cyBsaW5lYXINCn0NCg0KLmZhZGUuaW4gew0KICAgIG9wYWNpdHk6IDENCn0NCg0KLmNvbGxhcHNlIHsNCiAgICBkaXNwbGF5OiBub25lDQp9DQoNCi5jb2xsYXBzZS5pbiB7DQogICAgZGlzcGxheTogYmxvY2sNCn0NCg0KdHIuY29sbGFwc2UuaW4gew0KICAgIGRpc3BsYXk6IHRhYmxlLXJvdw0KfQ0KDQp0Ym9keS5jb2xsYXBzZS5pbiB7DQogICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwDQp9DQoNCi5jb2xsYXBzaW5nIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgaGVpZ2h0OiAwOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7DQogICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5Ow0KICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogLjM1czsNCiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuMzVzOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7DQogICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UNCn0NCg0KLmNhcmV0IHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgd2lkdGg6IDA7DQogICAgaGVpZ2h0OiAwOw0KICAgIG1hcmdpbi1sZWZ0OiAycHg7DQogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCiAgICBib3JkZXItdG9wOiA0cHggZGFzaGVkOw0KICAgIGJvcmRlci10b3A6IDRweCBzb2xpZCBcOTsNCiAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50DQp9DQoNCi5kcm9wdXAsDQouZHJvcGRvd24gew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZQ0KfQ0KDQouZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHsNCiAgICBvdXRsaW5lOiAwDQp9DQoNCi5kcm9wZG93bi1tZW51IHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAxMDAlOw0KICAgIGxlZnQ6IDA7DQogICAgei1pbmRleDogMTAwMDsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIG1pbi13aWR0aDogMTYwcHg7DQogICAgcGFkZGluZzogNXB4IDA7DQogICAgbWFyZ2luOiAycHggMCAwOw0KICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgZm9udC1zaXplOiAxNXB4Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjE1KTsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIC4xNzUpOw0KICAgIGJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLCAwLCAwLCAuMTc1KTsNCiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94DQp9DQoNCi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQgew0KICAgIHJpZ2h0OiAwOw0KICAgIGxlZnQ6IGF1dG8NCn0NCg0KLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgew0KICAgIGhlaWdodDogMXB4Ow0KICAgIG1hcmdpbjogOS41cHggMDsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTUNCn0NCg0KLmRyb3Bkb3duLW1lbnU+bGk+YSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZzogM3B4IDIwcHg7DQogICAgY2xlYXI6IGJvdGg7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBjb2xvcjogIzMzMzsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwDQp9DQoNCi5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXIsDQouZHJvcGRvd24tbWVudT5saT5hOmZvY3VzIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgY29sb3I6ICMyNjI2MjY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNQ0KfQ0KDQouZHJvcGRvd24tbWVudT4uYWN0aXZlPmEsDQouZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsDQouZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBvdXRsaW5lOiAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWYNCn0NCg0KLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsDQouZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwNCi5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICBjb2xvcjogIzc3Nw0KfQ0KDQouZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwNCi5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICBmaWx0ZXI6IHByb2dpZDogRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsNCn0NCg0KLm9wZW4+LmRyb3Bkb3duLW1lbnUgew0KICAgIGRpc3BsYXk6IGJsb2NrDQp9DQoNCi5vcGVuPmEgew0KICAgIG91dGxpbmU6IDANCn0NCg0KLmRyb3Bkb3duLW1lbnUtcmlnaHQgew0KICAgIGxlZnQ6IGF1dG87DQogICAgcmlnaHQ6IDANCn0NCg0KLmRyb3Bkb3duLW1lbnUtbGVmdCB7DQogICAgbGVmdDogMDsNCiAgICByaWdodDogYXV0bw0KfQ0KDQouZHJvcGRvd24taGVhZGVyIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBwYWRkaW5nOiAzcHggMjBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNDI4NTc7DQogICAgY29sb3I6ICM3Nzc7DQogICAgd2hpdGUtc3BhY2U6IG5vd3JhcA0KfQ0KDQouZHJvcGRvd24tYmFja2Ryb3Agew0KICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICBsZWZ0OiAwOw0KICAgIHJpZ2h0OiAwOw0KICAgIGJvdHRvbTogMDsNCiAgICB0b3A6IDA7DQogICAgei1pbmRleDogOTkwDQp9DQoNCi5wdWxsLXJpZ2h0Pi5kcm9wZG93bi1tZW51IHsNCiAgICByaWdodDogMDsNCiAgICBsZWZ0OiBhdXRvDQp9DQoNCi5kcm9wdXAgLmNhcmV0LA0KLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldCB7DQogICAgYm9yZGVyLXRvcDogMDsNCiAgICBib3JkZXItYm90dG9tOiA0cHggZGFzaGVkOw0KICAgIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCBcOTsNCiAgICBjb250ZW50OiAiIg0KfQ0KDQouZHJvcHVwIC5kcm9wZG93bi1tZW51LA0KLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHsNCiAgICB0b3A6IGF1dG87DQogICAgYm90dG9tOiAxMDAlOw0KICAgIG1hcmdpbi1ib3R0b206IDJweA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KICAgIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUgew0KICAgICAgICByaWdodDogMDsNCiAgICAgICAgbGVmdDogYXV0bw0KICAgIH0NCg0KICAgIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUtbGVmdCB7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIHJpZ2h0OiBhdXRvDQogICAgfQ0KfQ0KDQouYnRuLWdyb3VwLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQp9DQoNCi5idG4tZ3JvdXA+LmJ0biwNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0biB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bjpob3ZlciwNCi5idG4tZ3JvdXA+LmJ0bjpmb2N1cywNCi5idG4tZ3JvdXA+LmJ0bjphY3RpdmUsDQouYnRuLWdyb3VwPi5idG4uYWN0aXZlLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmhvdmVyLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmZvY3VzLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmFjdGl2ZSwNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi5hY3RpdmUgew0KICAgIHotaW5kZXg6IDINCn0NCg0KLmJ0bi1ncm91cCAuYnRuKy5idG4sDQouYnRuLWdyb3VwIC5idG4rLmJ0bi1ncm91cCwNCi5idG4tZ3JvdXAgLmJ0bi1ncm91cCsuYnRuLA0KLmJ0bi1ncm91cCAuYnRuLWdyb3VwKy5idG4tZ3JvdXAgew0KICAgIG1hcmdpbi1sZWZ0OiAtMXB4DQp9DQoNCi5idG4tdG9vbGJhciB7DQogICAgbWFyZ2luLWxlZnQ6IC01cHgNCn0NCg0KLmJ0bi10b29sYmFyOmJlZm9yZSwNCi5idG4tdG9vbGJhcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5idG4tdG9vbGJhcjphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KLmJ0bi10b29sYmFyIC5idG4sDQouYnRuLXRvb2xiYXIgLmJ0bi1ncm91cCwNCi5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAgew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5idG4tdG9vbGJhcj4uYnRuLA0KLmJ0bi10b29sYmFyPi5idG4tZ3JvdXAsDQouYnRuLXRvb2xiYXI+LmlucHV0LWdyb3VwIHsNCiAgICBtYXJnaW4tbGVmdDogNXB4DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGQgew0KICAgIG1hcmdpbi1sZWZ0OiAwDQp9DQoNCi5idG4tZ3JvdXA+LmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cD4uYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksDQouYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkgew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwPi5idG4tZ3JvdXAgew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpPi5idG4gew0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cD4uYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk+LmJ0bjpsYXN0LWNoaWxkLA0KLmJ0bi1ncm91cD4uYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk+LmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cD4uYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCk+LmJ0bjpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsDQouYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgb3V0bGluZTogMA0KfQ0KDQouYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgcGFkZGluZy1sZWZ0OiA4cHg7DQogICAgcGFkZGluZy1yaWdodDogOHB4DQp9DQoNCi5idG4tZ3JvdXA+LmJ0bi1sZysuZHJvcGRvd24tdG9nZ2xlLA0KLmJ0bi1ncm91cC1sZy5idG4tZ3JvdXA+LmJ0bisuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7DQogICAgcGFkZGluZy1yaWdodDogMTJweA0KfQ0KDQouYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAuMTI1KTsNCiAgICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAuMTI1KQ0KfQ0KDQouYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tbGluayB7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOw0KICAgIGJveC1zaGFkb3c6IG5vbmUNCn0NCg0KLmJ0biAuY2FyZXQgew0KICAgIG1hcmdpbi1sZWZ0OiAwDQp9DQoNCi5idG4tbGcgLmNhcmV0LA0KLmJ0bi1ncm91cC1sZz4uYnRuIC5jYXJldCB7DQogICAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7DQogICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMA0KfQ0KDQouZHJvcHVwIC5idG4tbGcgLmNhcmV0LA0KLmRyb3B1cCAuYnRuLWdyb3VwLWxnPi5idG4gLmNhcmV0IHsNCiAgICBib3JkZXItd2lkdGg6IDAgNXB4IDVweA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4sDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXAsDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA+LmJ0biB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZmxvYXQ6IG5vbmU7DQogICAgd2lkdGg6IDEwMCU7DQogICAgbWF4LXdpZHRoOiAxMDAlDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDpiZWZvcmUsDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cD4uYnRuIHsNCiAgICBmbG9hdDogbm9uZQ0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4rLmJ0biwNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bisuYnRuLWdyb3VwLA0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwKy5idG4sDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXArLmJ0bi1ncm91cCB7DQogICAgbWFyZ2luLXRvcDogLTFweDsNCiAgICBtYXJnaW4tbGVmdDogMA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHsNCiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biB7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKT4uYnRuOmxhc3QtY2hpbGQsDQouYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKT4uZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG46Zmlyc3QtY2hpbGQgew0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDANCn0NCg0KLmJ0bi1ncm91cC1qdXN0aWZpZWQgew0KICAgIGRpc3BsYXk6IHRhYmxlOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIHRhYmxlLWxheW91dDogZml4ZWQ7DQogICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZQ0KfQ0KDQouYnRuLWdyb3VwLWp1c3RpZmllZD4uYnRuLA0KLmJ0bi1ncm91cC1qdXN0aWZpZWQ+LmJ0bi1ncm91cCB7DQogICAgZmxvYXQ6IG5vbmU7DQogICAgZGlzcGxheTogdGFibGUtY2VsbDsNCiAgICB3aWR0aDogMSUNCn0NCg0KLmJ0bi1ncm91cC1qdXN0aWZpZWQ+LmJ0bi1ncm91cCAuYnRuIHsNCiAgICB3aWR0aDogMTAwJQ0KfQ0KDQouYnRuLWdyb3VwLWp1c3RpZmllZD4uYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHsNCiAgICBsZWZ0OiBhdXRvDQp9DQoNCltkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdPi5idG4gaW5wdXRbdHlwZT0icmFkaW8iXSwNCltkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdPi5idG4gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwNCltkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdPi5idG4tZ3JvdXA+LmJ0biBpbnB1dFt0eXBlPSJyYWRpbyJdLA0KW2RhdGEtdG9nZ2xlPSJidXR0b25zIl0+LmJ0bi1ncm91cD4uYnRuIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBjbGlwOiByZWN0KDAsIDAsIDAsIDApOw0KICAgIHBvaW50ZXItZXZlbnRzOiBub25lDQp9DQoNCi5pbnB1dC1ncm91cCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IHRhYmxlOw0KICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGUNCn0NCg0KLmlucHV0LWdyb3VwW2NsYXNzKj0iY29sLSJdIHsNCiAgICBmbG9hdDogbm9uZTsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgcGFkZGluZy1yaWdodDogMA0KfQ0KDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHotaW5kZXg6IDI7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgd2lkdGg6IDEwMCU7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmb2N1cyB7DQogICAgei1pbmRleDogMw0KfQ0KDQouaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtYnRuLA0KLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwNCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksDQouaW5wdXQtZ3JvdXAtYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1idG4gew0KICAgIHdpZHRoOiAxJTsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUNCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uIHsNCiAgICBwYWRkaW5nOiA2cHggMTJweDsNCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMTsNCiAgICBjb2xvcjogIzU1NTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LXNtLA0KLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1hZGRvbiwNCi5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5pbnB1dC1ncm91cC1hZGRvbi5idG4gew0KICAgIHBhZGRpbmc6IDVweCAxMHB4Ow0KICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1sZywNCi5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sDQouaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uaW5wdXQtZ3JvdXAtYWRkb24uYnRuIHsNCiAgICBwYWRkaW5nOiAxMHB4IDE2cHg7DQogICAgZm9udC1zaXplOiAxOXB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmlucHV0LWdyb3VwLWFkZG9uIGlucHV0W3R5cGU9InJhZGlvIl0sDQouaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7DQogICAgbWFyZ2luLXRvcDogMA0KfQ0KDQouaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmaXJzdC1jaGlsZCwNCi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCwNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0biwNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0bi1ncm91cD4uYnRuLA0KLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xlLA0KLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksDQouaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpPi5idG4gew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwDQp9DQoNCi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLXJpZ2h0OiAwDQp9DQoNCi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsDQouaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCwNCi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLA0KLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5idG4tZ3JvdXA+LmJ0biwNCi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xlLA0KLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLA0KLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG4gew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQouaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLWxlZnQ6IDANCn0NCg0KLmlucHV0LWdyb3VwLWJ0biB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZvbnQtc2l6ZTogMDsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwDQp9DQoNCi5pbnB1dC1ncm91cC1idG4+LmJ0biB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlDQp9DQoNCi5pbnB1dC1ncm91cC1idG4+LmJ0bisuYnRuIHsNCiAgICBtYXJnaW4tbGVmdDogLTFweA0KfQ0KDQouaW5wdXQtZ3JvdXAtYnRuPi5idG46aG92ZXIsDQouaW5wdXQtZ3JvdXAtYnRuPi5idG46Zm9jdXMsDQouaW5wdXQtZ3JvdXAtYnRuPi5idG46YWN0aXZlIHsNCiAgICB6LWluZGV4OiAyDQp9DQoNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0biwNCi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0bi1ncm91cCB7DQogICAgbWFyZ2luLXJpZ2h0OiAtMXB4DQp9DQoNCi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLA0KLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5idG4tZ3JvdXAgew0KICAgIHotaW5kZXg6IDI7DQogICAgbWFyZ2luLWxlZnQ6IC0xcHgNCn0NCg0KLm5hdiB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZQ0KfQ0KDQoubmF2OmJlZm9yZSwNCi5uYXY6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQoubmF2OmFmdGVyIHsNCiAgICBjbGVhcjogYm90aA0KfQ0KDQoubmF2PmxpIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2sNCn0NCg0KLm5hdj5saT5hIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZzogMTBweCAxNXB4DQp9DQoNCi5uYXY+bGk+YTpob3ZlciwNCi5uYXY+bGk+YTpmb2N1cyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWUNCn0NCg0KLm5hdj5saS5kaXNhYmxlZD5hIHsNCiAgICBjb2xvcjogIzc3Nw0KfQ0KDQoubmF2PmxpLmRpc2FibGVkPmE6aG92ZXIsDQoubmF2PmxpLmRpc2FibGVkPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjNzc3Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCi5uYXYgLm9wZW4+YSwNCi5uYXYgLm9wZW4+YTpob3ZlciwNCi5uYXYgLm9wZW4+YTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLm5hdiAubmF2LWRpdmlkZXIgew0KICAgIGhlaWdodDogMXB4Ow0KICAgIG1hcmdpbjogOS41cHggMDsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTUNCn0NCg0KLm5hdj5saT5hPmltZyB7DQogICAgbWF4LXdpZHRoOiBub25lDQp9DQoNCi5uYXYtdGFicyB7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQNCn0NCg0KLm5hdi10YWJzPmxpIHsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBtYXJnaW4tYm90dG9tOiAtMXB4DQp9DQoNCi5uYXYtdGFicz5saT5hIHsNCiAgICBtYXJnaW4tcmlnaHQ6IDJweDsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItcmFkaXVzOiAwIDAgMCAwDQp9DQoNCi5uYXYtdGFicz5saT5hOmhvdmVyIHsNCiAgICBib3JkZXItY29sb3I6ICNlZWUgI2VlZSAjZGRkDQp9DQoNCi5uYXYtdGFicz5saS5hY3RpdmU+YSwNCi5uYXYtdGFicz5saS5hY3RpdmU+YTpob3ZlciwNCi5uYXYtdGFicz5saS5hY3RpdmU+YTpmb2N1cyB7DQogICAgY29sb3I6ICM1NTU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOw0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGN1cnNvcjogZGVmYXVsdA0KfQ0KDQoubmF2LXBpbGxzPmxpIHsNCiAgICBmbG9hdDogbGVmdA0KfQ0KDQoubmF2LXBpbGxzPmxpPmEgew0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLm5hdi1waWxscz5saStsaSB7DQogICAgbWFyZ2luLWxlZnQ6IDJweA0KfQ0KDQoubmF2LXBpbGxzPmxpLmFjdGl2ZT5hLA0KLm5hdi1waWxscz5saS5hY3RpdmU+YTpob3ZlciwNCi5uYXYtcGlsbHM+bGkuYWN0aXZlPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWYNCn0NCg0KLm5hdi1zdGFja2VkPmxpIHsNCiAgICBmbG9hdDogbm9uZQ0KfQ0KDQoubmF2LXN0YWNrZWQ+bGkrbGkgew0KICAgIG1hcmdpbi10b3A6IDJweDsNCiAgICBtYXJnaW4tbGVmdDogMA0KfQ0KDQoubmF2LWp1c3RpZmllZCwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHsNCiAgICB3aWR0aDogMTAwJQ0KfQ0KDQoubmF2LWp1c3RpZmllZD5saSwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpIHsNCiAgICBmbG9hdDogbm9uZQ0KfQ0KDQoubmF2LWp1c3RpZmllZD5saT5hLA0KLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGk+YSB7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIG1hcmdpbi1ib3R0b206IDVweA0KfQ0KDQoubmF2LWp1c3RpZmllZD4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgew0KICAgIHRvcDogYXV0bzsNCiAgICBsZWZ0OiBhdXRvDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIHsNCg0KICAgIC5uYXYtanVzdGlmaWVkPmxpLA0KICAgIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsNCiAgICAgICAgd2lkdGg6IDElDQogICAgfQ0KDQogICAgLm5hdi1qdXN0aWZpZWQ+bGk+YSwNCiAgICAubmF2LXRhYnMubmF2LWp1c3RpZmllZD5saT5hIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMA0KICAgIH0NCn0NCg0KLm5hdi10YWJzLWp1c3RpZmllZCwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHsNCiAgICBib3JkZXItYm90dG9tOiAwDQp9DQoNCi5uYXYtdGFicy1qdXN0aWZpZWQ+bGk+YSwNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpPmEgew0KICAgIG1hcmdpbi1yaWdodDogMDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hLA0KLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hLA0KLm5hdi10YWJzLWp1c3RpZmllZD4uYWN0aXZlPmE6aG92ZXIsDQoubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6aG92ZXIsDQoubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywNCi5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cyB7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQoNCiAgICAubmF2LXRhYnMtanVzdGlmaWVkPmxpPmEsDQogICAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGk+YSB7DQogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOw0KICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgMCAwDQogICAgfQ0KDQogICAgLm5hdi10YWJzLWp1c3RpZmllZD4uYWN0aXZlPmEsDQogICAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hLA0KICAgIC5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmhvdmVyLA0KICAgIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YTpob3ZlciwNCiAgICAubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywNCiAgICAubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6Zm9jdXMgew0KICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmDQogICAgfQ0KfQ0KDQoudGFiLWNvbnRlbnQ+LnRhYi1wYW5lIHsNCiAgICBkaXNwbGF5OiBub25lDQp9DQoNCi50YWItY29udGVudD4uYWN0aXZlIHsNCiAgICBkaXNwbGF5OiBibG9jaw0KfQ0KDQoubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi10b3A6IC0xcHg7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoubmF2YmFyIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgbWluLWhlaWdodDogNjRweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50DQp9DQoNCi5uYXZiYXI6YmVmb3JlLA0KLm5hdmJhcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5uYXZiYXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhciB7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDANCiAgICB9DQp9DQoNCi5uYXZiYXItaGVhZGVyOmJlZm9yZSwNCi5uYXZiYXItaGVhZGVyOmFmdGVyIHsNCiAgICBjb250ZW50OiAiICI7DQogICAgZGlzcGxheTogdGFibGUNCn0NCg0KLm5hdmJhci1oZWFkZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhci1oZWFkZXIgew0KICAgICAgICBmbG9hdDogbGVmdA0KICAgIH0NCn0NCg0KLm5hdmJhci1jb2xsYXBzZSB7DQogICAgb3ZlcmZsb3cteDogdmlzaWJsZTsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4Ow0KICAgIHBhZGRpbmctbGVmdDogMTVweDsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKTsNCiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2gNCn0NCg0KLm5hdmJhci1jb2xsYXBzZTpiZWZvcmUsDQoubmF2YmFyLWNvbGxhcHNlOmFmdGVyIHsNCiAgICBjb250ZW50OiAiICI7DQogICAgZGlzcGxheTogdGFibGUNCn0NCg0KLm5hdmJhci1jb2xsYXBzZTphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KLm5hdmJhci1jb2xsYXBzZS5pbiB7DQogICAgb3ZlcmZsb3cteTogYXV0bw0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KICAgIC5uYXZiYXItY29sbGFwc2Ugew0KICAgICAgICB3aWR0aDogYXV0bzsNCiAgICAgICAgYm9yZGVyLXRvcDogMDsNCiAgICAgICAgYm94LXNoYWRvdzogbm9uZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItY29sbGFwc2UuY29sbGFwc2Ugew0KICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7DQogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICAubmF2YmFyLWNvbGxhcHNlLmluIHsNCiAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsDQogICAgLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItY29sbGFwc2UsDQogICAgLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICAgICAgcGFkZGluZy1yaWdodDogMA0KICAgIH0NCn0NCg0KLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSwNCi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Ugew0KICAgIG1heC1oZWlnaHQ6IDM0MHB4DQp9DQoNCkBtZWRpYShtYXgtZGV2aWNlLXdpZHRoOjQ4MHB4KSBhbmQgKG9yaWVudGF0aW9uOmxhbmRzY2FwZSkgew0KDQogICAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSwNCiAgICAubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHsNCiAgICAgICAgbWF4LWhlaWdodDogMjAwcHgNCiAgICB9DQp9DQoNCi5jb250YWluZXI+Lm5hdmJhci1oZWFkZXIsDQouY29udGFpbmVyPi5uYXZiYXItY29sbGFwc2UsDQouY29udGFpbmVyLWZsdWlkPi5uYXZiYXItaGVhZGVyLA0KLmNvbnRhaW5lci1mbHVpZD4ubmF2YmFyLWNvbGxhcHNlIHsNCiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4Ow0KICAgIG1hcmdpbi1sZWZ0OiAtMTVweA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KDQogICAgLmNvbnRhaW5lcj4ubmF2YmFyLWhlYWRlciwNCiAgICAuY29udGFpbmVyPi5uYXZiYXItY29sbGFwc2UsDQogICAgLmNvbnRhaW5lci1mbHVpZD4ubmF2YmFyLWhlYWRlciwNCiAgICAuY29udGFpbmVyLWZsdWlkPi5uYXZiYXItY29sbGFwc2Ugew0KICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAwDQogICAgfQ0KfQ0KDQoubmF2YmFyLXN0YXRpYy10b3Agew0KICAgIHotaW5kZXg6IDEwMDA7DQogICAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhci1zdGF0aWMtdG9wIHsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMA0KICAgIH0NCn0NCg0KLm5hdmJhci1maXhlZC10b3AsDQoubmF2YmFyLWZpeGVkLWJvdHRvbSB7DQogICAgcG9zaXRpb246IGZpeGVkOw0KICAgIHJpZ2h0OiAwOw0KICAgIGxlZnQ6IDA7DQogICAgei1pbmRleDogMTAzMA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KDQogICAgLm5hdmJhci1maXhlZC10b3AsDQogICAgLm5hdmJhci1maXhlZC1ib3R0b20gew0KICAgICAgICBib3JkZXItcmFkaXVzOiAwDQogICAgfQ0KfQ0KDQoubmF2YmFyLWZpeGVkLXRvcCB7DQogICAgdG9wOiAwOw0KICAgIGJvcmRlci13aWR0aDogMCAwIDFweA0KfQ0KDQoubmF2YmFyLWZpeGVkLWJvdHRvbSB7DQogICAgYm90dG9tOiAwOw0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgYm9yZGVyLXdpZHRoOiAxcHggMCAwDQp9DQoNCi5uYXZiYXItYnJhbmQgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHBhZGRpbmc6IDhweCAxMHB4Ow0KICAgIGZvbnQtc2l6ZTogMTlweDsNCiAgICBsaW5lLWhlaWdodDogMjFweDsNCiAgICBoZWlnaHQ6IDY0cHgNCn0NCg0KLm5hdmJhci1icmFuZDpob3ZlciwNCi5uYXZiYXItYnJhbmQ6Zm9jdXMgew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZQ0KfQ0KDQoubmF2YmFyLWJyYW5kPmltZyB7DQogICAgZGlzcGxheTogYmxvY2sNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCg0KICAgIC5uYXZiYXI+LmNvbnRhaW5lciAubmF2YmFyLWJyYW5kLA0KICAgIC5uYXZiYXI+LmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kIHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xNXB4DQogICAgfQ0KfQ0KDQoubmF2YmFyLXRvZ2dsZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZsb2F0OiByaWdodDsNCiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7DQogICAgcGFkZGluZzogOXB4IDEwcHg7DQogICAgbWFyZ2luLXRvcDogOHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDhweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyY2UxOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7DQogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoubmF2YmFyLXRvZ2dsZTpmb2N1cyB7DQogICAgb3V0bGluZTogMA0KfQ0KDQoubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAyMnB4Ow0KICAgIGhlaWdodDogMnB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDFweA0KfQ0KDQoubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIrLmljb24tYmFyIHsNCiAgICBtYXJnaW4tdG9wOiA0cHgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAubmF2YmFyLXRvZ2dsZSB7DQogICAgICAgIGRpc3BsYXk6IG5vbmUNCiAgICB9DQp9DQoNCi5uYXZiYXItbmF2IHsNCiAgICBtYXJnaW46IDcuMjVweCAtMTVweA0KfQ0KDQoubmF2YmFyLW5hdj5saT5hIHsNCiAgICBwYWRkaW5nLXRvcDogMTBweDsNCiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsNCiAgICBsaW5lLWhlaWdodDogMjFweA0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHsNCiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsNCiAgICAgICAgZmxvYXQ6IG5vbmU7DQogICAgICAgIHdpZHRoOiBhdXRvOw0KICAgICAgICBtYXJnaW4tdG9wOiAwOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgYm9yZGVyOiAwOw0KICAgICAgICBib3gtc2hhZG93OiBub25lDQogICAgfQ0KDQogICAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+bGk+YSwNCiAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyIHsNCiAgICAgICAgcGFkZGluZzogNXB4IDE1cHggNXB4IDI1cHgNCiAgICB9DQoNCiAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hIHsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHgNCiAgICB9DQoNCiAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyLA0KICAgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMgew0KICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lDQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjEyMDBweCkgew0KICAgIC5uYXZiYXItbmF2IHsNCiAgICAgICAgZmxvYXQ6IGxlZnQ7DQogICAgICAgIG1hcmdpbjogMA0KICAgIH0NCg0KICAgIC5uYXZiYXItbmF2PmxpIHsNCiAgICAgICAgZmxvYXQ6IGxlZnQNCiAgICB9DQoNCiAgICAubmF2YmFyLW5hdj5saT5hIHsNCiAgICAgICAgcGFkZGluZy10b3A6IDE0LjVweDsNCiAgICAgICAgcGFkZGluZy1ib3R0b206IDE0LjVweA0KICAgIH0NCn0NCg0KLm5hdmJhci1mb3JtIHsNCiAgICBtYXJnaW4tbGVmdDogLTE1cHg7DQogICAgbWFyZ2luLXJpZ2h0OiAtMTVweDsNCiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7DQogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKTsNCiAgICBtYXJnaW4tdG9wOiA3LjVweDsNCiAgICBtYXJnaW4tYm90dG9tOiA3LjVweA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIHdpZHRoOiBhdXRvOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLA0KICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0biwNCiAgICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wgew0KICAgICAgICB3aWR0aDogYXV0bw0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXA+LmZvcm0tY29udHJvbCB7DQogICAgICAgIHdpZHRoOiAxMDAlDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5jb250cm9sLWxhYmVsIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAucmFkaW8sDQogICAgLm5hdmJhci1mb3JtIC5jaGVja2JveCB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAucmFkaW8gbGFiZWwsDQogICAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBsYWJlbCB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMA0KICAgIH0NCg0KICAgIC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwNCiAgICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAwDQogICAgfQ0KDQogICAgLm5hdmJhci1mb3JtIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7DQogICAgICAgIHRvcDogMA0KICAgIH0NCn0NCg0KQG1lZGlhKG1heC13aWR0aDoxMTk5cHgpIHsNCiAgICAubmF2YmFyLWZvcm0gLmZvcm0tZ3JvdXAgew0KICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHgNCiAgICB9DQoNCiAgICAubmF2YmFyLWZvcm0gLmZvcm0tZ3JvdXA6bGFzdC1jaGlsZCB7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDANCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLm5hdmJhci1mb3JtIHsNCiAgICAgICAgd2lkdGg6IGF1dG87DQogICAgICAgIGJvcmRlcjogMDsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7DQogICAgICAgIG1hcmdpbi1yaWdodDogMDsNCiAgICAgICAgcGFkZGluZy10b3A6IDA7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiAwOw0KICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7DQogICAgICAgIGJveC1zaGFkb3c6IG5vbmUNCiAgICB9DQp9DQoNCi5uYXZiYXItbmF2PmxpPi5kcm9wZG93bi1tZW51IHsNCiAgICBtYXJnaW4tdG9wOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDANCn0NCg0KLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1uYXY+bGk+LmRyb3Bkb3duLW1lbnUgew0KICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5uYXZiYXItYnRuIHsNCiAgICBtYXJnaW4tdG9wOiA3LjVweDsNCiAgICBtYXJnaW4tYm90dG9tOiA3LjVweA0KfQ0KDQoubmF2YmFyLWJ0bi5idG4tc20sDQouYnRuLWdyb3VwLXNtPi5uYXZiYXItYnRuLmJ0biB7DQogICAgbWFyZ2luLXRvcDogOS41cHg7DQogICAgbWFyZ2luLWJvdHRvbTogOS41cHgNCn0NCg0KLm5hdmJhci1idG4uYnRuLXhzLA0KLmJ0bi1ncm91cC14cz4ubmF2YmFyLWJ0bi5idG4gew0KICAgIG1hcmdpbi10b3A6IDE0cHg7DQogICAgbWFyZ2luLWJvdHRvbTogMTRweA0KfQ0KDQoubmF2YmFyLXRleHQgew0KICAgIG1hcmdpbi10b3A6IDE0LjVweDsNCiAgICBtYXJnaW4tYm90dG9tOiAxNC41cHgNCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAubmF2YmFyLXRleHQgew0KICAgICAgICBmbG9hdDogbGVmdDsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7DQogICAgICAgIG1hcmdpbi1yaWdodDogMTVweA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAubmF2YmFyLWxlZnQgew0KICAgICAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgLm5hdmJhci1yaWdodCB7DQogICAgICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50Ow0KICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMC40ZW07DQogICAgfQ0KDQogICAgLm5hdmJhci1yaWdodH4ubmF2YmFyLXJpZ2h0IHsNCiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwDQogICAgfQ0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjZWVlDQp9DQoNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpob3ZlciwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzIHsNCiAgICBjb2xvcjogIzRkNGQ0ZDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10ZXh0IHsNCiAgICBjb2xvcjogIzc3Nw0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YSB7DQogICAgY29sb3I6ICM2NjYNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2PmxpPmE6aG92ZXIsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YTpmb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5hY3RpdmU+YSwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uYWN0aXZlPmE6aG92ZXIsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+LmFjdGl2ZT5hOmZvY3VzIHsNCiAgICBjb2xvcjogIzJmNWZlZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlDQp9DQoNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YSwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpob3ZlciwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpmb2N1cyB7DQogICAgY29sb3I6ICNjY2M7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIHsNCiAgICBib3JkZXItY29sb3I6ICNkZGQNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmhvdmVyLA0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkDQp9DQoNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4ODgNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItY29sbGFwc2UsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1mb3JtIHsNCiAgICBib3JkZXItY29sb3I6ICNlZWUNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5vcGVuPmEsDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+Lm9wZW4+YTpob3ZlciwNCi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOw0KICAgIGNvbG9yOiAjMmY1ZmVmDQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6MTE5OXB4KSB7DQogICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmEgew0KICAgICAgICBjb2xvcjogIzY2Ng0KICAgIH0NCg0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyLA0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzIHsNCiAgICAgICAgY29sb3I6ICMyZjVmZWY7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQogICAgfQ0KDQogICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwNCiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmhvdmVyLA0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6Zm9jdXMgew0KICAgICAgICBjb2xvcjogIzJmNWZlZjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZQ0KICAgIH0NCg0KICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YSwNCiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXIsDQogICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICAgICAgY29sb3I6ICNjY2M7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQogICAgfQ0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rOmhvdmVyIHsNCiAgICBjb2xvcjogIzJmNWZlZg0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rIHsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KDQoubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVyLA0KLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpmb2N1cyB7DQogICAgY29sb3I6ICMyZjVmZWYNCn0NCg0KLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsDQoubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cywNCmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVyLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMgew0KICAgIGNvbG9yOiAjY2NjDQp9DQoNCi5uYXZiYXItaW52ZXJzZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsNCiAgICBib3JkZXItY29sb3I6ICMwOTA5MDkNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRleHQgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj5saT5hIHsNCiAgICBjb2xvcjogIzlkOWQ5ZA0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+bGk+YTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj5saT5hOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+LmFjdGl2ZT5hLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5hY3RpdmU+YTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4uYWN0aXZlPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwOTA5MDkNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hOmhvdmVyLA0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hOmZvY3VzIHsNCiAgICBjb2xvcjogIzQ0NDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgew0KICAgIGJvcmRlci1jb2xvcjogI2ZmZg0KfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIsDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMDJDRTE7DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItY29sbGFwc2UsDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1mb3JtIHsNCiAgICBib3JkZXItY29sb3I6ICMxMDEwMTANCn0NCg0KLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5vcGVuPmEsDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+Lm9wZW4+YTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAyQ0UxOw0KICAgIGNvbG9yOiAjZmZmDQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6MTE5OXB4KSB7DQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kcm9wZG93bi1oZWFkZXIgew0KICAgICAgICBib3JkZXItY29sb3I6ICMwOTA5MDkNCiAgICB9DQoNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmDQogICAgfQ0KDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXIsDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMgew0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCiAgICB9DQoNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hLA0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpmb2N1cyB7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAxMDVFDQogICAgfQ0KDQogICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hLA0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwNCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXMgew0KICAgICAgICBjb2xvcjogIzQ0NDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQNCiAgICB9DQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmsgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXIgew0KICAgIGNvbG9yOiAjZmZmDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmsgew0KICAgIGNvbG9yOiAjOWQ5ZDlkDQp9DQoNCi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsDQoubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZg0KfQ0KDQoubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwNCi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLA0KZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsDQpmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cyB7DQogICAgY29sb3I6ICM0NDQNCn0NCg0KLmJyZWFkY3J1bWIgew0KICAgIHBhZGRpbmc6IDAgMDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5icmVhZGNydW1iPmxpIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sNCn0NCg0KLmJyZWFkY3J1bWI+bGkrbGk6YmVmb3JlIHsNCiAgICBjb250ZW50OiAiPiAiOw0KICAgIHBhZGRpbmc6IDAgNXB4Ow0KICAgIGNvbG9yOiAjNjY2DQp9DQoNCi5icmVhZGNydW1iPi5hY3RpdmUgew0KICAgIGNvbG9yOiAjNjY2DQp9DQoNCi5wYWdpbmF0aW9uIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgIG1hcmdpbjogMjFweCAwOw0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLnBhZ2luYXRpb24+bGkgew0KICAgIGRpc3BsYXk6IGlubGluZQ0KfQ0KDQoucGFnaW5hdGlvbj5saT5hLA0KLnBhZ2luYXRpb24+bGk+c3BhbiB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHBhZGRpbmc6IDZweCAxMnB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjb2xvcjogIzY2NjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7DQogICAgbWFyZ2luLWxlZnQ6IC0xcHgNCn0NCg0KLnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+YSwNCi5wYWdpbmF0aW9uPmxpOmZpcnN0LWNoaWxkPnNwYW4gew0KICAgIG1hcmdpbi1sZWZ0OiAwOw0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoucGFnaW5hdGlvbj5saTpsYXN0LWNoaWxkPmEsDQoucGFnaW5hdGlvbj5saTpsYXN0LWNoaWxkPnNwYW4gew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwDQp9DQoNCi5wYWdpbmF0aW9uPmxpPmE6aG92ZXIsDQoucGFnaW5hdGlvbj5saT5hOmZvY3VzLA0KLnBhZ2luYXRpb24+bGk+c3Bhbjpob3ZlciwNCi5wYWdpbmF0aW9uPmxpPnNwYW46Zm9jdXMgew0KICAgIHotaW5kZXg6IDI7DQogICAgY29sb3I6ICMwZjNjYzM7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCiAgICBib3JkZXItY29sb3I6ICNkZGQNCn0NCg0KLnBhZ2luYXRpb24+LmFjdGl2ZT5hLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmhvdmVyLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmZvY3VzLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmhvdmVyLA0KLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmZvY3VzIHsNCiAgICB6LWluZGV4OiAzOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyMzIyMjI7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmOw0KICAgIGN1cnNvcjogZGVmYXVsdA0KfQ0KDQoucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3BhbiwNCi5wYWdpbmF0aW9uPi5kaXNhYmxlZD5zcGFuOmhvdmVyLA0KLnBhZ2luYXRpb24+LmRpc2FibGVkPnNwYW46Zm9jdXMsDQoucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YSwNCi5wYWdpbmF0aW9uPi5kaXNhYmxlZD5hOmhvdmVyLA0KLnBhZ2luYXRpb24+LmRpc2FibGVkPmE6Zm9jdXMgew0KICAgIGNvbG9yOiAjNzc3Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjZGRkOw0KICAgIGN1cnNvcjogbm90LWFsbG93ZWQNCn0NCg0KLnBhZ2luYXRpb24tbGc+bGk+YSwNCi5wYWdpbmF0aW9uLWxnPmxpPnNwYW4gew0KICAgIHBhZGRpbmc6IDEwcHggMTZweDsNCiAgICBmb250LXNpemU6IDE5cHg7DQogICAgbGluZS1oZWlnaHQ6IDEuMzMzMzMNCn0NCg0KLnBhZ2luYXRpb24tbGc+bGk6Zmlyc3QtY2hpbGQ+YSwNCi5wYWdpbmF0aW9uLWxnPmxpOmZpcnN0LWNoaWxkPnNwYW4gew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoucGFnaW5hdGlvbi1sZz5saTpsYXN0LWNoaWxkPmEsDQoucGFnaW5hdGlvbi1sZz5saTpsYXN0LWNoaWxkPnNwYW4gew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwDQp9DQoNCi5wYWdpbmF0aW9uLXNtPmxpPmEsDQoucGFnaW5hdGlvbi1zbT5saT5zcGFuIHsNCiAgICBwYWRkaW5nOiA1cHggMTBweDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgbGluZS1oZWlnaHQ6IDEuNQ0KfQ0KDQoucGFnaW5hdGlvbi1zbT5saTpmaXJzdC1jaGlsZD5hLA0KLnBhZ2luYXRpb24tc20+bGk6Zmlyc3QtY2hpbGQ+c3BhbiB7DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5wYWdpbmF0aW9uLXNtPmxpOmxhc3QtY2hpbGQ+YSwNCi5wYWdpbmF0aW9uLXNtPmxpOmxhc3QtY2hpbGQ+c3BhbiB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDANCn0NCg0KLnBhZ2VyIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbWFyZ2luOiAyMXB4IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXINCn0NCg0KLnBhZ2VyOmJlZm9yZSwNCi5wYWdlcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5wYWdlcjphZnRlciB7DQogICAgY2xlYXI6IGJvdGgNCn0NCg0KLnBhZ2VyIGxpIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUNCn0NCg0KLnBhZ2VyIGxpPmEsDQoucGFnZXIgbGk+c3BhbiB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIHBhZGRpbmc6IDVweCAxNHB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCiAgICBib3JkZXItcmFkaXVzOiAxNXB4DQp9DQoNCi5wYWdlciBsaT5hOmhvdmVyLA0KLnBhZ2VyIGxpPmE6Zm9jdXMgew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlDQp9DQoNCi5wYWdlciAubmV4dD5hLA0KLnBhZ2VyIC5uZXh0PnNwYW4gew0KICAgIGZsb2F0OiByaWdodA0KfQ0KDQoucGFnZXIgLnByZXZpb3VzPmEsDQoucGFnZXIgLnByZXZpb3VzPnNwYW4gew0KICAgIGZsb2F0OiBsZWZ0DQp9DQoNCi5wYWdlciAuZGlzYWJsZWQ+YSwNCi5wYWdlciAuZGlzYWJsZWQ+YTpob3ZlciwNCi5wYWdlciAuZGlzYWJsZWQ+YTpmb2N1cywNCi5wYWdlciAuZGlzYWJsZWQ+c3BhbiB7DQogICAgY29sb3I6ICM3Nzc7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkDQp9DQoNCi5sYWJlbCB7DQogICAgZGlzcGxheTogaW5saW5lOw0KICAgIHBhZGRpbmc6IC4yZW0gLjZlbSAuM2VtOw0KICAgIGZvbnQtc2l6ZTogNzUlOw0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsNCiAgICBib3JkZXItcmFkaXVzOiAuMjVlbQ0KfQ0KDQoubGFiZWw6ZW1wdHkgew0KICAgIGRpc3BsYXk6IG5vbmUNCn0NCg0KLmJ0biAubGFiZWwgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0b3A6IC0xcHgNCn0NCg0KYS5sYWJlbDpob3ZlciwNCmEubGFiZWw6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjdXJzb3I6IHBvaW50ZXINCn0NCg0KLmxhYmVsLWRlZmF1bHQgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM3NzcNCn0NCg0KLmxhYmVsLWRlZmF1bHRbaHJlZl06aG92ZXIsDQoubGFiZWwtZGVmYXVsdFtocmVmXTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzVlNWU1ZQ0KfQ0KDQoubGFiZWwtcHJpbWFyeSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZg0KfQ0KDQoubGFiZWwtcHJpbWFyeVtocmVmXTpob3ZlciwNCi5sYWJlbC1wcmltYXJ5W2hyZWZdOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0M2RhDQp9DQoNCi5sYWJlbC1zdWNjZXNzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2M3NjNkDQp9DQoNCi5sYWJlbC1zdWNjZXNzW2hyZWZdOmhvdmVyLA0KLmxhYmVsLXN1Y2Nlc3NbaHJlZl06Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyYjU0MmMNCn0NCg0KLmxhYmVsLWluZm8gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGYNCn0NCg0KLmxhYmVsLWluZm9baHJlZl06aG92ZXIsDQoubGFiZWwtaW5mb1tocmVmXTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI0NTI2OQ0KfQ0KDQoubGFiZWwtd2FybmluZyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYg0KfQ0KDQoubGFiZWwtd2FybmluZ1tocmVmXTpob3ZlciwNCi5sYWJlbC13YXJuaW5nW2hyZWZdOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY1MTJjDQp9DQoNCi5sYWJlbC1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNhOTQ0NDINCn0NCg0KLmxhYmVsLWRhbmdlcltocmVmXTpob3ZlciwNCi5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4NDM1MzQNCn0NCg0KLmJhZGdlIHsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgbWluLXdpZHRoOiAxMHB4Ow0KICAgIHBhZGRpbmc6IDNweCA3cHg7DQogICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzc3NzsNCiAgICBib3JkZXItcmFkaXVzOiAxMHB4DQp9DQoNCi5iYWRnZTplbXB0eSB7DQogICAgZGlzcGxheTogbm9uZQ0KfQ0KDQouYnRuIC5iYWRnZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogLTFweA0KfQ0KDQouYnRuLXhzIC5iYWRnZSwNCi5idG4tZ3JvdXAteHM+LmJ0biAuYmFkZ2UsDQouYnRuLWdyb3VwLXhzPi5idG4gLmJhZGdlIHsNCiAgICB0b3A6IDA7DQogICAgcGFkZGluZzogMXB4IDVweA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZT4uYmFkZ2UsDQoubmF2LXBpbGxzPi5hY3RpdmU+YT4uYmFkZ2Ugew0KICAgIGNvbG9yOiAjMmY1ZmVmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbT4uYmFkZ2Ugew0KICAgIGZsb2F0OiByaWdodA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtPi5iYWRnZSsuYmFkZ2Ugew0KICAgIG1hcmdpbi1yaWdodDogNXB4DQp9DQoNCi5uYXYtcGlsbHM+bGk+YT4uYmFkZ2Ugew0KICAgIG1hcmdpbi1sZWZ0OiAzcHgNCn0NCg0KYS5iYWRnZTpob3ZlciwNCmEuYmFkZ2U6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjdXJzb3I6IHBvaW50ZXINCn0NCg0KLmp1bWJvdHJvbiB7DQogICAgcGFkZGluZy10b3A6IDMwcHg7DQogICAgcGFkZGluZy1ib3R0b206IDMwcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMzBweDsNCiAgICBjb2xvcjogaW5oZXJpdDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlDQp9DQoNCi5qdW1ib3Ryb24gaDEsDQouanVtYm90cm9uIC5oMSB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLmp1bWJvdHJvbiBwIHsNCiAgICBtYXJnaW4tYm90dG9tOiAxNXB4Ow0KICAgIGZvbnQtc2l6ZTogMjNweDsNCiAgICBmb250LXdlaWdodDogMjAwDQp9DQoNCi5qdW1ib3Ryb24+aHIgew0KICAgIGJvcmRlci10b3AtY29sb3I6ICNkNWQ1ZDUNCn0NCg0KLmNvbnRhaW5lciAuanVtYm90cm9uLA0KLmNvbnRhaW5lci1mbHVpZCAuanVtYm90cm9uIHsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIHBhZGRpbmctbGVmdDogMTVweDsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4DQp9DQoNCi5qdW1ib3Ryb24gLmNvbnRhaW5lciB7DQogICAgbWF4LXdpZHRoOiAxMDAlDQp9DQoNCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpIHsNCiAgICAuanVtYm90cm9uIHsNCiAgICAgICAgcGFkZGluZy10b3A6IDQ4cHg7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiA0OHB4DQogICAgfQ0KDQogICAgLmNvbnRhaW5lciAuanVtYm90cm9uLA0KICAgIC5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7DQogICAgICAgIHBhZGRpbmctbGVmdDogNjBweDsNCiAgICAgICAgcGFkZGluZy1yaWdodDogNjBweA0KICAgIH0NCg0KICAgIC5qdW1ib3Ryb24gaDEsDQogICAgLmp1bWJvdHJvbiAuaDEgew0KICAgICAgICBmb250LXNpemU6IDY4cHgNCiAgICB9DQp9DQoNCi50aHVtYm5haWwgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IDRweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyIC4ycyBlYXNlLWluLW91dDsNCiAgICAtby10cmFuc2l0aW9uOiBib3JkZXIgLjJzIGVhc2UtaW4tb3V0Ow0KICAgIHRyYW5zaXRpb246IGJvcmRlciAuMnMgZWFzZS1pbi1vdXQNCn0NCg0KLnRodW1ibmFpbD5pbWcsDQoudGh1bWJuYWlsIGE+aW1nIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtYXgtd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiBhdXRvOw0KICAgIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICAgIG1hcmdpbi1yaWdodDogYXV0bw0KfQ0KDQoudGh1bWJuYWlsIC5jYXB0aW9uIHsNCiAgICBwYWRkaW5nOiA5cHg7DQogICAgY29sb3I6ICM2NjYNCn0NCg0KYS50aHVtYm5haWw6aG92ZXIsDQphLnRodW1ibmFpbDpmb2N1cywNCmEudGh1bWJuYWlsLmFjdGl2ZSB7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5hbGVydCB7DQogICAgcGFkZGluZzogMTVweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmFsZXJ0IGg0IHsNCiAgICBtYXJnaW4tdG9wOiAwOw0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCi5hbGVydCAuYWxlcnQtbGluayB7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQNCn0NCg0KLmFsZXJ0PnAsDQouYWxlcnQ+dWwgew0KICAgIG1hcmdpbi1ib3R0b206IDANCn0NCg0KLmFsZXJ0PnArcCB7DQogICAgbWFyZ2luLXRvcDogNXB4DQp9DQoNCi5hbGVydC1kaXNtaXNzYWJsZSwNCi5hbGVydC1kaXNtaXNzaWJsZSB7DQogICAgcGFkZGluZy1yaWdodDogMzVweA0KfQ0KDQouYWxlcnQtZGlzbWlzc2FibGUgLmNsb3NlLA0KLmFsZXJ0LWRpc21pc3NpYmxlIC5jbG9zZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogLTJweDsNCiAgICByaWdodDogLTIxcHg7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLmFsZXJ0LXN1Y2Nlc3Mgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmU5YzY7DQogICAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2Ow0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5hbGVydC1zdWNjZXNzIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjYzllMmI0DQp9DQoNCi5hbGVydC1zdWNjZXNzIC5hbGVydC1saW5rIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYWxlcnQtaW5mbyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZThmMTsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5hbGVydC1pbmZvIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouYWxlcnQtaW5mbyAuYWxlcnQtbGluayB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KLmFsZXJ0LXdhcm5pbmcgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWViY2M7DQogICAgYm9yZGVyLWNvbG9yOiAjZmFlYmNjOw0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCi5hbGVydC13YXJuaW5nIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjZjhlMmI1DQp9DQoNCi5hbGVydC13YXJuaW5nIC5hbGVydC1saW5rIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYWxlcnQtZGFuZ2VyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWJjY2QxOw0KICAgIGJvcmRlci1jb2xvcjogI2ViY2NkMTsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQouYWxlcnQtZGFuZ2VyIGhyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjZTRiYWMwDQp9DQoNCi5hbGVydC1kYW5nZXIgLmFsZXJ0LWxpbmsgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7DQogICAgZnJvbSB7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMA0KICAgIH0NCg0KICAgIHRvIHsNCiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwDQogICAgfQ0KfQ0KDQpAa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHsNCiAgICBmcm9tIHsNCiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwDQogICAgfQ0KDQogICAgdG8gew0KICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDANCiAgICB9DQp9DQoNCi5wcm9ncmVzcyB7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBoZWlnaHQ6IDIxcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMjFweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1Ow0KICAgIGJvcmRlci1yYWRpdXM6IDA7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAuMSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpDQp9DQoNCi5wcm9ncmVzcy1iYXIgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHdpZHRoOiAwJTsNCiAgICBoZWlnaHQ6IDEwMCU7DQogICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIGxpbmUtaGVpZ2h0OiAyMXB4Ow0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmY1ZmVmOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAuMTUpOw0KICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgLjE1KTsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIC42cyBlYXNlOw0KICAgIC1vLXRyYW5zaXRpb246IHdpZHRoIC42cyBlYXNlOw0KICAgIHRyYW5zaXRpb246IHdpZHRoIC42cyBlYXNlDQp9DQoNCi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXIsDQoucHJvZ3Jlc3MtYmFyLXN0cmlwZWQgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHgNCn0NCg0KLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyLA0KLnByb2dyZXNzLWJhci5hY3RpdmUgew0KICAgIC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7DQogICAgLW8tYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7DQogICAgYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGUNCn0NCg0KLnByb2dyZXNzLWJhci1zdWNjZXNzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2M3NjNkDQp9DQoNCi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItc3VjY2VzcyB7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KQ0KfQ0KDQoucHJvZ3Jlc3MtYmFyLWluZm8gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGYNCn0NCg0KLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1pbmZvIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpDQp9DQoNCi5wcm9ncmVzcy1iYXItd2FybmluZyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYg0KfQ0KDQoucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLXdhcm5pbmcgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCkNCn0NCg0KLnByb2dyZXNzLWJhci1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNhOTQ0NDINCn0NCg0KLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1kYW5nZXIgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCkNCn0NCg0KLm1lZGlhIHsNCiAgICBtYXJnaW4tdG9wOiAxNXB4DQp9DQoNCi5tZWRpYTpmaXJzdC1jaGlsZCB7DQogICAgbWFyZ2luLXRvcDogMA0KfQ0KDQoubWVkaWEsDQoubWVkaWEtYm9keSB7DQogICAgem9vbTogMTsNCiAgICBvdmVyZmxvdzogaGlkZGVuDQp9DQoNCi5tZWRpYS1ib2R5IHsNCiAgICB3aWR0aDogMTAwMDBweA0KfQ0KDQoubWVkaWEtb2JqZWN0IHsNCiAgICBkaXNwbGF5OiBibG9jaw0KfQ0KDQoubWVkaWEtb2JqZWN0LmltZy10aHVtYm5haWwgew0KICAgIG1heC13aWR0aDogbm9uZQ0KfQ0KDQoubWVkaWEtcmlnaHQsDQoubWVkaWE+LnB1bGwtcmlnaHQgew0KICAgIHBhZGRpbmctbGVmdDogMTBweA0KfQ0KDQoubWVkaWEtbGVmdCwNCi5tZWRpYT4ucHVsbC1sZWZ0IHsNCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4DQp9DQoNCi5tZWRpYS1sZWZ0LA0KLm1lZGlhLXJpZ2h0LA0KLm1lZGlhLWJvZHkgew0KICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7DQogICAgdmVydGljYWwtYWxpZ246IHRvcA0KfQ0KDQoubWVkaWEtbWlkZGxlIHsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlDQp9DQoNCi5tZWRpYS1ib3R0b20gew0KICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b20NCn0NCg0KLm1lZGlhLWhlYWRpbmcgew0KICAgIG1hcmdpbi10b3A6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogNXB4DQp9DQoNCi5tZWRpYS1saXN0IHsNCiAgICBwYWRkaW5nLWxlZnQ6IDA7DQogICAgbGlzdC1zdHlsZTogbm9uZQ0KfQ0KDQoubGlzdC1ncm91cCB7DQogICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICBwYWRkaW5nLWxlZnQ6IDANCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IDEwcHggMTVweDsNCiAgICBtYXJnaW4tYm90dG9tOiAtMXB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgY29sb3I6ICM1NTUNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgew0KICAgIGNvbG9yOiAjMzMzDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW06Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtOmhvdmVyLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGNvbG9yOiAjNTU1Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUNCn0NCg0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgdGV4dC1hbGlnbjogbGVmdA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkLA0KLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciwNCi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7DQogICAgY29sb3I6ICM2NjY7DQogICAgY3Vyc29yOiBub3QtYWxsb3dlZA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgew0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LA0KLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLXRleHQsDQoubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7DQogICAgY29sb3I6ICM3NzcNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciwNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIHsNCiAgICB6LWluZGV4OiAyOw0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjVmZWY7DQogICAgYm9yZGVyLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz5zbWFsbCwNCi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz4uc21hbGwsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+c21hbGwsDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+LnNtYWxsLA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPnNtYWxsLA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPi5zbWFsbCB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LA0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHsNCiAgICBjb2xvcjogI2VjZjFmZQ0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mgew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmU5YzYNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHsNCiAgICBjb2xvcjogaW5oZXJpdA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlciwNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2M5ZTJiNA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSwNCmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlciwNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2JjZThmMQ0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIHsNCiAgICBjb2xvcjogIzAwMA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgew0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLWluZm86aG92ZXIsDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVyLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTdlMWVkDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLA0KYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXIsDQphLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCiAgICBib3JkZXItY29sb3I6ICMwMDANCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIHsNCiAgICBjb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFlYmNjDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgew0KICAgIGNvbG9yOiAjMDAwDQp9DQoNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlciwNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMgew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGUyYjUNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmUsDQphLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlciwNCmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSwNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzIHsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOw0KICAgIGJvcmRlci1jb2xvcjogIzAwMA0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NkMQ0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7DQogICAgY29sb3I6ICMwMDANCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywNCmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmhvdmVyLA0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmZvY3VzLA0KYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2U0YmFjMA0KfQ0KDQphLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLA0KYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpob3ZlciwNCmEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6Zm9jdXMsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmUsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXIsDQpidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6Zm9jdXMgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLWNvbG9yOiAjMDAwDQp9DQoNCi5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBtYXJnaW4tYm90dG9tOiA1cHgNCn0NCg0KLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHsNCiAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjMNCn0NCg0KLnBhbmVsIHsNCiAgICBtYXJnaW4tYm90dG9tOiAyMXB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNSk7DQogICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA1KQ0KfQ0KDQoucGFuZWwtYm9keSB7DQogICAgcGFkZGluZzogMTVweA0KfQ0KDQoucGFuZWwtYm9keTpiZWZvcmUsDQoucGFuZWwtYm9keTphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5wYW5lbC1ib2R5OmFmdGVyIHsNCiAgICBjbGVhcjogYm90aA0KfQ0KDQoucGFuZWwtaGVhZGluZyB7DQogICAgcGFkZGluZzogMTBweCAxNXB4Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogLTFweDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbC1oZWFkaW5nPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHsNCiAgICBjb2xvcjogaW5oZXJpdA0KfQ0KDQoucGFuZWwtdGl0bGUgew0KICAgIG1hcmdpbi10b3A6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBmb250LXNpemU6IDE3cHg7DQogICAgY29sb3I6IGluaGVyaXQNCn0NCg0KLnBhbmVsLXRpdGxlPmEsDQoucGFuZWwtdGl0bGU+c21hbGwsDQoucGFuZWwtdGl0bGU+LnNtYWxsLA0KLnBhbmVsLXRpdGxlPnNtYWxsPmEsDQoucGFuZWwtdGl0bGU+LnNtYWxsPmEgew0KICAgIGNvbG9yOiBpbmhlcml0DQp9DQoNCi5wYW5lbC1mb290ZXIgew0KICAgIHBhZGRpbmc6IDEwcHggMTVweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1Ow0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOw0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi5saXN0LWdyb3VwLA0KLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cCB7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQoucGFuZWw+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSwNCi5wYW5lbD4ucGFuZWwtY29sbGFwc2U+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSB7DQogICAgYm9yZGVyLXdpZHRoOiAxcHggMDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5wYW5lbD4ubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wOiAwOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkLA0KLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbTogMDsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogLTFweDsNCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbD4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMA0KfQ0KDQoucGFuZWwtaGVhZGluZysubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLXdpZHRoOiAwDQp9DQoNCi5saXN0LWdyb3VwKy5wYW5lbC1mb290ZXIgew0KICAgIGJvcmRlci10b3Atd2lkdGg6IDANCn0NCg0KLnBhbmVsPi50YWJsZSwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUsDQoucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi50YWJsZSB7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQoucGFuZWw+LnRhYmxlIGNhcHRpb24sDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlIGNhcHRpb24sDQoucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi50YWJsZSBjYXB0aW9uIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7DQogICAgcGFkZGluZy1yaWdodDogMTVweA0KfQ0KDQoucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IC0xcHg7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogLTFweA0KfQ0KDQoucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAtMXB4DQp9DQoNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQgew0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAtMXB4Ow0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgew0KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC0xcHg7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogLTFweA0KfQ0KDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCB7DQogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IC0xcHgNCn0NCg0KLnBhbmVsPi5wYW5lbC1ib2R5Ky50YWJsZSwNCi5wYW5lbD4ucGFuZWwtYm9keSsudGFibGUtcmVzcG9uc2l2ZSwNCi5wYW5lbD4udGFibGUrLnBhbmVsLWJvZHksDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmUrLnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkDQp9DQoNCi5wYW5lbD4udGFibGU+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGgsDQoucGFuZWw+LnRhYmxlPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkIHsNCiAgICBib3JkZXItdG9wOiAwDQp9DQoNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkIHsNCiAgICBib3JkZXI6IDANCn0NCg0KLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50aDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmZpcnN0LWNoaWxkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpmaXJzdC1jaGlsZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6Zmlyc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkIHsNCiAgICBib3JkZXItbGVmdDogMA0KfQ0KDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmxhc3QtY2hpbGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQgew0KICAgIGJvcmRlci1yaWdodDogMA0KfQ0KDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyOmZpcnN0LWNoaWxkPnRkLA0KLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cjpmaXJzdC1jaGlsZD50aCwNCi5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI6Zmlyc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmZpcnN0LWNoaWxkPnRoLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cjpmaXJzdC1jaGlsZD50ZCwNCi5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmZpcnN0LWNoaWxkPnRkLA0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpmaXJzdC1jaGlsZD50aCB7DQogICAgYm9yZGVyLWJvdHRvbTogMA0KfQ0KDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsDQoucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGggew0KICAgIGJvcmRlci1ib3R0b206IDANCn0NCg0KLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlIHsNCiAgICBib3JkZXI6IDA7DQogICAgbWFyZ2luLWJvdHRvbTogMA0KfQ0KDQoucGFuZWwtZ3JvdXAgew0KICAgIG1hcmdpbi1ib3R0b206IDIxcHgNCn0NCg0KLnBhbmVsLWdyb3VwIC5wYW5lbCB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBib3JkZXItcmFkaXVzOiAwDQp9DQoNCi5wYW5lbC1ncm91cCAucGFuZWwrLnBhbmVsIHsNCiAgICBtYXJnaW4tdG9wOiA1cHgNCn0NCg0KLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nIHsNCiAgICBib3JkZXItYm90dG9tOiAwDQp9DQoNCi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHksDQoucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5saXN0LWdyb3VwIHsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZQ0KfQ0KDQoucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciB7DQogICAgYm9yZGVyLXRvcDogMA0KfQ0KDQoucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2UgLnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlDQp9DQoNCi5wYW5lbC1kZWZhdWx0IHsNCiAgICBib3JkZXItY29sb3I6ICNlZWUNCn0NCg0KLnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWhlYWRpbmcgew0KICAgIGNvbG9yOiAjMzMzOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7DQogICAgYm9yZGVyLWNvbG9yOiAjZWVlDQp9DQoNCi5wYW5lbC1kZWZhdWx0Pi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogI2VlZQ0KfQ0KDQoucGFuZWwtZGVmYXVsdD4ucGFuZWwtaGVhZGluZyAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjZjVmNWY1Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzMNCn0NCg0KLnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNlZWUNCn0NCg0KLnBhbmVsLXByaW1hcnkgew0KICAgIGJvcmRlci1jb2xvcjogIzJmNWZlZg0KfQ0KDQoucGFuZWwtcHJpbWFyeT4ucGFuZWwtaGVhZGluZyB7DQogICAgY29sb3I6ICNmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzJmNWZlZjsNCiAgICBib3JkZXItY29sb3I6ICMyZjVmZWYNCn0NCg0KLnBhbmVsLXByaW1hcnk+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5IHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjMmY1ZmVmDQp9DQoNCi5wYW5lbC1wcmltYXJ5Pi5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7DQogICAgY29sb3I6ICMyZjVmZWY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZg0KfQ0KDQoucGFuZWwtcHJpbWFyeT4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzJmNWZlZg0KfQ0KDQoucGFuZWwtc3VjY2VzcyB7DQogICAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2DQp9DQoNCi5wYW5lbC1zdWNjZXNzPi5wYW5lbC1oZWFkaW5nIHsNCiAgICBjb2xvcjogIzAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZlOWM2Ow0KICAgIGJvcmRlci1jb2xvcjogI2Q2ZTljNg0KfQ0KDQoucGFuZWwtc3VjY2Vzcz4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci10b3AtY29sb3I6ICNkNmU5YzYNCn0NCg0KLnBhbmVsLXN1Y2Nlc3M+LnBhbmVsLWhlYWRpbmcgLmJhZGdlIHsNCiAgICBjb2xvcjogI2Q2ZTljNjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwDQp9DQoNCi5wYW5lbC1zdWNjZXNzPi5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5IHsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZDZlOWM2DQp9DQoNCi5wYW5lbC1pbmZvIHsNCiAgICBib3JkZXItY29sb3I6ICNiY2U4ZjENCn0NCg0KLnBhbmVsLWluZm8+LnBhbmVsLWhlYWRpbmcgew0KICAgIGNvbG9yOiAjMDAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNiY2U4ZjE7DQogICAgYm9yZGVyLWNvbG9yOiAjYmNlOGYxDQp9DQoNCi5wYW5lbC1pbmZvPi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogI2JjZThmMQ0KfQ0KDQoucGFuZWwtaW5mbz4ucGFuZWwtaGVhZGluZyAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjYmNlOGYxOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDANCn0NCg0KLnBhbmVsLWluZm8+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNiY2U4ZjENCn0NCg0KLnBhbmVsLXdhcm5pbmcgew0KICAgIGJvcmRlci1jb2xvcjogI2ZhZWJjYw0KfQ0KDQoucGFuZWwtd2FybmluZz4ucGFuZWwtaGVhZGluZyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZWJjYzsNCiAgICBib3JkZXItY29sb3I6ICNmYWViY2MNCn0NCg0KLnBhbmVsLXdhcm5pbmc+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5IHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjZmFlYmNjDQp9DQoNCi5wYW5lbC13YXJuaW5nPi5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7DQogICAgY29sb3I6ICNmYWViY2M7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMA0KfQ0KDQoucGFuZWwtd2FybmluZz4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZhZWJjYw0KfQ0KDQoucGFuZWwtZGFuZ2VyIHsNCiAgICBib3JkZXItY29sb3I6ICNlYmNjZDENCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtaGVhZGluZyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NkMTsNCiAgICBib3JkZXItY29sb3I6ICNlYmNjZDENCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHkgew0KICAgIGJvcmRlci10b3AtY29sb3I6ICNlYmNjZDENCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtaGVhZGluZyAuYmFkZ2Ugew0KICAgIGNvbG9yOiAjZWJjY2QxOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDANCn0NCg0KLnBhbmVsLWRhbmdlcj4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keSB7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ViY2NkMQ0KfQ0KDQouZW1iZWQtcmVzcG9uc2l2ZSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGhlaWdodDogMDsNCiAgICBwYWRkaW5nOiAwOw0KICAgIG92ZXJmbG93OiBoaWRkZW4NCn0NCg0KLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSwNCi5lbWJlZC1yZXNwb25zaXZlIGlmcmFtZSwNCi5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLA0KLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LA0KLmVtYmVkLXJlc3BvbnNpdmUgdmlkZW8gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogMDsNCiAgICBib3R0b206IDA7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJvcmRlcjogMA0KfQ0KDQouZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OSB7DQogICAgcGFkZGluZy1ib3R0b206IDU2LjI1JQ0KfQ0KDQouZW1iZWQtcmVzcG9uc2l2ZS00YnkzIHsNCiAgICBwYWRkaW5nLWJvdHRvbTogNzUlDQp9DQoNCi53ZWxsIHsNCiAgICBtaW4taGVpZ2h0OiAyMHB4Ow0KICAgIHBhZGRpbmc6IDE5cHg7DQogICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNlM2UzZTM7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC4wNSk7DQogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgLjA1KQ0KfQ0KDQoud2VsbCBibG9ja3F1b3RlIHsNCiAgICBib3JkZXItY29sb3I6ICNkZGQ7DQogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4xNSkNCn0NCg0KLndlbGwtbGcgew0KICAgIHBhZGRpbmc6IDI0cHg7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoud2VsbC1zbSB7DQogICAgcGFkZGluZzogOXB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDANCn0NCg0KLmNsb3NlIHsNCiAgICBmbG9hdDogcmlnaHQ7DQogICAgZm9udC1zaXplOiAyMi41cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgbGluZS1oZWlnaHQ6IDE7DQogICAgY29sb3I6ICMwMDA7DQogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjsNCiAgICBvcGFjaXR5OiAuMjsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MjApDQp9DQoNCi5jbG9zZTpob3ZlciwNCi5jbG9zZTpmb2N1cyB7DQogICAgY29sb3I6ICMwMDA7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBvcGFjaXR5OiAuNTsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApDQp9DQoNCmJ1dHRvbi5jbG9zZSB7DQogICAgcGFkZGluZzogMDsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyOiAwOw0KICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZQ0KfQ0KDQoubW9kYWwtb3BlbiB7DQogICAgb3ZlcmZsb3c6IGhpZGRlbg0KfQ0KDQoubW9kYWwgew0KICAgIGRpc3BsYXk6IG5vbmU7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgdG9wOiAwOw0KICAgIHJpZ2h0OiAwOw0KICAgIGJvdHRvbTogMDsNCiAgICBsZWZ0OiAwOw0KICAgIHotaW5kZXg6IDEwNTA7DQogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOw0KICAgIG91dGxpbmU6IDANCn0NCg0KLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7DQogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTsNCiAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7DQogICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7DQogICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7DQogICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7DQogICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIC4zcyBlYXNlLW91dDsNCiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0DQp9DQoNCi5tb2RhbC5pbiAubW9kYWwtZGlhbG9nIHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOw0KICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsNCiAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKQ0KfQ0KDQoubW9kYWwtb3BlbiAubW9kYWwgew0KICAgIG92ZXJmbG93LXg6IGhpZGRlbjsNCiAgICBvdmVyZmxvdy15OiBhdXRvDQp9DQoNCi5tb2RhbC1kaWFsb2cgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB3aWR0aDogYXV0bzsNCiAgICBtYXJnaW46IDEwcHgNCn0NCg0KLm1vZGFsLWNvbnRlbnQgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7DQogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAuMik7DQogICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgM3B4IDlweCByZ2JhKDAsIDAsIDAsIC41KTsNCiAgICBib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAuNSk7DQogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsNCiAgICBvdXRsaW5lOiAwDQp9DQoNCi5tb2RhbC1iYWNrZHJvcCB7DQogICAgcG9zaXRpb246IGZpeGVkOw0KICAgIHRvcDogMDsNCiAgICByaWdodDogMDsNCiAgICBib3R0b206IDA7DQogICAgbGVmdDogMDsNCiAgICB6LWluZGV4OiAxMDQwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDANCn0NCg0KLm1vZGFsLWJhY2tkcm9wLmZhZGUgew0KICAgIG9wYWNpdHk6IDA7DQogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApDQp9DQoNCi5tb2RhbC1iYWNrZHJvcC5pbiB7DQogICAgb3BhY2l0eTogLjU7DQogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKQ0KfQ0KDQoubW9kYWwtaGVhZGVyIHsNCiAgICBwYWRkaW5nOiAxNXB4Ow0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1DQp9DQoNCi5tb2RhbC1oZWFkZXI6YmVmb3JlLA0KLm1vZGFsLWhlYWRlcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5tb2RhbC1oZWFkZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5tb2RhbC1oZWFkZXIgLmNsb3NlIHsNCiAgICBtYXJnaW4tdG9wOiAtMnB4DQp9DQoNCi5tb2RhbC10aXRsZSB7DQogICAgbWFyZ2luOiAwOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3DQp9DQoNCi5tb2RhbC1ib2R5IHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgcGFkZGluZzogMTVweA0KfQ0KDQoubW9kYWwtZm9vdGVyIHsNCiAgICBwYWRkaW5nOiAxNXB4Ow0KICAgIHRleHQtYWxpZ246IHJpZ2h0Ow0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1DQp9DQoNCi5tb2RhbC1mb290ZXI6YmVmb3JlLA0KLm1vZGFsLWZvb3RlcjphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGRpc3BsYXk6IHRhYmxlDQp9DQoNCi5tb2RhbC1mb290ZXI6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5tb2RhbC1mb290ZXIgLmJ0bisuYnRuIHsNCiAgICBtYXJnaW4tbGVmdDogNXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDANCn0NCg0KLm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4rLmJ0biB7DQogICAgbWFyZ2luLWxlZnQ6IC0xcHgNCn0NCg0KLm1vZGFsLWZvb3RlciAuYnRuLWJsb2NrKy5idG4tYmxvY2sgew0KICAgIG1hcmdpbi1sZWZ0OiAwDQp9DQoNCi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogLTk5OTlweDsNCiAgICB3aWR0aDogNTBweDsNCiAgICBoZWlnaHQ6IDUwcHg7DQogICAgb3ZlcmZsb3c6IHNjcm9sbA0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSB7DQogICAgLm1vZGFsLWRpYWxvZyB7DQogICAgICAgIHdpZHRoOiA2MDBweDsNCiAgICAgICAgbWFyZ2luOiAzMHB4IGF1dG8NCiAgICB9DQoNCiAgICAubW9kYWwtY29udGVudCB7DQogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIC41KTsNCiAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIC41KQ0KICAgIH0NCg0KICAgIC5tb2RhbC1zbSB7DQogICAgICAgIHdpZHRoOiAzMDBweA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo5OTJweCkgew0KICAgIC5tb2RhbC1sZyB7DQogICAgICAgIHdpZHRoOiA5MDBweA0KICAgIH0NCn0NCg0KLnRvb2x0aXAgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB6LWluZGV4OiAxMDcwOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGZvbnQtZmFtaWx5OiAiU2Vnb2UgVUkiLCAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICBmb250LXdlaWdodDogbm9ybWFsOw0KICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7DQogICAgbGluZS1icmVhazogYXV0bzsNCiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgIHRleHQtYWxpZ246IHN0YXJ0Ow0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICB0ZXh0LXNoYWRvdzogbm9uZTsNCiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsNCiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOw0KICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsNCiAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsNCiAgICB3b3JkLXdyYXA6IG5vcm1hbDsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgb3BhY2l0eTogMDsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCkNCn0NCg0KLnRvb2x0aXAuaW4gew0KICAgIG9wYWNpdHk6IC45Ow0KICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCkNCn0NCg0KLnRvb2x0aXAudG9wIHsNCiAgICBtYXJnaW4tdG9wOiAtM3B4Ow0KICAgIHBhZGRpbmc6IDVweCAwDQp9DQoNCi50b29sdGlwLnJpZ2h0IHsNCiAgICBtYXJnaW4tbGVmdDogM3B4Ow0KICAgIHBhZGRpbmc6IDAgNXB4DQp9DQoNCi50b29sdGlwLmJvdHRvbSB7DQogICAgbWFyZ2luLXRvcDogM3B4Ow0KICAgIHBhZGRpbmc6IDVweCAwDQp9DQoNCi50b29sdGlwLmxlZnQgew0KICAgIG1hcmdpbi1sZWZ0OiAtM3B4Ow0KICAgIHBhZGRpbmc6IDAgNXB4DQp9DQoNCi50b29sdGlwLWlubmVyIHsNCiAgICBtYXgtd2lkdGg6IDIwMHB4Ow0KICAgIHBhZGRpbmc6IDNweCA4cHg7DQogICAgY29sb3I6ICNmZmY7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogICAgYm9yZGVyLXJhZGl1czogMA0KfQ0KDQoudG9vbHRpcC1hcnJvdyB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHdpZHRoOiAwOw0KICAgIGhlaWdodDogMDsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1zdHlsZTogc29saWQNCn0NCg0KLnRvb2x0aXAudG9wIC50b29sdGlwLWFycm93IHsNCiAgICBib3R0b206IDA7DQogICAgbGVmdDogNTAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtNXB4Ow0KICAgIGJvcmRlci13aWR0aDogNXB4IDVweCAwOw0KICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDANCn0NCg0KLnRvb2x0aXAudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cgew0KICAgIGJvdHRvbTogMDsNCiAgICByaWdodDogNXB4Ow0KICAgIG1hcmdpbi1ib3R0b206IC01cHg7DQogICAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3cgew0KICAgIGJvdHRvbTogMDsNCiAgICBsZWZ0OiA1cHg7DQogICAgbWFyZ2luLWJvdHRvbTogLTVweDsNCiAgICBib3JkZXItd2lkdGg6IDVweCA1cHggMDsNCiAgICBib3JkZXItdG9wLWNvbG9yOiAjMDAwDQp9DQoNCi50b29sdGlwLnJpZ2h0IC50b29sdGlwLWFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICBsZWZ0OiAwOw0KICAgIG1hcmdpbi10b3A6IC01cHg7DQogICAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwOw0KICAgIGJvcmRlci1yaWdodC1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICByaWdodDogMDsNCiAgICBtYXJnaW4tdG9wOiAtNXB4Ow0KICAgIGJvcmRlci13aWR0aDogNXB4IDAgNXB4IDVweDsNCiAgICBib3JkZXItbGVmdC1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3cgew0KICAgIHRvcDogMDsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC01cHg7DQogICAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7DQogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMA0KfQ0KDQoudG9vbHRpcC5ib3R0b20tbGVmdCAudG9vbHRpcC1hcnJvdyB7DQogICAgdG9wOiAwOw0KICAgIHJpZ2h0OiA1cHg7DQogICAgbWFyZ2luLXRvcDogLTVweDsNCiAgICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwDQp9DQoNCi50b29sdGlwLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvdyB7DQogICAgdG9wOiAwOw0KICAgIGxlZnQ6IDVweDsNCiAgICBtYXJnaW4tdG9wOiAtNXB4Ow0KICAgIGJvcmRlci13aWR0aDogMCA1cHggNXB4Ow0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDANCn0NCg0KLnBvcG92ZXIgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogMDsNCiAgICB6LWluZGV4OiAxMDYwOw0KICAgIGRpc3BsYXk6IG5vbmU7DQogICAgbWF4LXdpZHRoOiAyNzZweDsNCiAgICBwYWRkaW5nOiAxcHg7DQogICAgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zdHlsZTogbm9ybWFsOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsNCiAgICBsaW5lLWJyZWFrOiBhdXRvOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgdGV4dC1hbGlnbjogc3RhcnQ7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIHRleHQtc2hhZG93OiBub25lOw0KICAgIHRleHQtdHJhbnNmb3JtOiBub25lOw0KICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7DQogICAgd29yZC1icmVhazogbm9ybWFsOw0KICAgIHdvcmQtc3BhY2luZzogbm9ybWFsOw0KICAgIHdvcmQtd3JhcDogbm9ybWFsOw0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIC4yKTsNCiAgICBib3JkZXItcmFkaXVzOiAwOw0KICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIC4yKTsNCiAgICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgLjIpDQp9DQoNCi5wb3BvdmVyLnRvcCB7DQogICAgbWFyZ2luLXRvcDogLTEwcHgNCn0NCg0KLnBvcG92ZXIucmlnaHQgew0KICAgIG1hcmdpbi1sZWZ0OiAxMHB4DQp9DQoNCi5wb3BvdmVyLmJvdHRvbSB7DQogICAgbWFyZ2luLXRvcDogMTBweA0KfQ0KDQoucG9wb3Zlci5sZWZ0IHsNCiAgICBtYXJnaW4tbGVmdDogLTEwcHgNCn0NCg0KLnBvcG92ZXItdGl0bGUgew0KICAgIG1hcmdpbjogMDsNCiAgICBwYWRkaW5nOiA4cHggMTRweDsNCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsNCiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWJlYjsNCiAgICBib3JkZXItcmFkaXVzOiAtMXB4IC0xcHggMCAwDQp9DQoNCi5wb3BvdmVyLWNvbnRlbnQgew0KICAgIHBhZGRpbmc6IDlweCAxNHB4DQp9DQoNCi5wb3BvdmVyPi5hcnJvdywNCi5wb3BvdmVyPi5hcnJvdzphZnRlciB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHdpZHRoOiAwOw0KICAgIGhlaWdodDogMDsNCiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1zdHlsZTogc29saWQNCn0NCg0KLnBvcG92ZXI+LmFycm93IHsNCiAgICBib3JkZXItd2lkdGg6IDExcHgNCn0NCg0KLnBvcG92ZXI+LmFycm93OmFmdGVyIHsNCiAgICBib3JkZXItd2lkdGg6IDEwcHg7DQogICAgY29udGVudDogIiINCn0NCg0KLnBvcG92ZXIudG9wPi5hcnJvdyB7DQogICAgbGVmdDogNTAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtMTFweDsNCiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwOw0KICAgIGJvcmRlci10b3AtY29sb3I6ICM5OTk7DQogICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMjUpOw0KICAgIGJvdHRvbTogLTExcHgNCn0NCg0KLnBvcG92ZXIudG9wPi5hcnJvdzphZnRlciB7DQogICAgY29udGVudDogIiAiOw0KICAgIGJvdHRvbTogMXB4Ow0KICAgIG1hcmdpbi1sZWZ0OiAtMTBweDsNCiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwOw0KICAgIGJvcmRlci10b3AtY29sb3I6ICNmZmYNCn0NCg0KLnBvcG92ZXIucmlnaHQ+LmFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICBsZWZ0OiAtMTFweDsNCiAgICBtYXJnaW4tdG9wOiAtMTFweDsNCiAgICBib3JkZXItbGVmdC13aWR0aDogMDsNCiAgICBib3JkZXItcmlnaHQtY29sb3I6ICM5OTk7DQogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4yNSkNCn0NCg0KLnBvcG92ZXIucmlnaHQ+LmFycm93OmFmdGVyIHsNCiAgICBjb250ZW50OiAiICI7DQogICAgbGVmdDogMXB4Ow0KICAgIGJvdHRvbTogLTEwcHg7DQogICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7DQogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmDQp9DQoNCi5wb3BvdmVyLmJvdHRvbT4uYXJyb3cgew0KICAgIGxlZnQ6IDUwJTsNCiAgICBtYXJnaW4tbGVmdDogLTExcHg7DQogICAgYm9yZGVyLXRvcC13aWR0aDogMDsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjOTk5Ow0KICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgLjI1KTsNCiAgICB0b3A6IC0xMXB4DQp9DQoNCi5wb3BvdmVyLmJvdHRvbT4uYXJyb3c6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICB0b3A6IDFweDsNCiAgICBtYXJnaW4tbGVmdDogLTEwcHg7DQogICAgYm9yZGVyLXRvcC13aWR0aDogMDsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmDQp9DQoNCi5wb3BvdmVyLmxlZnQ+LmFycm93IHsNCiAgICB0b3A6IDUwJTsNCiAgICByaWdodDogLTExcHg7DQogICAgbWFyZ2luLXRvcDogLTExcHg7DQogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwOw0KICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTk5Ow0KICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4yNSkNCn0NCg0KLnBvcG92ZXIubGVmdD4uYXJyb3c6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICByaWdodDogMXB4Ow0KICAgIGJvcmRlci1yaWdodC13aWR0aDogMDsNCiAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZjsNCiAgICBib3R0b206IC0xMHB4DQp9DQoNCi5jYXJvdXNlbCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlDQp9DQoNCi5jYXJvdXNlbC1pbm5lciB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgd2lkdGg6IDEwMCUNCn0NCg0KLmNhcm91c2VsLWlubmVyPi5pdGVtIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAtd2Via2l0LXRyYW5zaXRpb246IC42cyBlYXNlLWluLW91dCBsZWZ0Ow0KICAgIC1vLXRyYW5zaXRpb246IC42cyBlYXNlLWluLW91dCBsZWZ0Ow0KICAgIHRyYW5zaXRpb246IC42cyBlYXNlLWluLW91dCBsZWZ0DQp9DQoNCi5jYXJvdXNlbC1pbm5lcj4uaXRlbT5pbWcsDQouY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+YT5pbWcgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIG1heC13aWR0aDogMTAwJTsNCiAgICBoZWlnaHQ6IGF1dG87DQogICAgbGluZS1oZWlnaHQ6IDENCn0NCg0KQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksDQooLXdlYmtpdC10cmFuc2Zvcm0tM2QpIHsNCiAgICAuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0gew0KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC42cyBlYXNlLWluLW91dDsNCiAgICAgICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7DQogICAgICAgIC1vLXRyYW5zaXRpb246IC1vLXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7DQogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7DQogICAgICAgIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOw0KICAgICAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsNCiAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOw0KICAgICAgICAtd2Via2l0LXBlcnNwZWN0aXZlOiAxMDAwcHg7DQogICAgICAgIC1tb3otcGVyc3BlY3RpdmU6IDEwMDBweDsNCiAgICAgICAgcGVyc3BlY3RpdmU6IDEwMDBweA0KICAgIH0NCg0KICAgIC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5uZXh0LA0KICAgIC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5hY3RpdmUucmlnaHQgew0KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7DQogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7DQogICAgICAgIGxlZnQ6IDANCiAgICB9DQoNCiAgICAuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0ucHJldiwNCiAgICAuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0uYWN0aXZlLmxlZnQgew0KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApOw0KICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTsNCiAgICAgICAgbGVmdDogMA0KICAgIH0NCg0KICAgIC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5uZXh0LmxlZnQsDQogICAgLmNhcm91c2VsLWlubmVyPi5pdGVtLnByZXYucmlnaHQsDQogICAgLmNhcm91c2VsLWlubmVyPi5pdGVtLmFjdGl2ZSB7DQogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsNCiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsNCiAgICAgICAgbGVmdDogMA0KICAgIH0NCn0NCg0KLmNhcm91c2VsLWlubmVyPi5hY3RpdmUsDQouY2Fyb3VzZWwtaW5uZXI+Lm5leHQsDQouY2Fyb3VzZWwtaW5uZXI+LnByZXYgew0KICAgIGRpc3BsYXk6IGJsb2NrDQp9DQoNCi5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlIHsNCiAgICBsZWZ0OiAwDQp9DQoNCi5jYXJvdXNlbC1pbm5lcj4ubmV4dCwNCi5jYXJvdXNlbC1pbm5lcj4ucHJldiB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMDsNCiAgICB3aWR0aDogMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+Lm5leHQgew0KICAgIGxlZnQ6IDEwMCUNCn0NCg0KLmNhcm91c2VsLWlubmVyPi5wcmV2IHsNCiAgICBsZWZ0OiAtMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+Lm5leHQubGVmdCwNCi5jYXJvdXNlbC1pbm5lcj4ucHJldi5yaWdodCB7DQogICAgbGVmdDogMA0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5sZWZ0IHsNCiAgICBsZWZ0OiAtMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5yaWdodCB7DQogICAgbGVmdDogMTAwJQ0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMDsNCiAgICBsZWZ0OiAwOw0KICAgIGJvdHRvbTogMDsNCiAgICB3aWR0aDogMTUlOw0KICAgIG9wYWNpdHk6IC41Ow0KICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7DQogICAgZm9udC1zaXplOiAyMHB4Ow0KICAgIGNvbG9yOiAjZmZmOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjYpOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50DQp9DQoNCi5jYXJvdXNlbC1jb250cm9sLmxlZnQgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgLjUpIDAlLCByZ2JhKDAsIDAsIDAsIC4wMDAxKSAxMDAlKTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDEwMCUpOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDEwMCUpOw0KICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsNCiAgICBmaWx0ZXI6IHByb2dpZDogRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzgwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyMwMDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKQ0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbC5yaWdodCB7DQogICAgbGVmdDogYXV0bzsNCiAgICByaWdodDogMDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIC4wMDAxKSAwJSwgcmdiYSgwLCAwLCAwLCAuNSkgMTAwJSk7DQogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIC41KSAxMDAlKTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIC41KSAxMDAlKTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7DQogICAgZmlsdGVyOiBwcm9naWQ6IERYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyMwMDAwMDAwMCcsIGVuZENvbG9yc3RyPScjODAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSkNCn0NCg0KLmNhcm91c2VsLWNvbnRyb2w6aG92ZXIsDQouY2Fyb3VzZWwtY29udHJvbDpmb2N1cyB7DQogICAgb3V0bGluZTogMDsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgb3BhY2l0eTogLjk7DQogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKQ0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LA0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCwNCi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LA0KLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiA1MCU7DQogICAgbWFyZ2luLXRvcDogLTEwcHg7DQogICAgei1pbmRleDogNTsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sNCn0NCg0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldiwNCi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0IHsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC0xMHB4DQp9DQoNCi5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQsDQouY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQgew0KICAgIHJpZ2h0OiA1MCU7DQogICAgbWFyZ2luLXJpZ2h0OiAtMTBweA0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LA0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7DQogICAgd2lkdGg6IDIwcHg7DQogICAgaGVpZ2h0OiAyMHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIGZvbnQtZmFtaWx5OiBzZXJpZg0KfQ0KDQouY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2OmJlZm9yZSB7DQogICAgY29udGVudDogJ+KAuScNCn0NCg0KLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dDpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICfigLonDQp9DQoNCi5jYXJvdXNlbC1pbmRpY2F0b3JzIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgYm90dG9tOiAxMHB4Ow0KICAgIGxlZnQ6IDUwJTsNCiAgICB6LWluZGV4OiAxNTsNCiAgICB3aWR0aDogNjAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtMzAlOw0KICAgIHBhZGRpbmctbGVmdDogMDsNCiAgICBsaXN0LXN0eWxlOiBub25lOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcg0KfQ0KDQouY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaSB7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIHdpZHRoOiAxMHB4Ow0KICAgIGhlaWdodDogMTBweDsNCiAgICBtYXJnaW46IDFweDsNCiAgICB0ZXh0LWluZGVudDogLTk5OXB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZmY7DQogICAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMCBcOTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudA0KfQ0KDQouY2Fyb3VzZWwtaW5kaWNhdG9ycyAuYWN0aXZlIHsNCiAgICBtYXJnaW46IDA7DQogICAgd2lkdGg6IDEycHg7DQogICAgaGVpZ2h0OiAxMnB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYNCn0NCg0KLmNhcm91c2VsLWNhcHRpb24gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBsZWZ0OiAxNSU7DQogICAgcmlnaHQ6IDE1JTsNCiAgICBib3R0b206IDIwcHg7DQogICAgei1pbmRleDogMTA7DQogICAgcGFkZGluZy10b3A6IDIwcHg7DQogICAgcGFkZGluZy1ib3R0b206IDIwcHg7DQogICAgY29sb3I6ICNmZmY7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAuNikNCn0NCg0KLmNhcm91c2VsLWNhcHRpb24gLmJ0biB7DQogICAgdGV4dC1zaGFkb3c6IG5vbmUNCn0NCg0KQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCkgew0KDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LA0KICAgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7DQogICAgICAgIHdpZHRoOiAzMHB4Ow0KICAgICAgICBoZWlnaHQ6IDMwcHg7DQogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4Ow0KICAgICAgICBmb250LXNpemU6IDMwcHgNCiAgICB9DQoNCiAgICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCwNCiAgICAuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2IHsNCiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMHB4DQogICAgfQ0KDQogICAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LA0KICAgIC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQgew0KICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4DQogICAgfQ0KDQogICAgLmNhcm91c2VsLWNhcHRpb24gew0KICAgICAgICBsZWZ0OiAyMCU7DQogICAgICAgIHJpZ2h0OiAyMCU7DQogICAgICAgIHBhZGRpbmctYm90dG9tOiAzMHB4DQogICAgfQ0KDQogICAgLmNhcm91c2VsLWluZGljYXRvcnMgew0KICAgICAgICBib3R0b206IDIwcHgNCiAgICB9DQp9DQoNCi5jbGVhcmZpeDpiZWZvcmUsDQouY2xlYXJmaXg6YWZ0ZXIgew0KICAgIGNvbnRlbnQ6ICIgIjsNCiAgICBkaXNwbGF5OiB0YWJsZQ0KfQ0KDQouY2xlYXJmaXg6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoDQp9DQoNCi5jZW50ZXItYmxvY2sgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICAgIG1hcmdpbi1yaWdodDogYXV0bw0KfQ0KDQoucHVsbC1yaWdodCB7DQogICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQNCn0NCg0KLnB1bGwtbGVmdCB7DQogICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudA0KfQ0KDQouaGlkZSB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCi5zaG93IHsNCiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50DQp9DQoNCi5pbnZpc2libGUgew0KICAgIHZpc2liaWxpdHk6IGhpZGRlbg0KfQ0KDQoudGV4dC1oaWRlIHsNCiAgICBmb250OiAwLzAgYTsNCiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgdGV4dC1zaGFkb3c6IG5vbmU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgYm9yZGVyOiAwDQp9DQoNCi5oaWRkZW4gew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQouYWZmaXggew0KICAgIHBvc2l0aW9uOiBmaXhlZA0KfQ0KDQpALW1zLXZpZXdwb3J0IHsNCiAgICB3aWR0aDogZGV2aWNlLXdpZHRoOw0KfQ0KDQoudmlzaWJsZS14cyB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCi52aXNpYmxlLXNtIHsNCiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCn0NCg0KLnZpc2libGUtbWQgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQoudmlzaWJsZS1sZyB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCi52aXNpYmxlLXhzLWJsb2NrLA0KLnZpc2libGUteHMtaW5saW5lLA0KLnZpc2libGUteHMtaW5saW5lLWJsb2NrLA0KLnZpc2libGUtc20tYmxvY2ssDQoudmlzaWJsZS1zbS1pbmxpbmUsDQoudmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssDQoudmlzaWJsZS1tZC1ibG9jaywNCi52aXNpYmxlLW1kLWlubGluZSwNCi52aXNpYmxlLW1kLWlubGluZS1ibG9jaywNCi52aXNpYmxlLWxnLWJsb2NrLA0KLnZpc2libGUtbGctaW5saW5lLA0KLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHsNCiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCn0NCg0KQG1lZGlhKG1heC13aWR0aDo3NjdweCkgew0KICAgIC52aXNpYmxlLXhzIHsNCiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRhYmxlLnZpc2libGUteHMgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdHIudmlzaWJsZS14cyB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdGgudmlzaWJsZS14cywNCiAgICB0ZC52aXNpYmxlLXhzIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjc2N3B4KSB7DQogICAgLnZpc2libGUteHMtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjc2N3B4KSB7DQogICAgLnZpc2libGUteHMtaW5saW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6NzY3cHgpIHsNCiAgICAudmlzaWJsZS14cy1pbmxpbmUtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTkxcHgpIHsNCiAgICAudmlzaWJsZS1zbSB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICB0YWJsZS52aXNpYmxlLXNtIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRyLnZpc2libGUtc20gew0KICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRoLnZpc2libGUtc20sDQogICAgdGQudmlzaWJsZS1zbSB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTkxcHgpIHsNCiAgICAudmlzaWJsZS1zbS1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk5MXB4KSB7DQogICAgLnZpc2libGUtc20taW5saW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk5MXB4KSB7DQogICAgLnZpc2libGUtc20taW5saW5lLWJsb2NrIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC52aXNpYmxlLW1kIHsNCiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRhYmxlLnZpc2libGUtbWQgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdHIudmlzaWJsZS1tZCB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdGgudmlzaWJsZS1tZCwNCiAgICB0ZC52aXNpYmxlLW1kIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSBhbmQgKG1heC13aWR0aDoxMTk5cHgpIHsNCiAgICAudmlzaWJsZS1tZC1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC52aXNpYmxlLW1kLWlubGluZSB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjk5MnB4KSBhbmQgKG1heC13aWR0aDoxMTk5cHgpIHsNCiAgICAudmlzaWJsZS1tZC1pbmxpbmUtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAudmlzaWJsZS1sZyB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQoNCiAgICB0YWJsZS52aXNpYmxlLWxnIHsNCiAgICAgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRyLnZpc2libGUtbGcgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRoLnZpc2libGUtbGcsDQogICAgdGQudmlzaWJsZS1sZyB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KQG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpIHsNCiAgICAudmlzaWJsZS1sZy1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLnZpc2libGUtbGctaW5saW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6NzY3cHgpIHsNCiAgICAuaGlkZGVuLXhzIHsNCiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5OTFweCkgew0KICAgIC5oaWRkZW4tc20gew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCkgew0KICAgIC5oaWRkZW4tbWQgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQp9DQoNCkBtZWRpYShtaW4td2lkdGg6MTIwMHB4KSB7DQogICAgLmhpZGRlbi1sZyB7DQogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KICAgIH0NCn0NCg0KLnZpc2libGUtcHJpbnQgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC52aXNpYmxlLXByaW50IHsNCiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudA0KICAgIH0NCg0KICAgIHRhYmxlLnZpc2libGUtcHJpbnQgew0KICAgICAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdHIudmlzaWJsZS1wcmludCB7DQogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50DQogICAgfQ0KDQogICAgdGgudmlzaWJsZS1wcmludCwNCiAgICB0ZC52aXNpYmxlLXByaW50IHsNCiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQoudmlzaWJsZS1wcmludC1ibG9jayB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50DQp9DQoNCkBtZWRpYSBwcmludCB7DQogICAgLnZpc2libGUtcHJpbnQtYmxvY2sgew0KICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQoudmlzaWJsZS1wcmludC1pbmxpbmUgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC52aXNpYmxlLXByaW50LWlubGluZSB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQoudmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudA0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50DQogICAgfQ0KfQ0KDQpAbWVkaWEgcHJpbnQgew0KICAgIC5oaWRkZW4tcHJpbnQgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQNCiAgICB9DQp9", + "name": "bootstrap.min.css", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "5faaf2d7-8da6-4a49-9926-8dec626f3fff", + "content": "{\"pageid\":\"33b351a2-b34c-4a43-8847-2e197c21d4d3\"}", + "name": "Access Denied", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "60075fc1-3ba7-4a1f-8dda-51bef1c190f2", + "content": "{\"source\":\"
\\r\\n {% editable page 'adx_copy' type: 'html', liquid: true %}\\r\\n
\\r\\n\"}", + "name": "Page Copy", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "68c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"False\"}", + "name": "Profile/ForceSignUp", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6901812e-5234-ed11-9db1-0022480b428a", + "content": "{\"value\":\"false\"}", + "name": "Profile/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6942c943-cc5d-44dc-883a-13ff114978e4", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"230c16df-fb1b-4828-8be1-b0a87016a6a3\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"profile\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false,\"title\":\"Profile\"}", + "name": "Profile", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "69aab0b5-766e-45fd-b01e-d3e36f00b221", + "content": "{\"display_name\":\"Header/Search/ToolTip\",\"value\":\"Search\\r\\n\"}", + "name": "Header/Search/ToolTip", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "69c74723-3634-ed11-9db1-0022480b4066", + "name": "Authentication/OpenAuth/LinkedIn/ConsumerSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6cc74723-3634-ed11-9db1-0022480b4066", + "name": "Authentication/OpenAuth/LinkedIn/ConsumerKey", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6dc74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Facebook/AppId", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6ec74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Determines if faceted search is used for this portal.\",\"value\":\"True\"}", + "name": "Search/FacetedView", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "6fc74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A true or false value. If set to true, the local account will be marked as deprecated. The portal user will be required to migrate to a non-deprecated account.\",\"value\":\"False\"}", + "name": "Authentication/Registration/LocalLoginDeprecated", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "70c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The default number of unauthenticated login attempts from an IP address before the IP address is blocked for Authentication/LoginThrottling/IpAddressTimeoutTimeSpan if the attempts occur within Authentication/LoginThrottling/MaxAttemptsTimeLimitTimeSpan amount of time. Default: 1000\",\"value\":\"1000\"}", + "name": "Authentication/LoginThrottling/MaxInvaildAttemptsFromIPAddress", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "71c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"True\"}", + "name": "Profile/ShowMarketingOptionsPanel", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "72c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Microsoft/ClientId", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "73c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Microsoft/ClientSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7539188e-00a7-4c37-99ea-6ee2751b5057", + "content": "{\"value\":\"sharepoint.com;microsoftonline.com\"}", + "name": "OnlineDomains", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "75c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Facebook/AppSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7683ceb1-f4cb-4eaa-b886-c61c493f0033", + "content": "{\"source\":\"{% extends 'Layout 2 Column Wide Left' %}\\r\\n\\r\\n{% block title %}\\r\\n{% assign rt = snippets['Search/ResultsTitle'] %}\\r\\n{% if rt %}\\r\\n {% assign title = rt | liquid %}\\r\\n{% else %}\\r\\n {% assign title = rt %}\\r\\n{% endif %}\\r\\n{% assign title = title | truncate: 115 %}\\r\\n{% include 'Page Header', title: title %}\\r\\n{% endblock %}\\r\\n\\r\\n{% block main %}\\r\\n{% assign page_size = 10 %}\\r\\n{% assign current_page = request.params.page | default: 1 %}\\r\\n{% searchindex query: request.params.q, page: request.params.page, page_size: page_size %}\\r\\n{% if searchindex.results.size > 0 %}\\r\\n

\\r\\n {% assign rc = snippets['Search/ResultsCount'] -%}\\r\\n {%- if rc %}{{ rc | liquid }}{% else %}{{ current_page }} - {{ page_size }} of {{ searchindex.approximate_total_hits }} Results test{% endif %}\\r\\n

\\r\\n
    \\r\\n {% for result in searchindex.results %}\\r\\n
  • \\r\\n

    \\r\\n {{ result.title | escape }}\\r\\n

    \\r\\n

    {{ result.fragment }}

    \\r\\n
  • \\r\\n {% endfor %}\\r\\n
\\r\\n {% include 'Pagination', current_page: searchindex.page, page_size: page_size, total: searchindex.approximate_total_hits %}\\r\\n{% else %}\\r\\n {{ snippets['Search/NoResults'] }}\\r\\n{% endif %}\\r\\n{% endsearchindex %}\\r\\n{% endblock %}\\r\\n\"}", + "name": "Search Results", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "77c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/OpenRegistrationEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "78bce106-2dd7-46ee-b289-e002c8d2f265", + "content": "{\"value\":\"false\"}", + "name": "Header/ShowAllProfileNavigationLinks", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "78c74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The amount of time the IP address will have to wait if Authentication/LoginThrottling/MaxInvaildAttemptsFromIPAddress occur within Authentication/LoginThrottling/MaxAttemptsTimeLimitTimeSpan amount of time. Default: 00:10:00 (10 mins)\",\"value\":\"00:10:00\"}", + "name": "Authentication/LoginThrottling/IpAddressTimeoutTimeSpan", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "79c7e3fd-0ba3-ed11-83ff-00224828d88f", + "content": "{\"display_name\":\"Logo URL\",\"value\":\"/Logo-sm-64.png\\r\\n\"}", + "name": "Logo URL", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "7a0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"Portal Search\"}", + "name": "Search/IndexQueryName", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7a31e640-5401-43c9-a5c1-ab3158ed81f2", + "content": "{\"source\":\"
\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\"}", + "name": "Footer", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7ac74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Denies use of the portal to minors without parental consent. By default, it is set to false.\",\"value\":\"false\"}", + "name": "Authentication/Registration/DenyMinorsWithoutParentalConsent", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7ac7e3fd-0ba3-ed11-83ff-00224828d88f", + "content": "{\"display_name\":\"Logo alt text\",\"value\":\"Contoso Limited\\r\\n\"}", + "name": "Logo alt text", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "7bc74723-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Used to group a set of entities under an entry in the record type facet view.\",\"value\":\"Downloads:annotation,adx_webfile\"}", + "name": "Search/RecordTypeFacetsEntities", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7bc7e3fd-0ba3-ed11-83ff-00224828d88f", + "content": "{\"display_name\":\"Site name\",\"value\":\"Company name\\r\\n\"}", + "name": "Site name", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "7c0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A collection of search logical name filter options. Defining a value here will add dropdown filter options to site-wide search.\\n\\nThis value should be in the form of name/value pairs, with name and value separated by a colon, and pairs separated by a semicolon. For example: \\\"Forums:adx_communityforum,adx_communityforumthread,adx_communityforumpost;Blogs:adx_blog,adx_blogpost,adx_blogpostcomment\\\".\"}", + "name": "search/filters", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7d0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/InvitationEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7e0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Setting controls whether attachments will be displayed on Knowledge articles\",\"value\":\"false\"}", + "name": "KnowledgeManagement/DisplayNotes", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "7f0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A date/time value in GMT format to represent the effective date of the current published terms and conditions. If the terms agreement is enabled, portal users that have not accepted the terms after this date will be asked to accept them the next time they sign in. If the date is not provided, and the terms agreement is enabled, the terms will be presented every time portal users sign in.\"}", + "name": "Authentication/Registration/TermsPublicationDate", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "800c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3}", + "name": "Authentication/Registration/LoginButtonAuthenticationType", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "807de936-e33a-4658-a7bc-2387e88eb1a6", + "content": "{\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"Logo-sm-64.png\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAArASURBVHgBzVtrTBzXFT53diF2GlvIqeRnkjV+QKN6IQrYSfjRhRrHaSXbTasoVXCDE7UCY8lUtfOjqm0oUVNhR4HUDm6qyrTGP6I6jUFKa4FliNS0TiHyApVSUgxrJVBAsuPYxEmA3cn97jJ4H/fOY9ld8kmwq5k7M3vPOfc7555zhlGKke+r8FCG5pvhXxmjB5jOPMT0LMJnJJge0HUW4J83WIh6NU33f8H//nv+ZIBSCEYpQP7WCt8M03ZpjHbGTdQ5/CHS33HTdLO/4w9+SjKSJgCPrzpraebUfv61PAmTVoFbCNXcnMpoDXQ13KAkYN4CmJt4iFXzu2VReoCl0qxNZTb65ymIeQnAW7p3P9d2TRonHgthEX3tJ/5ECSIhAeRur/BkBF2n+MU+J9etWn4v/1tGS+5ZTJ3/7KNkQSfqmnYF9yRCmI4F4ETrmHBx0SYqeTSPctavpm7/IJ0510k9vf+jFCAha3AkAO+2qle4uKvNxiz5xmLa8fgWMemCvA3iWGv7JTp5+m80On6dUg6mcyG8Vmt7uN2BeY9XndJDnOEVwMTLniymZ5708e93i2OjY9fp0MunU6VxJXRGDf3tJ35uZ6wtAXhLqy7zj3zV+QLvBqo7WCZM3sCZv3ZSE9f6rc8+p4UA54Xm/o4Te6zGWQrASvMvVP6QnvlBcdQxmDsmbwewnOIiL+VmrxECBEHi79ZkWHADVz6mkYlr1MP5Y2DoY3ICO0IwFYB3294jgvAkAJs31PyMctatiTp+6GgLtXVcIitgkrCcslnh4T44ZobR8WtiObW2v0c9fTaXlQUnKAUg2J5Yg+wcJv/HY/ujTB6ob3qTzrzVSYkC1pCzfg0VP+qlksfyaNWKZcqxEEQLf5Ytd8qoXOUdpAKAn8+ccV2WuTrV5J2YvV3Ai+wo3UI7tz2iHNPGPUyTtYe5MeUKPiSLE1yy0avWbuaTZytij0NDLa8eiJs83NzRk29SsoFJQcOYJJZHbsxyA7B0SjiHDFwZMRPCIk3X8ieGuuOsIE4Am0r3ljNi5bK7HNr/NNfKxugfyV3d4WOnU8r2uLchCCyNWK5Ycs/dwkrwW1REyU3ds3xDwafjV3qiCCpKADB9t85O8eFxpg+mf+7pbXE3rm86ywlpkNIBCMLgmMLZICsSsAQzIXBCf2Tl/UW/Hwtc+sI45I48nxnSnuWT98Reh3Vf+ZMn4u4H02/reI/sQpAcN1mExTnZ980dn5y8LVzdwOCILXYH32Bc3S92xxEl3DJcp0IIWSH3FCLZGuPAHAkK4gtqnTIB1B0oox0SInpi92Fb4S3cXcljXhEiG1GiCrc+u02d7/bZIbYwIR+tjhMC3OVTFb9VLcsb2nTGWmMbPbcEVq7dvEu29vGQuoO74+5iR/vQOHjjhcofkfdba+muzAyyAsbAShBWr+bPhjZV/BLmht44XgAnrL1vBZ1/533ZZYt0bWZ8fCjMBZpxlJvCEdnoyt3fkx0WZmgGaP3vLbVSy7ELXAuXm5O9RjkGVvL8wQax9iOB6BK/QQadaTuN70IAyOGp1r5sAghCzMxzR2n4h1uZux3A5eJeuKcK+C3Vta/Phc8GsD+RAXmMb2/d58N3IYAgucplA1Xah/mrUMzXuurBiQLmDXIzswQsFXikSIh8BP89MmgU8oU/SUgkTzaoIE9uQiqmhsXgh6YCEEJD7U8Fr6gATmqJCcXLYjZqc2BMLAMN7M8lELfVzVm3Oi7iA8zMHxYjuyZZwL2tBAxuilwKUKLiN+Xn84SuljHtlu7zC7wbpQ+AqUnHI26fB+HZBZ6hIjcAk286/XbUsZ3btkjHBu+a+o7GWEgqANVOrFth/mW7fJQulCjWtYEzb3VFeQWVwFiQHtJ0xfrPVRBOrLsBsPaLi6S3SQlgBWZcADS13LGCnHXyuTDGHuDVK+YhB5CFmNjDpxMgRNWkDLTxpInBBWK8RKFc+fkaaXqW6iGxiPWzBszWZKqg8lCRiPQI2H9IkKWp6niyySJOlyE3O70WANjxNjY2Vh5NdebW5G36OgP7BCvAZRuKVAlMKYCRiTQUMdKAi3yzZAalAORsL5fiQljLzUl7GSikysygoTNDdqKn70PpBTL3c3MBih//53t+OxidCI8blY8P8D0Bk9bXITkZEcrcj5WUU4Fum3WBgcGw25ZZNCE5opPcAoBWSYFDJoBOi3WWCtitNxr7FmkIz/SrGtPpquriNsm2V+bz8ZB0FkAv8pSZkyw0tC8dHyI/T5eTsvEIph07MWRjZTzQ1JLcoogZnFafuhV8prvosuZyhbrMLq6PKXiowlAIKh1WAO2b5SNkUJXPXCzUq/lRLmJqHsDaiU0yqDJF9SmoDkUCpHz05FnpuR18y6ty0woB+DH3cBwQpFYyAZIMkSSCOFzGBbK0VDKBe8uSMaJuwZXipAOFZ8HE0hcCCDHtnNlgSL665vUoV6KyAuzFk10kBaAEVRoeKXQkYEdtxgZAUGeiTijqAhND/w4sX19YLiuJGQCLYu1t9z0scverVtwrNB74aDxurLFGC/Pmv0uE8F9sfENJfLDEX/HaQ/8HASdVquH+C+EWmjuhcIgsu6sw4acqX5qzhLoDu5XEA42JytFY4nuKbk6qeJ6q4SJctAlnoM0y1XFgNNcwcacydH+RX9dCFfzkIrNrjWoMtAsrwOf5rvdpanpGOhaag2mCoL65bCnZASZ++OWWcIJT4e/hipt+UyUqQADK8zZjg4DmCtaODfZEl8ZQMV2eXbiY54l8VnfAg/7y9j/E96KCB2k1zx+adWognjjLx2PM8Edj9CUX1rXrNwUT4V4jnLze7flABF4vvvrGrNDMLQclt6LCB8V3uMazs7/HEjpr7G1/bY7zojpEkCYOuaeHnbS+wgwrOCEu5SR0KMV9AgZii7XPH2i02zM0zLVf4o/oFIlrkfFurULT8yuUAFBLSOXGCGYvaoURgRjW/uFjLfZuIOkVkvYIbSqt6nTaB5xqQLjoSosMduAhBCnb8//DfR0nsmMPumUjXa7gnpCiSSrdMDpQKyRxhyowioNOn2juYInslLRJCgy5PHvzl1wA22kBAR/f9NJeXuCMrznAQyDosolf9rY3nZedMG+U/O6+Bp42309phNE5upOXw1Wpb0cteTqr7btwvEZ12rJVlpNiMx/1rOo8NiGFXFOOujclsNtG42zy1Nx3YR6tsgasmqWNXh2+qxSNTt39H4pPrE9ZfG68OGE0S5UUbbJspnDaea7r1MnD3RKrcbbb5a0sAYA1VJZ9X1pYNaLBROC489yG5g04e2Fi674aruUjVuMgCPQV5q5LvGIEF4c8BCbvILji5T7W2Ndx3Na7AoDzV2YQKKGhytYrM8tEiwq6uKy6wTHhkdlu8M5/9TnPLnFXx///mmu+wcllCb00lb+9whNS9BSaAQyPDVSkIDBx/DnZy8dA5+u9y+UOPudPx0tTkQj3FaO9jnloIZCg1iPhonlgYqjbv3Ljw616yPUp5waPWUIlqRATZ/XaTMaPey/+rovmgaS9OotlEQxqvhRaBCc4nrzVtT9rM+4G/9fl1VkZ0ISokV5OaL9h6vjBAvrsR4D/aw3pWut/LhzvoiQjJQKIhLCMaXc+mrHQjyRacvD6PD6jAO2yT1CqY4yu8rG9runMc8nStApfAY29zBjDMznVAAAAAElFTkSuQmCC", + "name": "Logo-sm-64.png", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "813f2b0d-9faa-4575-bf1b-d0b04f395e6d", + "content": "{\"display_name\":\"Search/Results Count\",\"value\":\"{{ current_page }} - {{ page_size }} of {{ searchindex.approximate_total_hits }} Results\\r\\n\"}", + "name": "Search/ResultsCount", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "830c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"true\"}", + "name": "Authentication/Registration/LocalLoginEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "840c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Twitter/ConsumerKey", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "850c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"value\":\"false\"}", + "name": "Search/IndexNotesAttachments", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "860c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Denies use of the portal to minors. By default, it is set to false.\",\"value\":\"false\"}", + "name": "Authentication/Registration/DenyMinors", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "870c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/EmailConfirmationEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "880c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The amount of time the Authentication/LoginThrottling/MaxInvaildAttemptsFromIPAddress are to be within before the IP address has to wait Authentication/LoginThrottling/IpAddressTimeoutTimeSpan. Default: 00:03:00 (3 mins)\",\"value\":\"00:03:00\"}", + "name": "Authentication/LoginThrottling/MaxAttemptsTimeLimitTimeSpan", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "890c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"The Prefix entered here will be used to filter Notes Text, allowing you to control notes exposed on the Portal ex: *WEB*\",\"value\":\"*WEB*\"}", + "name": "KnowledgeManagement/NotesFilter", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8a0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Override query for site search, to apply additional weights and filters. @Query is the query text entered by a user. Lucene query syntax reference: http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html\",\"value\":\"+(@Query) _title:(@Query) _logicalname:knowledgearticle~0.9^0.3 _logicalname:annotation~0.9^0.25 _logicalname:adx_webpage~0.9^0.2 -_logicalname:adx_webfile~0.9 adx_partialurl:(@Query) _logicalname:adx_blogpost~0.9^0.1 -_logicalname:adx_communityforumthread~0.9\"}", + "name": "search/query", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8b0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5,\"value\":\"true\"}", + "name": "Authentication/Registration/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8c0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":5}", + "name": "Authentication/OpenAuth/Twitter/ConsumerSecret", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8c2df0ce-046c-4722-bb2d-9dab810be016", + "content": "{\"source\":\"{% assign title = title | default: page.title %}\\r\\n\\r\\n\\r\\n\"}", + "name": "Breadcrumbs", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8d0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Enables or disables Azure AD as an external identity provider. By default, it is set to true.\",\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/AzureADLoginEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8e0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"Sets whether or not the portal can redirect the user to the profile page after successful sign-in. By default, it is set to true.\",\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/ProfileRedirectEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8f0c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"importsequencenumber\":3,\"value\":\"true\"}", + "name": "Authentication/Registration/ExternalLoginEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "8f919997-af47-486f-94f3-b6ed23401e19", + "content": "{\"managecontentsnippets\":false,\"managesitemarkers\":false,\"manageweblinksets\":false,\"previewunpublishedentities\":true}", + "name": "Preview permission for Blank Template", + "powerpagecomponenttype": "12", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "900c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A true or false value. If set to true, the portal will display the terms and conditions of the site. Users must agree to the terms and conditions before they are considered authenticated and can use the site.\",\"value\":\"false\"}", + "name": "Authentication/Registration/TermsAgreementEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "920c4529-3634-ed11-9db1-0022480b4066", + "content": "{\"description\":\"A true or false value. If set to true, the Last Successful Login field on the portal user’s contact will be updated with the date and time when they successfully signed in.\",\"value\":\"False\"}", + "name": "Authentication/LoginTrackingEnabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "9a399489-4241-4271-a5a0-4230cefb2dff", + "content": "{\"description\":\"Set whether the header web template is output cached.\",\"value\":\"True\"}", + "name": "Header/OutputCache/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "9caacc61-abcf-4fda-9351-35fe04baec24", + "content": "{\"anonymoususersrole\":false,\"authenticatedusersrole\":false}", + "name": "Administrators", + "powerpagecomponenttype": "11", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "9df32875-e94f-40f9-ab11-4af812195522", + "content": "{\"displayorder\":1,\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"feedbackpolicy\":756150005,\"hiddenfromsitemap\":false,\"isroot\":true,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"partialurl\":\"/\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false,\"title\":\"Home\"}", + "name": "Home", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "a49ed643-6d15-4791-b95d-5655c2477650", + "content": "{\"displayorder\":10,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":false,\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"portalbasictheme.css\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\"}", + "filecontent": "LyoqDQogKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQuIENoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBub3QNCiAqIHN1cHBvcnRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IGRvIG5vdCBtb2RpZnkgdGhpcyBmaWxlLiBBbnkNCiAqIGNoYW5nZSB0byB0aGlzIGZpbGUgd2lsbCBnZXQgb3ZlcndyaXR0ZW4gd2l0aCBhIHRoZW1lIGFwcGxpZWQgdXNpbmcNCiAqIFNpdGUgU3R5bGluZyBwYW5lbCBmcm9tIFBvd2VyIEFwcHMgUG9ydGFscy4NCiAqLw0KIDpyb290IHsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTogIzJFNDU2QjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMjogI0ZGQ0E0QjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMzogIzI3NzQ5MzsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNDogI0ZFQTAwMjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNTogI0YzREJCMTsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNjogIzg4QUJBMjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yNzogI0ZGRkZGRjsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yODogIzJBMkMyRTsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yOTogI0U1ODcwMDsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTA6IDsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTE6IDsNCiAgLS1wb3J0YWxUaGVtZUNvbG9yMTI6IDsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3IxOiAjRkZGRkZGOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjI6ICMyQTJDMkU7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yMzogI0ZGRkZGRjsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3I0OiAjMkEyQzJFOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjU6ICMyQTJDMkU7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yNjogIzJBMkMyRTsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3I3OiAjMkEyQzJFOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjg6ICNGRkZGRkY7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yOTogIzJBMkMyRTsNCiAgLS1wb3J0YWxUaGVtZU9uQ29sb3IxMDogOw0KICAtLXBvcnRhbFRoZW1lT25Db2xvcjExOiA7DQogIC0tcG9ydGFsVGhlbWVPbkNvbG9yMTI6IDsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yMSk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IxKTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEiXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMSJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEiXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMSJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxIl0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjEpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IyKTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjIpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMiJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IyIl0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMiJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IyIl0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjIiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMik7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjMpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMyk7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IzIl0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjMiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IzIl0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjMiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMyJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IzKTsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yNCk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I0KTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjQiXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNCJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjQiXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNCJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I0Il0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjQpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I1KTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjUpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNSJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I1Il0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNSJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I1Il0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjUiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yNSk7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjYpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yNik7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I2Il0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjYiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I2Il0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjYiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNiJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I2KTsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yNyk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I3KTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjciXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNyJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjciXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yNyJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I3Il0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjcpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I4KTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjgpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOCJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I4Il0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOCJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I4Il0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjgiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yOCk7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjkpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yOSk7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I5Il0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjkiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3I5Il0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjkiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yOSJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3I5KTsgfQ0KDQpbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjEwKTsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjEwKTsgfQ0KICBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGgxLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGgyLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGgzLCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGg0LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGg1LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIGg2LCBbZGF0YS1jb21wb25lbnQtdGhlbWU9InBvcnRhbFRoZW1lQ29sb3IxMCJdIHAgew0KICAgIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IxMCk7IH0NCg0KW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMSk7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZU9uQ29sb3IxMSk7IH0NCiAgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoMSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoMiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoMywgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoNCwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoNSwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBoNiwgW2RhdGEtY29tcG9uZW50LXRoZW1lPSJwb3J0YWxUaGVtZUNvbG9yMTEiXSBwIHsNCiAgICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMTEpOyB9DQoNCltkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yMTIpOw0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVPbkNvbG9yMTIpOyB9DQogIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDEsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDIsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDMsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDQsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDUsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gaDYsIFtkYXRhLWNvbXBvbmVudC10aGVtZT0icG9ydGFsVGhlbWVDb2xvcjEyIl0gcCB7DQogICAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lT25Db2xvcjEyKTsgfQ0KDQpib2R5IHsNCiAgY29sb3I6ICMwMDAwMDA7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7IH0NCg0KbGVnZW5kIHsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KZm9vdGVyIHsNCiAgY29sb3I6ICMyQTJDMkU7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAxNnB4OyB9DQogIGZvb3RlciAuZm9vdGVyLWJvdHRvbSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzg4QUJBMjsgfQ0KDQouY29sdW1uQmxvY2tMYXlvdXQgew0KICBtYXJnaW4tdG9wOiA2MHB4Ow0KICBtYXJnaW4tYm90dG9tOiA2MHB4Ow0KICBwYWRkaW5nOiAxNnB4OyB9DQoNCi5icmVhZGNydW1iIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0NCiAgLmJyZWFkY3J1bWIgPiBsaSBhIHsNCiAgICBjb2xvcjogIzJBMkMyRTsgfQ0KICAgIC5icmVhZGNydW1iID4gbGkgYTpob3ZlciB7DQogICAgICBjb2xvcjogIzJBMkMyRTsgfQ0KICAuYnJlYWRjcnVtYiA+IC5hY3RpdmUgew0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQoNCi5uYXYtdGFicyA+IGxpID4gYTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCi5uYXYtdGFicyA+IGxpID4gYTpmb2N1cyB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCi5idG4tcHJpbWFyeSB7DQogIGNvbG9yOiAjMkEyQzJFOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICBib3JkZXItY29sb3I6ICNGRUEwMDI7DQogIGJvcmRlci1yYWRpdXM6IDJweDsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNjAwOw0KICBmb250LXNpemU6IDE0cHg7DQogIHBhZGRpbmc6IDZweCAyMHB4Ow0KICB3aWR0aDogZml0LWNvbnRlbnQ7DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRUEwMDI7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQogIC5idG4tcHJpbWFyeTpob3ZlciB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICBib3JkZXItY29sb3I6ICNFNTg3MDA7IH0NCiAgLmJ0bi1wcmltYXJ5OmFjdGl2ZSwgLmJ0bi1wcmltYXJ5LmFjdGl2ZSB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICBib3JkZXItY29sb3I6ICNFNTg3MDA7IH0NCiAgICAuYnRuLXByaW1hcnk6YWN0aXZlOmhvdmVyLCAuYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLCAuYnRuLXByaW1hcnk6YWN0aXZlLmZvY3VzLCAuYnRuLXByaW1hcnkuYWN0aXZlOmhvdmVyLCAuYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLCAuYnRuLXByaW1hcnkuYWN0aXZlLmZvY3VzIHsNCiAgICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICAgIGJvcmRlci1jb2xvcjogI0U1ODcwMDsgfQ0KICAuYnRuLXByaW1hcnk6Zm9jdXMsIC5idG4tcHJpbWFyeS5mb2N1cyB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsNCiAgICBib3JkZXItY29sb3I6ICNFNTg3MDA7IH0NCg0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzJFNDU2QjsgfQ0KDQoubmF2YmFyLXRvZ2dsZSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRUEwMDI7IH0NCg0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhciAubWVudS1iYXIgPiAubmF2YmFyLW5hdiA+IGxpID4gYSB7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAyMHB4OyB9DQogIC5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXIgLm1lbnUtYmFyID4gLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIgew0KICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQoNCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSB7DQogIGJvcmRlcjogMXB4IHNvbGlkICNGRUEwMDI7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTU4NzAwOw0KICAgIGJvcmRlci1jb2xvcjogI0U1ODcwMDsgfQ0KICAubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6Zm9jdXMgew0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZmZmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1ODcwMDsgfQ0KICAubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMkEyQzJFOw0KICAgIGJvcmRlci1jb2xvcjogIzJBMkMyRTsgfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEgew0KICBjb2xvcjogI0ZGRkZGRjsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDIwcHg7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICAgIGNvbG9yOiAjMDAwMDAwOw0KICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQogIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpmb2N1cyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICB0ZXh0LWRlY29yYXRpb246IFVuZGVybGluZTsgfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGEgew0KICBjb2xvcjogIzAwMDAwMDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmhvdmVyIHsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQogIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7DQogICAgY29sb3I6ICMwMDAwMDA7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgICB0ZXh0LWRlY29yYXRpb246IFVuZGVybGluZTsgfQ0KDQoubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOw0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHsNCiAgICBjb2xvcjogIzAwMDAwMDsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIgew0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCiAgICAgIGNvbG9yOiAjRkVBMDAyOw0KICAgICAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMgew0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCiAgICAgIGNvbG9yOiAjRkVBMDAyOw0KICAgICAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7DQogICAgY29sb3I6ICNGRUEwMDI7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBVbmRlcmxpbmU7IH0NCiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciB7DQogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOw0KICAgICAgY29sb3I6ICNGRUEwMDI7DQogICAgICB0ZXh0LWRlY29yYXRpb246IFVuZGVybGluZTsgfQ0KICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHsNCiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7DQogICAgICBjb2xvcjogI0ZFQTAwMjsNCiAgICAgIHRleHQtZGVjb3JhdGlvbjogVW5kZXJsaW5lOyB9DQoNCi5uYXYgPiBsaSA+IGEgew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCiAgLm5hdiA+IGxpID4gYTpob3ZlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KICAubmF2ID4gbGkgPiBhOmZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyB9DQogIC5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEgew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjb2xvcjogIzAwMDAwMDsgfQ0KICAgIC5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIgew0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsNCiAgICAgIGNvbG9yOiAjMDAwMDAwOyB9DQogICAgLm5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7DQogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgICAgY29sb3I6ICMwMDAwMDA7IH0NCiAgLm5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQogICAgLm5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyIHsNCiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7DQogICAgICBjb2xvcjogIzAwMDAwMDsgfQ0KICAgIC5uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7DQogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICAgICAgY29sb3I6ICMwMDAwMDA7IH0NCg0KLm5hdiA+IC5vcGVuID4gYSB7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KICAubmF2ID4gLm9wZW4gPiBhOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQogIC5uYXYgPiAub3BlbiA+IGE6Zm9jdXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnNlY3Rpb25QcmltYXJ5Q29sb3Igew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDQTRCOw0KICBjb2xvcjogIzAwMDAwMDsgfQ0KICAuc2VjdGlvblByaW1hcnlDb2xvciBoMSwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDIsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGgzLCAuc2VjdGlvblByaW1hcnlDb2xvciBoNCwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgaDUsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIGg2LCAuc2VjdGlvblByaW1hcnlDb2xvciBwLCAuc2VjdGlvblByaW1hcnlDb2xvciBhIHsNCiAgICBjb2xvcjogIzAwMDAwMDsgfQ0KICAuc2VjdGlvblByaW1hcnlDb2xvciAuY3JtRW50aXR5Rm9ybVZpZXcgaDEsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoMiwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmNybUVudGl0eUZvcm1WaWV3IGgzLCAuc2VjdGlvblByaW1hcnlDb2xvciAuY3JtRW50aXR5Rm9ybVZpZXcgaDQsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5jcm1FbnRpdHlGb3JtVmlldyBoNSwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmNybUVudGl0eUZvcm1WaWV3IGg2LCAuc2VjdGlvblByaW1hcnlDb2xvciAuY3JtRW50aXR5Rm9ybVZpZXcgcCwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmNybUVudGl0eUZvcm1WaWV3IGEgew0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQogIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGgxLCAuc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoMiwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDMsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGg0LCAuc2VjdGlvblByaW1hcnlDb2xvciAuZW50aXR5bGlzdCBoNSwgLnNlY3Rpb25QcmltYXJ5Q29sb3IgLmVudGl0eWxpc3QgaDYsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IHAsIC5zZWN0aW9uUHJpbWFyeUNvbG9yIC5lbnRpdHlsaXN0IGEgew0KICAgIGNvbG9yOiAjMDAwMDAwOyB9DQoNCmE6bm90KC5idG4pIHsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0NCiAgYTpub3QoLmJ0bik6aG92ZXIgew0KICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9DQoNCmEsDQouYSB7DQogIGNvbG9yOiAjMkEyQzJFOw0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA0MDA7DQogIGZvbnQtc2l6ZTogMTRweDsgfQ0KICBhOmhvdmVyLCBhOmZvY3VzLA0KLmE6aG92ZXIsDQouYTpmb2N1cyB7DQogICAgY29sb3I6ICMyQTJDMkU7IH0NCg0KYVtkaXNhYmxlZF0gew0KICBjb2xvcjogI0ExOUY5RDsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH0NCg0KYnV0dG9uW2Rpc2FibGVkXSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGM0YyRjE7DQogIGNvbG9yOiAjQTE5RjlEOw0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgYm9yZGVyOiAycHg7IH0NCg0KLm9wZW4gPiAuYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlIHsNCiAgY29sb3I6ICMyQTJDMkU7DQogIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7DQogIGJvcmRlci1jb2xvcjogI0ZFQTAwMjsgfQ0KDQoub3BlbiA+IC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGUgew0KICBjb2xvcjogI2ZmZmZmZjsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsNCiAgYm9yZGVyLWNvbG9yOiAjRkVBMDAyOyB9DQogIC5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwgLm9wZW4gPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLCAub3BlbiA+IC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGUuZm9jdXMgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFNTg3MDA7DQogICAgYm9yZGVyLWNvbG9yOiAjYjI2OTAwOyB9DQoNCi5jcm1FbnRpdHlGb3JtVmlldywgLmVudGl0eWxpc3QsIC5tb2RhbC1jb250ZW50LCAucG9wb3Zlci1jb250ZW50IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsNCiAgY29sb3I6ICMwMDAwMDA7DQogIGJvcmRlcjogMXB4IHNvbGlkICNmMmYyZjI7IH0NCg0KLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtYm9keSwgLmxpc3QtZ3JvdXAtaXRlbSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7DQogIGNvbG9yOiAjMDAwMDAwOyB9DQoNCi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOw0KICBjb2xvcjogIzAwMDAwMDsgfQ0KDQouZmFjZXQtbGlzdC1ncm91cC1pdGVtLXRpdGxlIHsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KLmZvcm0tY29udHJvbCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KaW5wdXQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyB9DQoNCi5ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXItd2lkZ2V0IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsgfQ0KICAuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldCB0YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpob3ZlciwgLmJvb3RzdHJhcC1kYXRldGltZXBpY2tlci13aWRnZXQgdGFibGUgdGQuZGF5OmhvdmVyLCAuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldCB0YWJsZSB0ZCBzcGFuOmhvdmVyIHsNCiAgICBjb2xvcjogYmxhY2s7IH0NCiAgLmJvb3RzdHJhcC1kYXRldGltZXBpY2tlci13aWRnZXQgdGFibGUgdGQuYWN0aXZlOmhvdmVyLCAuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldCB0YWJsZSB0ZCBzcGFuLmFjdGl2ZTpob3ZlciB7DQogICAgY29sb3I6IHdoaXRlOyB9DQoNCi50YWJsZS1zdHJpcGVkID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7IH0NCg0KLmxvZ2luLWhlYWRpbmctc2VjdGlvbiB7DQogIGNvbG9yOiB1bnNldDsgfQ0KDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIHsNCiAgY29sb3I6ICNmZmZmZmY7IH0NCg0KLnNlYXJjaC1yZXN1bHRzIC5oaWdobGlnaHQgew0KICBjb2xvcjogIzAwMDAwMDsgfQ0KDQoudGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0ZCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGhlYWQgPiB0ci5pbmZvID4gdGggew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5pbmZvIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUgPiB0aGVhZCA+IHRyID4gdGguaW5mbyB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRib2R5ID4gdHIuaW5mbyA+IHRoIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUgPiB0Ym9keSA+IHRyID4gdGQuaW5mbyB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmluZm8gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRkIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0aCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmluZm8gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5pbmZvIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuaW5mbzpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmluZm86aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOyB9DQoNCi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRkIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQoudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmluZm86aG92ZXIgPiB0aCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH0NCg0KLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5pbmZvIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfQ0KDQouZm9ybS1jbG9zZSB7DQogIGNvbG9yOiAjMDAwMDAwOyB9DQogIC5mb3JtLWNsb3NlOmhvdmVyIHsNCiAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQogIC5mb3JtLWNsb3NlOmZvY3VzIHsNCiAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQoNCjo6cGxhY2Vob2xkZXIgew0KICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQoNCi5oZWxwLWJsb2NrIHsNCiAgY29sb3I6ICMwMDAwMDA7IH0NCg0KLm1zb3Mtc2VsZWN0aW9uLWNvbnRhaW5lciwgLm1zb3MtY29udGFpbmVyLCAubXNvcy1jYXJldC1jb250YWluZXIsIC5tc29zLWFjdGlvbi1idXR0b25zOmhvdmVyIHsNCiAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCiAgYmFja2dyb3VuZDogI0ZGRkZGRiAhaW1wb3J0YW50OyB9DQoNCi5tc29zLW9wdGlvbi1zZWxlY3RlZCwgLm1zb3Mtc2VsZWN0ZWQtZGlzcGxheS1pdGVtLCAubXNvcy1xdWljay1kZWxldGUsIC5tc29zLXF1aWNrLWRlbGV0ZTpob3ZlciB7DQogIGJhY2tncm91bmQ6ICNmMmYyZjIgIWltcG9ydGFudDsgfQ0KDQoubXNvcy1sYWJlbCwgLm1zb3MtcXVpY2stZGVsZXRlLCAubXNvcy1xdWljay1kZWxldGU6aG92ZXIgew0KICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OyB9DQoNCi5tc29zLW9wdGlvbi1mb2N1c2VkOmFmdGVyLCAubXNvcy1zZWxlY3RlZGl0ZW1zOmZvY3VzIC5tc29zLXNlbGVjdGVkLWRpc3BsYXktaXRlbS5tc29zLXNlbGVjdGVkaXRlbS1hY3RpdmU6YWZ0ZXIsIC5tc29zLXNlbGVjdGVkaXRlbXMtdG9nZ2xlOmZvY3VzIHsNCiAgYm9yZGVyLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7IH0NCg0KLm1zb3Mtb3B0aW9uOmhvdmVyLCAubXNvcy1vcHRpb24tc2VsZWN0ZWQ6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiAjZjlmOWY5ICFpbXBvcnRhbnQ7IH0NCg0KLm1zb3Mtc2VsZWN0ZWRpdGVtcy10b2dnbGUgew0KICBjb2xvcjogI0ZGQ0E0QiAhaW1wb3J0YW50OyB9DQoNCmgxLA0KLmgxLA0KLnNlY3Rpb24tbGFuZGluZy1oZWFkaW5nLA0KLnNlY3Rpb24tbGFuZGluZyAucm93ID4gZGl2IC5zZWN0aW9uLWxhbmRpbmctaGVhZGluZywNCi5zZWN0aW9uLWlubGluZS1zZWFyY2ggLnJvdyA+IGRpdiBoMSwNCi5zZWN0aW9uLWxhbmRpbmcgaDEsDQouc2VjdGlvbi1zZWFyY2ggLmhlYWRlci1zZWFyY2ggaDEsDQoucGFnZV9zZWN0aW9uIGgxLA0KLmNvbG9yLWludmVyc2UgaDEsDQpoMSBwIHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDQwcHg7DQogIGNvbG9yOiAjMkEyQzJFOw0KICBtYXJnaW4tbGVmdDogMHB4Ow0KICBtYXJnaW4tcmlnaHQ6IDBweDsgfQ0KDQpoMiwNCi5oMiwNCi5zZWN0aW9uLWxhbmRpbmcgLnJvdyA+IGRpdiAuc2VjdGlvbi1sYW5kaW5nLXN1Yi1oZWFkaW5nLA0KLnBhZ2Vfc2VjdGlvbiBoMiwNCi5jb2xvci1pbnZlcnNlIGgyLA0KaDIgcCB7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAzNnB4Ow0KICBjb2xvcjogIzJBMkMyRTsgfQ0KDQpoMywNCi5oMywNCi5wYWdlX3NlY3Rpb24gaDMsDQouY29sb3ItaW52ZXJzZSBoMywNCi5zaWRlYmFyLWhvbWUgaDMgew0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA0MDA7DQogIGZvbnQtc2l6ZTogMjRweDsNCiAgY29sb3I6ICMyQTJDMkU7IH0NCg0KaDQsDQouaDQsDQoucG9sbCAucG9sbC1oZWFkZXIgaDQsDQoucG9sbCAucG9sbC10YWdzIGg0IHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNzAwOw0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCmg1LA0KLmg1IHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNzAwOw0KICBmb250LXNpemU6IDE0cHg7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCnAsDQoucCwNCi5wYWdlX3NlY3Rpb24gcCwNCi5zZWN0aW9uLWRpYWdvbmFsLWxlZnQgcCwNCi5zZWN0aW9uLWRpYWdvbmFsLXJpZ2h0IHAgew0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA0MDA7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgY29sb3I6ICMyQTJDMkU7IH0NCg0KLnAyIHsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDE2cHg7DQogIGNvbG9yOiAjMkEyQzJFOyB9DQoNCi5idXR0b24xIHsNCiAgY29sb3I6ICMyQTJDMkU7DQogIGJvcmRlci1yYWRpdXM6IDJweDsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNjAwOw0KICBmb250LXNpemU6IDE0cHg7DQogIGJvcmRlci1jb2xvcjogI0ZFQTAwMjsNCiAgcGFkZGluZzogNnB4IDIwcHg7DQogIHdpZHRoOiBmaXQtY29udGVudDsNCiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsgfQ0KICAuYnV0dG9uMTpub3QoLmdqcy1zZWxlY3RlZCk6aG92ZXIgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFNTg3MDA7DQogICAgYm9yZGVyLWNvbG9yOiAjRTU4NzAwOyB9DQogIC5idXR0b24xOm5vdCguZ2pzLXNlbGVjdGVkKTphY3RpdmUsIC5idXR0b24xLmFjdGl2ZTpub3QoLmdqcy1zZWxlY3RlZCkgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFNTg3MDA7IH0NCiAgLmJ1dHRvbjE6Zm9jdXMsIC5idXR0b24xLmZvY3VzIHsNCiAgICBjb2xvcjogIzJBMkMyRTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTU4NzAwOyB9DQoNCi5idXR0b24yLCAuYnRuLWRlZmF1bHQgew0KICBjb2xvcjogI0ZFQTAwMjsNCiAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICBmb250LWZhbWlseTogQXJpYWw7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQogIGZvbnQtc2l6ZTogMTRweDsNCiAgYm9yZGVyLWNvbG9yOiAjRkVBMDAyOw0KICBwYWRkaW5nOiA2cHggMjBweDsNCiAgd2lkdGg6IGZpdC1jb250ZW50Ow0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQ0KICAuYnV0dG9uMjpub3QoLmdqcy1zZWxlY3RlZCk6aG92ZXIsIC5idG4tZGVmYXVsdDpub3QoLmdqcy1zZWxlY3RlZCk6aG92ZXIgew0KICAgIGNvbG9yOiAjMkEyQzJFOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNGRUEwMDI7DQogICAgYm9yZGVyLWNvbG9yOiAjRkVBMDAyOyB9DQogIC5idXR0b24yOm5vdCguZ2pzLXNlbGVjdGVkKTphY3RpdmUsIC5idXR0b24yLmFjdGl2ZTpub3QoLmdqcy1zZWxlY3RlZCksIC5idG4tZGVmYXVsdDpub3QoLmdqcy1zZWxlY3RlZCk6YWN0aXZlLCAuYnRuLWRlZmF1bHQuYWN0aXZlOm5vdCguZ2pzLXNlbGVjdGVkKSB7DQogICAgY29sb3I6ICMyQTJDMkU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFQTAwMjsgfQ0KICAuYnV0dG9uMjpmb2N1cywgLmJ1dHRvbjIuZm9jdXMsIC5idG4tZGVmYXVsdDpmb2N1cywgLmJ0bi1kZWZhdWx0LmZvY3VzIHsNCiAgICBjb2xvcjogIzJBMkMyRTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkVBMDAyOyB9DQoNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIGEgcCwNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIGEgaDEsDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIGgyLA0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgYSBoMywNCi5uYXZiYXItc3RhdGljLXRvcC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIGEgaDQsDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIGg1LA0KLm5hdmJhci1zdGF0aWMtdG9wLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQgYSBzcGFuIHsNCiAgZGlzcGxheTogaW5saW5lOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICBjb2xvcjogI0ZGRkZGRjsgfQ0KDQpoMS5zaXRlVGl0bGUsDQoubmF2YmFyLXN0YXRpYy10b3AubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCBhIGgxLnNpdGVUaXRsZSB7DQogIGRpc3BsYXk6IGlubGluZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCiAgY29sb3I6ICNGRkZGRkY7DQogIGZvbnQtZmFtaWx5OiBBcmlhbDsNCiAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgZm9udC1zaXplOiAzMHB4OyB9DQoNCnAuc21hbGxUZXh0IHsNCiAgZGlzcGxheTogaW5saW5lOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICBjb2xvcjogIzJBMkMyRTsNCiAgZm9udC1mYW1pbHk6IEFyaWFsOw0KICBmb250LXdlaWdodDogNDAwOw0KICBmb250LXNpemU6IDE2cHg7IH0NCg0KYS5hbmNob3ItaW5oZXJpdC1zdHlsZXMgew0KICBmb250LXNpemU6IGluaGVyaXQ7DQogIGZvbnQtZmFtaWx5OiBpbmhlcml0Ow0KICBjb2xvcjogaW5oZXJpdDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjEpICFpbXBvcnRhbnQ7IH0NCg0KYS5hbmNob3ItaG92ZXItY29sb3ItY29sb3IyOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IyKSAhaW1wb3J0YW50OyB9DQoNCmEuYW5jaG9yLWhvdmVyLWNvbG9yLWNvbG9yMzpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yMykgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjQ6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjQpICFpbXBvcnRhbnQ7IH0NCg0KYS5hbmNob3ItaG92ZXItY29sb3ItY29sb3I1OmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I1KSAhaW1wb3J0YW50OyB9DQoNCmEuYW5jaG9yLWhvdmVyLWNvbG9yLWNvbG9yNjpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yNikgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjc6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tcG9ydGFsVGhlbWVDb2xvcjcpICFpbXBvcnRhbnQ7IH0NCg0KYS5hbmNob3ItaG92ZXItY29sb3ItY29sb3I4OmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3I4KSAhaW1wb3J0YW50OyB9DQoNCmEuYW5jaG9yLWhvdmVyLWNvbG9yLWNvbG9yOTpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS1wb3J0YWxUaGVtZUNvbG9yOSkgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjEwOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMCkgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjExOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMSkgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci1ob3Zlci1jb2xvci1jb2xvcjEyOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXBvcnRhbFRoZW1lQ29sb3IxMikgIWltcG9ydGFudDsgfQ0KDQphLmFuY2hvci10ZXh0LWRlY29yYXRpb24tbm9uZSB7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KDQphLmFuY2hvci10ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIHsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0NCg0KYS5hbmNob3ItaG92ZXItdGV4dC1kZWNvcmF0aW9uLW5vbmU6aG92ZXIgew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0NCg0KYS5hbmNob3ItaG92ZXItdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZTpob3ZlciB7DQogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9", + "name": "portalbasictheme.css", + "powerpagecomponenttype": "3", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "ad212595-91f1-4e7c-9d99-b0925011cfd9", + "content": "{\"source\":\"\\r\\n
\\r\\n {% include 'Page Copy' %}\\r\\n
\\r\\n\"}", + "name": "Default studio template", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "b3cd3b0a-b4aa-4c74-8ffc-23a53d5fcda8", + "content": "{\"entityname\":\"adx_webpage\",\"isdefault\":false,\"rewriteurl\":\"~/Pages/AccessDenied.aspx\",\"usewebsiteheaderandfooter\":true}", + "name": "Access Denied", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "b471b904-b627-4f6a-8e57-866b7d534eac", + "content": "{\"source\":\"\\r\\n\"}", + "name": "Languages Dropdown", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "b579f68c-5c66-4fb5-b760-57323fac52d5", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"ccb8f726-36d1-40cd-8c27-172ae2604322\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"search\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false}", + "name": "Search", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "bac936b5-a02c-46b3-981d-b4e8a581e263", + "content": "{\"pageid\":\"d44239b8-d25b-4270-8e48-3e9851a3d4c7\"}", + "name": "Page Not Found", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "bcaddf61-3aba-4f7f-ab3d-8c252763cff2", + "content": "{\"display_name\":\"Search/Title\",\"value\":\"Search\\r\\n\"}", + "name": "Search/Title", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "c04c7a09-83f3-4258-bd37-c9b164587996", + "content": "{\"display_name\":\"Profile Navigation\"}", + "name": "Profile Navigation", + "powerpagecomponenttype": "4", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "c05d166f-f510-47b3-9842-8fece0cfd7d0", + "content": "{\"copy\":\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n

Page not found

\\r\\n

Check the link and try again

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\",\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"page-not-found\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"d44239b8-d25b-4270-8e48-3e9851a3d4c7\",\"sharedpageconfiguration\":false}", + "name": "Page Not Found", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "c8d6580d-d6e0-4cb1-9a3c-86eb4a1f4113", + "content": "{\"right\":1}", + "name": "Grant Change to Content", + "powerpagecomponenttype": "10", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "cafcc042-57ab-4099-8856-a68d32029e56", + "content": "{\"copy\":\"

Please provide some information about yourself.

\\r\\n\\r\\n

The First Name and Last Name you provide will be displayed alongside any comments, forum posts, or ideas you make on the site.

\\r\\n\\r\\n

The Email Address and Phone number will not be displayed on the site.

\\r\\n\\r\\n

Your Organization and Title are optional. They will be displayed with your comments and forum posts.

\\r\\n\",\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"230c16df-fb1b-4828-8be1-b0a87016a6a3\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"profile\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"6942c943-cc5d-44dc-883a-13ff114978e4\",\"sharedpageconfiguration\":false,\"title\":\"Profile\"}", + "name": "Profile", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "ccb8f726-36d1-40cd-8c27-172ae2604322", + "content": "{\"entityname\":\"adx_webpage\",\"isdefault\":false,\"rewriteurl\":\"~/Pages/Search.aspx\",\"usewebsiteheaderandfooter\":true,\"webtemplateid\":\"7683ceb1-f4cb-4eaa-b886-c61c493f0033\"}", + "name": "Search", + "powerpagecomponenttype": "6", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "cd3eb431-388c-4345-9fda-bee1f444e19b", + "content": "{\"source\":\"\\r\\n\"}", + "name": "Page Header", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d064b374-1c25-43d9-b249-c41428bf2b47", + "content": "{\"description\":\"Site setting that determines if the language code is included in the portal URL.\",\"value\":\"False\"}", + "name": "MultiLanguage/DisplayLanguageCodeInURL", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d44239b8-d25b-4270-8e48-3e9851a3d4c7", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":true,\"hiddenfromsitemap\":true,\"isroot\":true,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"page-not-found\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"sharedpageconfiguration\":false}", + "name": "Page Not Found", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d4fb9118-3ebe-457e-b5aa-5c47f311d750", + "content": "{\"description\":\"Set whether the footer web template is output cached.\",\"value\":\"True\"}", + "name": "Footer/OutputCache/Enabled", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d58fe588-c250-477e-ab03-b210e66f8154", + "content": "{\"copy\":\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\",\"displayorder\":1,\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"feedbackpolicy\":756150005,\"hiddenfromsitemap\":false,\"isroot\":false,\"pagetemplateid\":\"3639737b-f9d4-4fea-a546-1b4f74551574\",\"partialurl\":\"/\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"sharedpageconfiguration\":false,\"summary\":\"

This is a sample landing page for you to start creating your website.

\\r\\n\",\"title\":\"Home\"}", + "name": "Home", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "d5e1130d-d4bd-443f-882a-d6c3f1196ee0", + "content": "{\"value\":\"{\\\"status\\\":\\\"enable\\\",\\\"selectedThemeId\\\":\\\"329a43fa-5471-4678-8330-d3a0b404e9bb\\\",\\\"siteSettingId\\\":\\\"d5e1130d-d4bd-443f-882a-d6c3f1196ee0\\\",\\\"version\\\":\\\"V2\\\"}\"}", + "name": "ThemeFeature", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d60928a1-1c62-43d6-bde6-04402cc65de8", + "content": "{\"pageid\":\"6942c943-cc5d-44dc-883a-13ff114978e4\"}", + "name": "Profile", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "d6402076-0ba3-ed11-83ff-00224828d88f", + "content": "{\"source\":\"\\r\\n{% assign botconsumer = entities.adx_botconsumer[bot_consumer_id] %}\\r\\n{% assign env = environment %}\\r\\n{% assign languageCode = website.selected_language.code %}\\r\\n{% assign botConfig = botconsumer.adx_configjson %}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\"}", + "name": "Power Virtual Agents", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "daa2c87c-6466-49f5-9974-1f41ae1cdda7", + "content": "{\"adx_webpageaccesscontrolrule_webrole\":[\"9caacc61-abcf-4fda-9351-35fe04baec24\"],\"right\":1,\"webpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\"}", + "name": "Grant Change to Administrators", + "powerpagecomponenttype": "10", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e1589418-0ddb-403a-ae65-9d097d47cd8b", + "content": "{\"display_name\":\"Footer\",\"type\":756150001,\"value\":\"

Copyright © {{ now | date: 'yyyy' }}. All rights reserved.

\\r\\n\"}", + "name": "Footer", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "e1ef4c66-4b3e-49b5-92c0-3b664cc1566e", + "content": "{\"displayorder\":2,\"isdefault\":true,\"isvisible\":true}", + "name": "Published", + "powerpagecomponenttype": "1", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e2546127-1bda-44b8-af9f-dd066835c218", + "content": "{\"pageid\":\"9df32875-e94f-40f9-ab11-4af812195522\"}", + "name": "Home", + "powerpagecomponenttype": "13", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e72df4aa-9667-49e9-a902-28219623c435", + "content": "{\"source\":\"{% assign defaultlang = settings['LanguageLocale/Code'] | default: 'en-us' %}\\r\\n{% assign homeurl = website.adx_partialurl %}\\r\\n\\r\\n{% substitution %}\\r\\n{% assign current_page = page.id %}\\r\\n{% assign sr_page = sitemarkers.Search.id %}\\r\\n{% assign forum_page = sitemarkers.Forums.id %}\\r\\n{% if current_page %}\\r\\n {% if current_page == sr_page or current_page == forum_page %}\\r\\n {% assign section_class = 'section-landing-search' %}\\r\\n {% if current_page == forum_page %}\\r\\n {% assign section_class = 'section-landing-forums' %}\\r\\n {% endif %}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {% if current_page == sr_page %}\\r\\n

{% editable snippets 'Search/Title' default: resx[\\\"Discover_Contoso\\\"] %}

\\r\\n {% include 'Search', search_id: 'search_control' %}\\r\\n {% endif %}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {% endif %}\\r\\n{% endif %}\\r\\n{% endsubstitution %}\\r\\n\\r\\n\"}", + "name": "Header", + "powerpagecomponenttype": "8", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "e92e06ca-5847-4838-a5e2-8e55b9e58f78", + "content": "{\"adx_websiteaccess_webrole\":[\"9caacc61-abcf-4fda-9351-35fe04baec24\"],\"managecontentsnippets\":true,\"managesitemarkers\":true,\"manageweblinksets\":true,\"previewunpublishedentities\":true}", + "name": "Administrative permissions for Blank Template", + "powerpagecomponenttype": "12", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "eb25aea4-5e1f-458a-8a62-2dfc1e075f99", + "content": "{\"display_name\":\"Search/No Results\",\"value\":\"No results found.\\r\\n\"}", + "name": "Search/NoResults", + "powerpagecomponenttype": "7", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + }, + { + "powerpagecomponentid": "f364b4da-ad4a-4cc2-bc56-7496a211dc02", + "content": "{\"description\":\"Site setting that controls the depth of the webpage hierarchy that’s cloned in a newly-added supported language. Web link sets and content snippets are cloned in the newly-added language when webpages are cloned.\",\"value\":\"3\"}", + "name": "MultiLanguage/MaximumDepthToClone", + "powerpagecomponenttype": "9", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + }, + { + "powerpagecomponentid": "f717a74d-3f47-4340-b0b3-e44cfda956b8", + "content": "{\"enablerating\":false,\"enabletracking\":false,\"excludefromsearch\":false,\"hiddenfromsitemap\":true,\"isroot\":false,\"pagetemplateid\":\"ccb8f726-36d1-40cd-8c27-172ae2604322\",\"parentpageid\":\"9df32875-e94f-40f9-ab11-4af812195522\",\"partialurl\":\"search\",\"publishingstateid\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"rootwebpageid\":\"b579f68c-5c66-4fb5-b760-57323fac52d5\",\"sharedpageconfiguration\":false}", + "name": "Search", + "powerpagecomponenttype": "2", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b" + } + ], + "powerpagesite": [ + { + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2", + "content": "{\"defaultlanguage\":\"1148b4f4-118e-446a-9521-fdba58915b4b\",\"footerwebtemplateid\":\"7a31e640-5401-43c9-a5c1-ab3158ed81f2\",\"headerwebtemplateid\":\"e72df4aa-9667-49e9-a902-28219623c435\",\"website_language\":1033}", + "datamodelversion": "2.0", + "name": "Blank Page" + } + ], + "powerpagesitelanguage": [ + { + "powerpagesitelanguageid": "1148b4f4-118e-446a-9521-fdba58915b4b", + "content": "{\"publishingstate\":\"e1ef4c66-4b3e-49b5-92c0-3b664cc1566e\",\"systemlanguage\":1033}", + "displayname": "English", + "languagecode": "en-US", + "lcid": "1033", + "name": "English", + "powerpagesiteid": "e8f38780-8cba-4140-9215-16b9106310b2" + } + ] +} From 898470c48ff0baa810158ebf9dff9f9a64cee209 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Mon, 18 Nov 2024 16:55:25 +0530 Subject: [PATCH 18/28] CreateSiteManager --- .../commands/create-site/CreateSiteHelper.ts | 2 + .../commands/create-site/CreateSiteManager.ts | 472 ++++++++++++++++++ 2 files changed, 474 insertions(+) create mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index d4a0c82e..e6f12cbb 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -16,6 +16,7 @@ import { CREATE_SITE_BTN_CMD, CREATE_SITE_BTN_TITLE, CREATE_SITE_BTN_TOOLTIP, ED import { ICreateSiteOptions, IPreviewSitePagesContentOptions, ISiteInputState } from './CreateSiteTypes'; import { MultiStepInput } from '../../../../utilities/MultiStepInput'; import { getEnvList } from '../../../../utilities/Utils'; +import { PowerPagesSiteManager } from './CreateSiteManager'; export const createSite = async (createSiteOptions: ICreateSiteOptions) => { const { @@ -188,3 +189,4 @@ export async function collectSiteCreationInputs(siteName: string, envList: IEnvI // Return the collected site creation inputs including site name, environment name, and domain name return siteInputState; } + diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts new file mode 100644 index 00000000..32c3c513 --- /dev/null +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts @@ -0,0 +1,472 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + + +import { v4 as uuidv4 } from 'uuid'; +import { ITelemetry } from '../../../../OneDSLoggerTelemetry/telemetry/ITelemetry'; +import { dataverseAuthentication } from '../../../../services/AuthenticationProvider'; +import { BASE_PAGE } from './CreateSiteConstants'; +import { PowerPagesComponent, PowerPagesParsedJson, PowerPagesComponentType } from './CreateSiteModel'; +import { reGuidPowerPagesSite, getCDSEntityRequestURL, getFileUploadHeaders, base64ToArrayBuffer } from './CreateSiteUtils'; +import { nl2SiteJson } from './site-templates/Nl2Site'; +import * as entityNames from "./SiteEntityNames"; + + +export interface IPowerPagesSiteFromJsonActions { + updateSiteName: (name: string) => void; + addComponents: (components: PowerPagesComponent[]) => void; + updateComponent: (component: PowerPagesComponent) => void; + findComponents: ( + filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean + ) => PowerPagesComponent[] | undefined; + findComponent: ( + filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean + ) => PowerPagesComponent | undefined; + addOrUpdatePage: (pageName: string, pageCopy: string, isHomePage: boolean) => Promise; + getWebPageRootId: (pageName: string) => string; + addWebRole: (roleName: string, webRoleContent: object) => string; + save: () => Promise; +} + +/** + * This function allows you to initialize a blank template and mutate the various entities in memory before writing them to + * dataverse. Currently this function only supports provisioning but could potentially be updated to send upserts instead of + * inserts. That would also help with retrying failed requests. + * @param {string} templateName Template to start from. Could potentially be used to start with a template other than + * Blank. + * @param {string} language The language code to provision in. Only 1033 is supported currently + * @returns site data and actions to allow the caller to mutate site data + */ + +export class PowerPagesSiteManager { + private siteData: PowerPagesParsedJson; + private templateName: string; + private language: string; + private telemetry: ITelemetry; + + constructor(templateName: string, language: string, telemetry: ITelemetry) { + this.siteData = { + powerpagecomponent: [], + powerpagesite: [], + powerpagesitelanguage: [], + }; + this.templateName = templateName; + this.language = language; + this.telemetry = telemetry; + } + + // Function to fetch and load the template data + public async loadTemplate(): Promise { + //const languageCode = 1033 //Only English is supported for now + + const ppJsonBlob = nl2SiteJson; + + this.siteData = reGuidPowerPagesSite(ppJsonBlob as PowerPagesParsedJson); + } + + private getBatchAndFileUploads(): [ + any, + any, + PowerPagesComponent[] + ] { + // We need site and language to already be created before creating other components in a batch + const data = this.siteData; + const siteAndLanguages = []; + const operations: any[] = []; + + siteAndLanguages.push({ + method: 'POST', + url: 'https://org06ff0f46.crm10.dynamics.com/api/data/v9.2/powerpagesites', + headers: { + 'Content-Type': 'application/json; type=entry', + }, + body: JSON.stringify(data.powerpagesite[0]), + }); + + // Languages + data.powerpagesitelanguage.forEach((ppSiteLang) => { + const entity = { + ...ppSiteLang, + [`powerpagesiteid@odata.bind`]: `/${entityNames.PowerPagesSites}(${ppSiteLang.powerpagesiteid!})`, + }; + delete entity.powerpagesiteid; + siteAndLanguages.push({ + method: 'POST', + url: 'https://org06ff0f46.crm10.dynamics.com/api/data/v9.2/powerpagesitelanguages', + headers: { + 'Content-Type': 'application/json; type=entry', + }, + body: JSON.stringify(entity), + }); + }); + + const filesToUpload: PowerPagesComponent[] = []; + + // Components + data.powerpagecomponent.forEach((component) => { + if (component.powerpagecomponenttype === PowerPagesComponentType.WebFile && component.filecontent) { + filesToUpload.push(component); + } + const entity = { + ...component, + [`powerpagesiteid@odata.bind`]: `/${entityNames.PowerPagesSites}(${component.powerpagesiteid!})`, + [`powerpagesitelanguageid@odata.bind`]: component.powerpagesitelanguageid + ? `/${entityNames.PowerPagesSiteLanguages}(${component.powerpagesitelanguageid})` + : null, + }; + delete entity.powerpagesiteid; + delete entity.powerpagesitelanguageid; + delete entity.filecontent; + operations.push({ + method: 'POST', + url: 'https://org06ff0f46.crm10.dynamics.com/api/data/v9.2/powerpagecomponents', + headers: { + 'Content-Type': 'application/json; type=entry', + }, + body: JSON.stringify(entity), + }); + }); + + return [siteAndLanguages, operations, filesToUpload]; + } + + private findComponent( + filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean + ): PowerPagesComponent | undefined { + return this.siteData.powerpagecomponent.find(filter); + } + + /** +* Gets parent page id +* @returns {string} Parent page id +*/ + + private updateSiteName(name: string): void { + this.siteData.powerpagesite[0].name = name; + // The snippet named 'Site name' is hardcoded to the value 'Company name' in the template JSON. + // Assign the real site name so that the Header reflects site name. + // Find the index of the 'site name' snippet in the draft + const snippetIndex = this.siteData.powerpagecomponent.findIndex( + (c) => + c.powerpagecomponenttype === PowerPagesComponentType.ContentSnippet && + c.name.toLowerCase() === 'site name' + ); + if (snippetIndex !== -1) { + const siteNameSnippet = this.siteData.powerpagecomponent[snippetIndex]; + const parsedContent = JSON.parse(siteNameSnippet.content); + parsedContent.value = name; + siteNameSnippet.content = JSON.stringify(parsedContent); + } + } + + private addComponents(components: PowerPagesComponent[]): void { + this.siteData.powerpagecomponent = this.siteData.powerpagecomponent.concat(components); + } + private updateComponent(component: PowerPagesComponent): void { + const index = this.siteData.powerpagecomponent.findIndex( + (c) => c.powerpagecomponentid === component.powerpagecomponentid + ); + if (index >= 0) { + this.siteData.powerpagecomponent[index] = component; + } + } + + private findComponents( + filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean + ): PowerPagesComponent[] { + return this.siteData.powerpagecomponent.filter(filter); + } + + private getHomeRootPage(): PowerPagesComponent | undefined { + // Get the Home root (metadata) page. + + // All templates should have a SiteMarker with the same name of 'Home'. + // Use this component to obtain the pageid. + const siteMarker = this.findComponent( + (c) => c.powerpagecomponenttype === PowerPagesComponentType.SiteMarker && c.name === 'Home' + ); + const pageId = siteMarker ? JSON.parse(siteMarker.content).pageid : undefined; + + if (!pageId) { + return undefined; + } + + // Find the Home root (metadata) page. Ensure it is the root component. + const homeRootPage = this.findComponent( + (c) => + c.powerpagecomponenttype === PowerPagesComponentType.WebPage && + c.powerpagecomponentid === pageId && + JSON.parse(c.content).isroot + ); + return homeRootPage; + } + + private getHomePage(): PowerPagesComponent | undefined { + // To get the home page, we first need to get the root page. + // We then use the root page to obtain the correct home page. + // The name of the component will differ per locale, which is why we can't use the literal 'Home'. + const homeRootPage = this.getHomeRootPage(); + if (!homeRootPage) { + return undefined; + } + const homePage = this.findComponent( + (c) => + c.powerpagecomponenttype === PowerPagesComponentType.WebPage && + c.name === homeRootPage.name && + !JSON.parse(c.content).isroot + ); + return homePage; + } + + /** + * Gets publishing state id + * @returns {string} Publishing state id + */ + private getPublishingStateId(): string | undefined { + const publishingState = this.findComponent( + (c) => c.powerpagecomponenttype === PowerPagesComponentType.PublishingState && c.name === 'Published' + ); + return publishingState?.powerpagecomponentid; + } + + private async addOrUpdatePage(pageName: string, copy: string, isHomePage: boolean): Promise { + let rootPageID = ''; + + const pageCopy = copy; + + const component = isHomePage + ? this.getHomePage() + : this.findComponent( + (c) => + c.name === pageName && + c.powerpagecomponenttype === PowerPagesComponentType.WebPage && + !JSON.parse(c.content).isroot + ); + + if (component) { + const rootComponent = this.findComponent( + (c) => c.powerpagecomponentid === JSON.parse(component.content).rootwebpageid + ); + rootPageID = rootComponent?.powerpagecomponentid ?? ''; + // update + const next = { ...component }; + const pageContent = JSON.parse(next.content); + pageContent.copy = pageCopy; + next.content = JSON.stringify(pageContent); + this.updateComponent(next); + } else { + // Fetch all the dependencies + let displayOrder = this.findComponents( + (c) => c.powerpagecomponenttype === PowerPagesComponentType.WebPage && JSON.parse(c.content).isroot + ) + ?.map((c) => JSON.parse(c.content).displayorder) + .filter((d) => d ?? false) + .sort() + .pop(); + const homeRootPage = this.getHomeRootPage(); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain + const homeRootPageContent = JSON.parse(homeRootPage?.content!); + const publishingStateId = this.getPublishingStateId(); + const pageTemplate = this.findComponent( + (c) => + c.powerpagecomponenttype === PowerPagesComponentType.PageTemplate && + c.name === 'Default studio template' + ); + const homeWebLink = this.findComponent( + (c) => + c.powerpagecomponenttype === PowerPagesComponentType.WebLink && + JSON.parse(c.content).pageid === homeRootPage?.powerpagecomponentid + ); + + // Add root page + rootPageID = uuidv4(); + const rootPageComponent = { + powerpagecomponentid: rootPageID, + powerpagesiteid: this.siteData.powerpagesite[0].powerpagesiteid, + name: pageName, + powerpagecomponenttype: PowerPagesComponentType.WebPage, + content: JSON.stringify({ + displayorder: ++displayOrder, + ...BASE_PAGE, + isroot: true, + feedbackpolicy: homeRootPageContent.feedbackpolicy, + pagetemplateid: pageTemplate?.powerpagecomponentid, + partialurl: pageName.toLowerCase().split(' ').join('-'), + publishingstateid: publishingStateId, + parentpageid: homeRootPage?.powerpagecomponentid, + }), + }; + const componentsToAdd = [rootPageComponent]; + + // Add content page + const contentPageComponent = { + powerpagecomponentid: uuidv4(), + powerpagesiteid: this.siteData.powerpagesite[0].powerpagesiteid, + name: pageName, + powerpagecomponenttype: PowerPagesComponentType.WebPage, + powerpagesitelanguageid: this.siteData.powerpagesitelanguage[0].powerpagesitelanguageid, + content: JSON.stringify({ + copy: pageCopy, + ...BASE_PAGE, + isroot: false, + rootwebpageid: rootPageComponent.powerpagecomponentid, + pagetemplateid: pageTemplate?.powerpagecomponentid, + partialurl: pageName.toLowerCase().split(' ').join('-'), + publishingstateid: publishingStateId, + parentpageid: homeRootPage?.powerpagecomponentid, + }), + }; + componentsToAdd.push(contentPageComponent); + + // Add site marker + componentsToAdd.push({ + powerpagecomponentid: uuidv4(), + powerpagesiteid: this.siteData.powerpagesite[0].powerpagesiteid, + name: pageName, + powerpagecomponenttype: PowerPagesComponentType.SiteMarker, + content: JSON.stringify({ + pageid: rootPageComponent.powerpagecomponentid, + }), + }); + + // Add web link + if (homeWebLink !== undefined) { + componentsToAdd.push({ + powerpagecomponentid: uuidv4(), + powerpagesiteid: this.siteData.powerpagesite[0].powerpagesiteid, + name: pageName, + powerpagecomponenttype: PowerPagesComponentType.WebLink, + content: JSON.stringify({ + disablepagevalidation: false, + displayimageonly: false, + displayorder: displayOrder, + displaypagechildlinks: false, + openinnewwindow: false, + pageid: rootPageComponent.powerpagecomponentid, + publishingstateid: publishingStateId, + robotsfollowlink: true, + weblinksetid: JSON.parse(homeWebLink.content).weblinksetid, + }), + }); + } + this.addComponents(componentsToAdd); + } + return rootPageID; + } + private getWebPageRootId(pageName: string): string { + const webPageRoot = this.findComponent( + (c) => + c.powerpagecomponenttype === PowerPagesComponentType.WebPage && + c.name === pageName && + c.powerpagesitelanguageid !== undefined + ); + return webPageRoot?.powerpagecomponentid ?? ''; + } + + private addWebRole(roleName: string, webRoleContent: object): string { + const webRoleId = uuidv4(); + const webRole = { + powerpagecomponentid: webRoleId, + powerpagesiteid: this.siteData.powerpagesite[0].powerpagesiteid, + name: roleName, + powerpagecomponenttype: PowerPagesComponentType.WebRole, + content: JSON.stringify(webRoleContent), + }; + this.addComponents([webRole]); + return webRoleId; + } + + private save = async () => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [siteAndLanguages, components, fileComponents] = this.getBatchAndFileUploads(); + + //const optionalHeaders = { 'x-ms-ppages-options': 'skipDependencyChecker=true;' } + + const orgUrl = 'https://org06ff0f46.crm10.dynamics.com/'; + + const dataverseToken = (await dataverseAuthentication(this.telemetry, orgUrl ?? '', true)).accessToken; + + const fetchOptions = (operation: any) => ({ + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${dataverseToken}`, + }, + body: operation.body, + }); + + try { + // Process siteAndLanguages operations + for (const operation of siteAndLanguages) { + const response = await fetch(operation.url, fetchOptions(operation)); + console.log('Site and languages operation:', response); + } + + // Process components operations + for (const operation of components) { + console.log('Components operation:', operation.body); + const compResponse = await fetch(operation.url, fetchOptions(operation)); + console.log('Components operation:', compResponse.json()); + } + + if (fileComponents.length > 0) { + await Promise.all( + fileComponents.map(async (f) => { + const response = await fetch( + getCDSEntityRequestURL({ + entityName: entityNames.PowerPagesComponents, + entityId: f.powerpagecomponentid, + additionalPathTokens: ['filecontent'], + }), + { + method: 'PATCH', + headers: getFileUploadHeaders(f.name, dataverseToken), + body: base64ToArrayBuffer(f.filecontent!), + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.log('File component operation response:', response.json()); + throw new Error(`HTTP error! status: ${response.status}, response: ${errorText}`); + } + + }) + ); + } + } catch (error) { + console.error('Error during save operation:', error); + } + }; + + // Method to expose site data and actions + public getSiteDataAndActions(): { + ppSiteData: PowerPagesParsedJson; + actions: IPowerPagesSiteFromJsonActions; + } { + return { + ppSiteData: this.siteData, + actions: { + updateSiteName: (name: string) => this.updateSiteName(name), + addComponents: (components: PowerPagesComponent[]) => this.addComponents(components), + updateComponent: (component: PowerPagesComponent) => this.updateComponent(component), + findComponents: ( + filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean + ) => this.findComponents(filter), + findComponent: ( + filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean + ) => this.findComponent(filter), + addOrUpdatePage: (pageName: string, pageCopy: string, isHomePage: boolean) => + this.addOrUpdatePage(pageName, pageCopy, isHomePage), + getWebPageRootId: (pageName: string) => this.getWebPageRootId(pageName) ?? '', + addWebRole: (roleName: string, webRoleContent: object) => this.addWebRole(roleName, webRoleContent), + save: this.save, + } + }; + } +} From e9b31e6ff09bd2a830372b1c29b553cf80e03a51 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 22 Nov 2024 14:51:59 +0530 Subject: [PATCH 19/28] Enhance CreateSiteHelper and CreateSiteManager to accept orgUrl parameter for API calls --- .../commands/create-site/CreateSiteManager.ts | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts index 32c3c513..07224b8d 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts @@ -23,14 +23,14 @@ export interface IPowerPagesSiteFromJsonActions { updateComponent: (component: PowerPagesComponent) => void; findComponents: ( filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean - ) => PowerPagesComponent[] | undefined; + ) => PowerPagesComponent[]; findComponent: ( filter: (value: PowerPagesComponent, index: number, obj: PowerPagesComponent[]) => boolean ) => PowerPagesComponent | undefined; addOrUpdatePage: (pageName: string, pageCopy: string, isHomePage: boolean) => Promise; getWebPageRootId: (pageName: string) => string; addWebRole: (roleName: string, webRoleContent: object) => string; - save: () => Promise; + save: (orgUrl: string) => Promise; } /** @@ -69,7 +69,7 @@ export class PowerPagesSiteManager { this.siteData = reGuidPowerPagesSite(ppJsonBlob as PowerPagesParsedJson); } - private getBatchAndFileUploads(): [ + private getBatchAndFileUploads(orgUrl: string): [ any, any, PowerPagesComponent[] @@ -81,7 +81,7 @@ export class PowerPagesSiteManager { siteAndLanguages.push({ method: 'POST', - url: 'https://org06ff0f46.crm10.dynamics.com/api/data/v9.2/powerpagesites', + url: orgUrl + 'api/data/v9.2/powerpagesites', headers: { 'Content-Type': 'application/json; type=entry', }, @@ -97,7 +97,7 @@ export class PowerPagesSiteManager { delete entity.powerpagesiteid; siteAndLanguages.push({ method: 'POST', - url: 'https://org06ff0f46.crm10.dynamics.com/api/data/v9.2/powerpagesitelanguages', + url: orgUrl + 'api/data/v9.2/powerpagesitelanguages', headers: { 'Content-Type': 'application/json; type=entry', }, @@ -124,7 +124,7 @@ export class PowerPagesSiteManager { delete entity.filecontent; operations.push({ method: 'POST', - url: 'https://org06ff0f46.crm10.dynamics.com/api/data/v9.2/powerpagecomponents', + url: orgUrl + 'api/data/v9.2/powerpagecomponents', headers: { 'Content-Type': 'application/json; type=entry', }, @@ -184,7 +184,6 @@ export class PowerPagesSiteManager { private getHomeRootPage(): PowerPagesComponent | undefined { // Get the Home root (metadata) page. - // All templates should have a SiteMarker with the same name of 'Home'. // Use this component to obtain the pageid. const siteMarker = this.findComponent( @@ -270,7 +269,10 @@ export class PowerPagesSiteManager { .pop(); const homeRootPage = this.getHomeRootPage(); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain - const homeRootPageContent = JSON.parse(homeRootPage?.content!); + if (!homeRootPage) { + throw new Error('Home root page not found'); + } + const homeRootPageContent = JSON.parse(homeRootPage.content); const publishingStateId = this.getPublishingStateId(); const pageTemplate = this.findComponent( (c) => @@ -381,15 +383,14 @@ export class PowerPagesSiteManager { return webRoleId; } - private save = async () => { + private save = async (orgUrl: string) => { // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [siteAndLanguages, components, fileComponents] = this.getBatchAndFileUploads(); + const [siteAndLanguages, components, fileComponents] = this.getBatchAndFileUploads(orgUrl); //const optionalHeaders = { 'x-ms-ppages-options': 'skipDependencyChecker=true;' } - const orgUrl = 'https://org06ff0f46.crm10.dynamics.com/'; - - const dataverseToken = (await dataverseAuthentication(this.telemetry, orgUrl ?? '', true)).accessToken; + // cspell:ignore dataverse + const dataverseToken = (await dataverseAuthentication(this.telemetry, orgUrl, true)).accessToken; const fetchOptions = (operation: any) => ({ method: 'POST', @@ -408,11 +409,11 @@ export class PowerPagesSiteManager { } // Process components operations - for (const operation of components) { - console.log('Components operation:', operation.body); - const compResponse = await fetch(operation.url, fetchOptions(operation)); - console.log('Components operation:', compResponse.json()); - } + // for (const operation of components) { + // console.log('Components operation:', operation.body); + // console.log('Components operation:', await compResponse.json()); + // console.log('Components operation:', compResponse.json()); + // } if (fileComponents.length > 0) { await Promise.all( @@ -432,7 +433,7 @@ export class PowerPagesSiteManager { if (!response.ok) { const errorText = await response.text(); - console.log('File component operation response:', response.json()); + console.log('File component operation response:', await response.json()); throw new Error(`HTTP error! status: ${response.status}, response: ${errorText}`); } @@ -463,9 +464,9 @@ export class PowerPagesSiteManager { ) => this.findComponent(filter), addOrUpdatePage: (pageName: string, pageCopy: string, isHomePage: boolean) => this.addOrUpdatePage(pageName, pageCopy, isHomePage), - getWebPageRootId: (pageName: string) => this.getWebPageRootId(pageName) ?? '', + getWebPageRootId: (pageName: string) => this.getWebPageRootId(pageName), addWebRole: (roleName: string, webRoleContent: object) => this.addWebRole(roleName, webRoleContent), - save: this.save, + save: (orgUrl: string) => this.save(orgUrl), } }; } From 3bd245d655028b63d663d0349d96aa879ec92713 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 29 Nov 2024 11:24:53 +0530 Subject: [PATCH 20/28] Remove copyright comment from CreateSiteConstants.ts --- .../powerpages/commands/create-site/CreateSiteConstants.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts index e3f0c157..b3f30c91 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -14,10 +14,6 @@ export const SITE_NAME_REQUIRED = 'Site Name is required'; export const CREATE_SITE_BTN_CMD = 'create-site-inputs'; export const CREATE_SITE_BTN_TITLE = 'Create Site'; export const CREATE_SITE_BTN_TOOLTIP = 'Create a new Power Pages site'; -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - */ export enum PresetThemeIds { ORANGE = '329a43fa-5471-4678-8330-d3a0b404e9bb', From e47e0e2e59cddac09b78b521de4e59e99a702582 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 29 Nov 2024 17:58:57 +0530 Subject: [PATCH 21/28] Add HTTP methods constants and refactor CreateSiteUtils for HTTP request options --- ...rPagesChatParticipantTelemetryConstants.ts | 13 + .../PowerPagesChatParticipantUtils.ts | 17 +- .../create-site/CreateSiteConstants.ts | 11 +- .../commands/create-site/CreateSiteHelper.ts | 85 +++++- .../commands/create-site/CreateSiteManager.ts | 252 ++++++++++-------- .../commands/create-site/CreateSiteModel.ts | 52 ++++ .../commands/create-site/CreateSiteTypes.ts | 44 --- .../commands/create-site/CreateSiteUtils.ts | 14 +- src/common/constants.ts | 7 + 9 files changed, 321 insertions(+), 174 deletions(-) delete mode 100644 src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts index 8138f979..1db3a8b8 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantTelemetryConstants.ts @@ -27,3 +27,16 @@ export const VSCODE_EXTENSION_NL2PAGE_REQUEST = 'VSCodeExtensionNL2PageRequest'; export const VSCODE_EXTENSION_NL2SITE_REQUEST = 'VSCodeExtensionNL2SiteRequest'; export const VSCODE_EXTENSION_PREVIEW_SITE_PAGES = 'VSCodeExtensionPreviewSitePages'; export const VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR = 'VSCodeExtensionPreviewSitePagesError'; +export const VSCODE_EXTENSION_POPULATE_SITE_RECORDS_START = 'VSCodeExtensionPopulateSiteRecordsStart'; +export const VSCODE_EXTENSION_POPULATE_SITE_RECORDS_SUCCESS = 'VSCodeExtensionPopulateSiteRecordsSuccess'; +export const VSCODE_EXTENSION_POPULATE_SITE_RECORDS_ERROR = 'VSCodeExtensionPopulateSiteRecordsError'; +export const VSCODE_EXTENSION_CREATE_SITE_SAVE_OPERATION_ERROR = 'VSCodeExtensionCreateSiteSaveOperationError'; +export const VSCODE_EXTENSION_CREATE_SITE_OPERATION_ERROR = 'VSCodeExtensionCreateSiteOperationError'; +export const VSCODE_EXTENSION_CREATE_SITE_OPERATION_SUCCESS = 'VSCodeExtensionCreateSiteOperationSuccess'; +export const VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_ERROR = 'VSCodeExtensionCreateSiteComponentOperationError'; +export const VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_SUCCESS = 'VSCodeExtensionCreateSiteComponentOperationSuccess'; +export const VSCODE_EXTENSION_CREATE_SITE_COMPONENT_PROCESSING_ERROR = 'VSCodeExtensionCreateSiteComponentProcessingError'; +export const VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_ERROR = 'VSCodeExtensionCreateSiteFileComponentOperationError'; +export const VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_SUCCESS = 'VSCodeExtensionCreateSiteFileComponentOperationSuccess'; +export const VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_PROCESSING_ERROR = 'VSCodeExtensionCreateSiteFileComponentProcessingError'; + diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts index 1219039f..c7e8539a 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts @@ -11,9 +11,9 @@ import { ITelemetry } from "../../OneDSLoggerTelemetry/telemetry/ITelemetry"; import { ArtemisService } from "../../services/ArtemisService"; import { dataverseAuthentication } from "../../services/AuthenticationProvider"; import { IIntelligenceAPIEndpointInformation } from "../../services/Interfaces"; -import { EditableFileSystemProvider } from "../../utilities/EditableFileSystemProvider"; import { CREATE_SITE_BTN_CMD } from "./commands/create-site/CreateSiteConstants"; -import { collectSiteCreationInputs, getUpdatedPageContent } from "./commands/create-site/CreateSiteHelper"; +import { collectSiteCreationInputs, getUpdatedPageContent, populateSiteRecords } from "./commands/create-site/CreateSiteHelper"; +import { ICreateSiteCommandArgs } from "./commands/create-site/CreateSiteModel"; import { SUPPORTED_ENTITIES, EXPLAIN_CODE_PROMPT, FORM_PROMPT, LIST_PROMPT, STATER_PROMPTS, WEB_API_PROMPT } from "./PowerPagesChatParticipantConstants"; import { VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SCENARIO_FEEDBACK_THUMBSUP, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SCENARIO_FEEDBACK_THUMBSDOWN } from "./PowerPagesChatParticipantTelemetryConstants"; import { IComponentInfo, IPowerPagesChatResult } from "./PowerPagesChatParticipantTypes"; @@ -132,16 +132,21 @@ export function removeChatVariables(userPrompt: string): string { } export function registerButtonCommands() { - vscode.commands.registerCommand(CREATE_SITE_BTN_CMD, async (siteName: string, sitePages, envList, contentProvider: EditableFileSystemProvider, isCreateSiteInputsReceived) => { + vscode.commands.registerCommand(CREATE_SITE_BTN_CMD, async ({ siteName, sitePages, sitePagesList, envList, contentProvider, telemetry, isCreateSiteInputsReceived }: ICreateSiteCommandArgs) => { if (!isCreateSiteInputsReceived) { - //Update Page Content will be used for the site creation - sitePages.map((page: any) => { + // Update Page Content will be used for the site creation + const updatedPages = sitePages.map((page: any) => { return { ...page, code: getUpdatedPageContent(contentProvider, page.metadata.pageTitle) - } + }; }); + const siteCreateInputs = await collectSiteCreationInputs(siteName, envList); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const siteManager = await populateSiteRecords(siteName, sitePagesList, updatedPages, siteCreateInputs.OrgUrl, telemetry); + if (siteCreateInputs) { isCreateSiteInputsReceived = true; } diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts index b3f30c91..a249b6c1 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -14,6 +14,7 @@ export const SITE_NAME_REQUIRED = 'Site Name is required'; export const CREATE_SITE_BTN_CMD = 'create-site-inputs'; export const CREATE_SITE_BTN_TITLE = 'Create Site'; export const CREATE_SITE_BTN_TOOLTIP = 'Create a new Power Pages site'; +export const INVALIDE_PAGE_CONTENT = 'Invalid page content'; export enum PresetThemeIds { ORANGE = '329a43fa-5471-4678-8330-d3a0b404e9bb', @@ -40,8 +41,14 @@ export const BASE_PAGE = { sharedpageconfiguration: false, }; -export const CDS_BASE_URL = 'https://org06ff0f46.crm10.dynamics.com'; // This is a placeholder URL -export const CDS_URL_PREFIX = '/api/data'; +export const CDS_BASE_URL = 'https://cds-org'; // Replace with actual CDS URL in calling code +export const CDS_URL_PREFIX = 'api/data'; export const CDS_API_BASE_URL = `${CDS_BASE_URL}${CDS_URL_PREFIX}`; export const CDS_API_VERSION = 'v9.2'; export const CDS_API_VERSION_9_2 = `${CDS_API_BASE_URL}/${CDS_API_VERSION}`; +export const API_VERSION = 'v9.2'; +export const CONTENT_TYPE_JSON = 'application/json; type=entry'; +export const HOME_SITE_MARKER_NAME = 'Home'; +export const PUBLISHED_STATE_NAME = 'Published'; +export const DEFAULT_TEMPLATE_NAME = 'Default studio template'; +export const BLANK_TEMPLATE_NAME = 'BlankTemplate'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index e6f12cbb..cf366210 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -9,14 +9,14 @@ import { getNL2PageData } from './Nl2PageService'; import { getNL2SiteData } from './Nl2SiteService'; import { NL2SITE_REQUEST_FAILED, NL2PAGE_GENERATING_WEBPAGES, NL2PAGE_RESPONSE_FAILED } from '../../PowerPagesChatParticipantConstants'; import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; -import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST, VSCODE_EXTENSION_PREVIEW_SITE_PAGES, VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR } from '../../PowerPagesChatParticipantTelemetryConstants'; +import { VSCODE_EXTENSION_NL2PAGE_REQUEST, VSCODE_EXTENSION_NL2SITE_REQUEST, VSCODE_EXTENSION_POPULATE_SITE_RECORDS_ERROR, VSCODE_EXTENSION_POPULATE_SITE_RECORDS_START, VSCODE_EXTENSION_POPULATE_SITE_RECORDS_SUCCESS, VSCODE_EXTENSION_PREVIEW_SITE_PAGES, VSCODE_EXTENSION_PREVIEW_SITE_PAGES_ERROR } from '../../PowerPagesChatParticipantTelemetryConstants'; import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSystemProvider'; import { HTML_FILE_EXTENSION, IEnvInfo, UTF8_ENCODING } from '../../../../constants'; -import { CREATE_SITE_BTN_CMD, CREATE_SITE_BTN_TITLE, CREATE_SITE_BTN_TOOLTIP, EDITABLE_SCHEME, ENVIRONMENT_FOR_SITE_CREATION, SITE_CREATE_INPUTS, SITE_NAME, SITE_NAME_REQUIRED } from './CreateSiteConstants'; -import { ICreateSiteOptions, IPreviewSitePagesContentOptions, ISiteInputState } from './CreateSiteTypes'; +import { BLANK_TEMPLATE_NAME, CREATE_SITE_BTN_CMD, CREATE_SITE_BTN_TITLE, CREATE_SITE_BTN_TOOLTIP, EDITABLE_SCHEME, ENGLISH, ENVIRONMENT_FOR_SITE_CREATION, INVALIDE_PAGE_CONTENT, SITE_CREATE_INPUTS, SITE_NAME, SITE_NAME_REQUIRED } from './CreateSiteConstants'; import { MultiStepInput } from '../../../../utilities/MultiStepInput'; import { getEnvList } from '../../../../utilities/Utils'; import { PowerPagesSiteManager } from './CreateSiteManager'; +import { ICreateSiteCommandArgs, ICreateSiteOptions, IPreviewSitePagesContentOptions, ISiteInputState } from './CreateSiteModel'; export const createSite = async (createSiteOptions: ICreateSiteOptions) => { const { @@ -35,19 +35,29 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { if (!intelligenceAPIEndpointInfo.intelligenceEndpoint) { return; } - const { siteName, siteDescription, sitePages } = await fetchSiteAndPageData(intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); + const { siteName, siteDescription, sitePages, sitePagesList } = await fetchSiteAndPageData(intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); // eslint-disable-next-line @typescript-eslint/no-unused-vars const contentProvider = previewSitePagesContent({ sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId }); const envList = await getEnvList(telemetry, intelligenceAPIEndpointInfo.endpointStamp) + const args: ICreateSiteCommandArgs = { + siteName, + sitePages, + sitePagesList, + envList, + contentProvider, + telemetry, + isCreateSiteInputsReceived: false + }; + stream.button({ command: CREATE_SITE_BTN_CMD, title: CREATE_SITE_BTN_TITLE, tooltip: CREATE_SITE_BTN_TOOLTIP, - arguments: [siteName, envList, contentProvider, false], - }) + arguments: [args], + }); return { siteName, @@ -119,6 +129,7 @@ function previewSitePagesContent( }); telemetry.sendTelemetryEvent(VSCODE_EXTENSION_PREVIEW_SITE_PAGES, { sessionId, orgId, environmentId: envId, userId }); + oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_PREVIEW_SITE_PAGES, { sessionId, orgId, environmentId: envId, userId }); stream.filetree(sitePagesFolder, baseUri); @@ -190,3 +201,65 @@ export async function collectSiteCreationInputs(siteName: string, envList: IEnvI return siteInputState; } + +export async function populateSiteRecords(siteName: string, sitePagesList: string[], sitePages: any, orgUrl: string, telemetry: ITelemetry) { + return vscode.window.withProgress({ + location: vscode.ProgressLocation.Notification, + title: vscode.l10n.t('Creating Site Records'), + cancellable: false + }, async (progress) => { + try { + telemetry.sendTelemetryEvent(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_START , { siteName, orgUrl }); + oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_START , { siteName, orgUrl }); + + progress.report({ message: vscode.l10n.t('Initializing site manager...') }); + + // Create a map of sitePagesList and sitePages + const sitePagesMap = createSitePagesMap(sitePagesList, sitePages); + + // Initialize PowerPagesSiteManager + const siteManager = new PowerPagesSiteManager(BLANK_TEMPLATE_NAME, ENGLISH, telemetry); + + // Load the template + await siteManager.loadTemplate(); + const { actions } = siteManager.getSiteDataAndActions(); + actions.updateSiteName(siteName); + + await processSitePages(sitePagesMap, siteManager); + + // Save the site + progress.report({ message: vscode.l10n.t('Saving site...') }); + await actions.save(orgUrl); + + telemetry.sendTelemetryEvent(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_SUCCESS, { siteName, orgUrl }); + oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_SUCCESS, { siteName, orgUrl }); + + return siteManager; + } catch (error) { + telemetry.sendTelemetryEvent(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_ERROR, { siteName, orgUrl, error: (error as Error).message }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_ERROR, (error as Error).message, error as Error, { siteName, orgUrl }, {}); + throw error; + } + }); +} + + +function createSitePagesMap(sitePagesList: string[], sitePages: any): Record { + return sitePagesList.reduce((acc: Record, pageName: string, index: number) => { + acc[pageName] = sitePages[index]; + return acc; + }, {}); +} + + +async function processSitePages(sitePagesMap: Record, siteManager: PowerPagesSiteManager): Promise { + const { actions } = siteManager.getSiteDataAndActions(); + const promises = Object.entries(sitePagesMap).map(([pageName, pageContent]) => { + if (typeof pageContent === 'object' && pageContent !== null && 'code' in pageContent) { + return actions.addOrUpdatePage(pageName, (pageContent as { code: string }).code, pageName === 'Home'); + } else { + throw new Error(`${INVALIDE_PAGE_CONTENT}: ${pageName}`); + } + }); + await Promise.all(promises); +} diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts index 07224b8d..6fbe1e16 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteManager.ts @@ -10,12 +10,14 @@ import { v4 as uuidv4 } from 'uuid'; import { ITelemetry } from '../../../../OneDSLoggerTelemetry/telemetry/ITelemetry'; import { dataverseAuthentication } from '../../../../services/AuthenticationProvider'; -import { BASE_PAGE } from './CreateSiteConstants'; import { PowerPagesComponent, PowerPagesParsedJson, PowerPagesComponentType } from './CreateSiteModel'; -import { reGuidPowerPagesSite, getCDSEntityRequestURL, getFileUploadHeaders, base64ToArrayBuffer } from './CreateSiteUtils'; +import { reGuidPowerPagesSite, getCDSEntityRequestURL, getFileUploadHeaders, base64ToArrayBuffer, createHttpRequestOptions } from './CreateSiteUtils'; import { nl2SiteJson } from './site-templates/Nl2Site'; import * as entityNames from "./SiteEntityNames"; - +import { API_VERSION, BASE_PAGE, CDS_API_VERSION, CDS_BASE_URL, CDS_URL_PREFIX, DEFAULT_TEMPLATE_NAME, HOME_SITE_MARKER_NAME, PUBLISHED_STATE_NAME } from './CreateSiteConstants'; +import { oneDSLoggerWrapper } from '../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; +import { HTTP_METHODS } from '../../../../constants'; +import { VSCODE_EXTENSION_CREATE_SITE_SAVE_OPERATION_ERROR, VSCODE_EXTENSION_CREATE_SITE_OPERATION_ERROR, VSCODE_EXTENSION_CREATE_SITE_OPERATION_SUCCESS, VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_ERROR, VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_SUCCESS, VSCODE_EXTENSION_CREATE_SITE_COMPONENT_PROCESSING_ERROR, VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_ERROR, VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_SUCCESS, VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_PROCESSING_ERROR } from '../../PowerPagesChatParticipantTelemetryConstants'; export interface IPowerPagesSiteFromJsonActions { updateSiteName: (name: string) => void; @@ -33,21 +35,12 @@ export interface IPowerPagesSiteFromJsonActions { save: (orgUrl: string) => Promise; } -/** - * This function allows you to initialize a blank template and mutate the various entities in memory before writing them to - * dataverse. Currently this function only supports provisioning but could potentially be updated to send upserts instead of - * inserts. That would also help with retrying failed requests. - * @param {string} templateName Template to start from. Could potentially be used to start with a template other than - * Blank. - * @param {string} language The language code to provision in. Only 1033 is supported currently - * @returns site data and actions to allow the caller to mutate site data - */ - export class PowerPagesSiteManager { private siteData: PowerPagesParsedJson; - private templateName: string; - private language: string; private telemetry: ITelemetry; + // Add for multiple language & template support + // private templateName: string; + // private language: string; constructor(templateName: string, language: string, telemetry: ITelemetry) { this.siteData = { @@ -55,59 +48,58 @@ export class PowerPagesSiteManager { powerpagesite: [], powerpagesitelanguage: [], }; - this.templateName = templateName; - this.language = language; this.telemetry = telemetry; } // Function to fetch and load the template data public async loadTemplate(): Promise { - //const languageCode = 1033 //Only English is supported for now - const ppJsonBlob = nl2SiteJson; - this.siteData = reGuidPowerPagesSite(ppJsonBlob as PowerPagesParsedJson); } - private getBatchAndFileUploads(orgUrl: string): [ - any, - any, - PowerPagesComponent[] - ] { - // We need site and language to already be created before creating other components in a batch - const data = this.siteData; - const siteAndLanguages = []; + private getBatchAndFileUploads(orgUrl: string): [any[], any[], PowerPagesComponent[]] { + const siteAndLanguages: any[] = []; const operations: any[] = []; + const filesToUpload: PowerPagesComponent[] = []; - siteAndLanguages.push({ - method: 'POST', - url: orgUrl + 'api/data/v9.2/powerpagesites', - headers: { - 'Content-Type': 'application/json; type=entry', - }, - body: JSON.stringify(data.powerpagesite[0]), - }); + // Add site and languages + this.addSiteAndLanguages(orgUrl, siteAndLanguages); + + // Add components + this.addComponentsToOperations(orgUrl, operations, filesToUpload); + + return [siteAndLanguages, operations, filesToUpload]; + } + + /** + * Adds site and language data to the provided array for batch processing. + * @param orgUrl - The organization URL. + * @param siteAndLanguages - The array to which site and language data will be added. Each element is an HTTP request option object. + */ + private addSiteAndLanguages(orgUrl: string, siteAndLanguages: any[]): void { + const data = this.siteData; + + const siteUrl = `${orgUrl}${CDS_URL_PREFIX}/${CDS_API_VERSION}/powerpagesites`; + siteAndLanguages.push( + createHttpRequestOptions(HTTP_METHODS.POST, siteUrl, data.powerpagesite[0]) + ); - // Languages data.powerpagesitelanguage.forEach((ppSiteLang) => { const entity = { ...ppSiteLang, [`powerpagesiteid@odata.bind`]: `/${entityNames.PowerPagesSites}(${ppSiteLang.powerpagesiteid!})`, }; delete entity.powerpagesiteid; - siteAndLanguages.push({ - method: 'POST', - url: orgUrl + 'api/data/v9.2/powerpagesitelanguages', - headers: { - 'Content-Type': 'application/json; type=entry', - }, - body: JSON.stringify(entity), - }); + const languageUrl = `${orgUrl}${CDS_URL_PREFIX}/${API_VERSION}/powerpagesitelanguages`; + siteAndLanguages.push( + createHttpRequestOptions(HTTP_METHODS.POST, languageUrl, entity) + ); }); + } - const filesToUpload: PowerPagesComponent[] = []; + private addComponentsToOperations(orgUrl: string, operations: any[], filesToUpload: PowerPagesComponent[]): void { + const data = this.siteData; - // Components data.powerpagecomponent.forEach((component) => { if (component.powerpagecomponenttype === PowerPagesComponentType.WebFile && component.filecontent) { filesToUpload.push(component); @@ -122,17 +114,11 @@ export class PowerPagesSiteManager { delete entity.powerpagesiteid; delete entity.powerpagesitelanguageid; delete entity.filecontent; - operations.push({ - method: 'POST', - url: orgUrl + 'api/data/v9.2/powerpagecomponents', - headers: { - 'Content-Type': 'application/json; type=entry', - }, - body: JSON.stringify(entity), - }); + const componentUrl = `${orgUrl}${CDS_URL_PREFIX}/${API_VERSION}/powerpagecomponents`; + operations.push( + createHttpRequestOptions(HTTP_METHODS.POST, componentUrl, entity) + ); }); - - return [siteAndLanguages, operations, filesToUpload]; } private findComponent( @@ -141,16 +127,8 @@ export class PowerPagesSiteManager { return this.siteData.powerpagecomponent.find(filter); } - /** -* Gets parent page id -* @returns {string} Parent page id -*/ - private updateSiteName(name: string): void { this.siteData.powerpagesite[0].name = name; - // The snippet named 'Site name' is hardcoded to the value 'Company name' in the template JSON. - // Assign the real site name so that the Header reflects site name. - // Find the index of the 'site name' snippet in the draft const snippetIndex = this.siteData.powerpagecomponent.findIndex( (c) => c.powerpagecomponenttype === PowerPagesComponentType.ContentSnippet && @@ -165,8 +143,9 @@ export class PowerPagesSiteManager { } private addComponents(components: PowerPagesComponent[]): void { - this.siteData.powerpagecomponent = this.siteData.powerpagecomponent.concat(components); + this.siteData.powerpagecomponent = [...this.siteData.powerpagecomponent, ...components]; } + private updateComponent(component: PowerPagesComponent): void { const index = this.siteData.powerpagecomponent.findIndex( (c) => c.powerpagecomponentid === component.powerpagecomponentid @@ -182,12 +161,17 @@ export class PowerPagesSiteManager { return this.siteData.powerpagecomponent.filter(filter); } + /** + * Retrieves the home root page component. + * The method first finds the site marker component with the name 'HOME_SITE_MARKER_NAME'. + * It then parses the content of the site marker to get the page ID. + * Finally, it finds and returns the home root page component using the page ID. + * + * @returns {PowerPagesComponent | undefined} The home root page component or undefined if not found. + */ private getHomeRootPage(): PowerPagesComponent | undefined { - // Get the Home root (metadata) page. - // All templates should have a SiteMarker with the same name of 'Home'. - // Use this component to obtain the pageid. const siteMarker = this.findComponent( - (c) => c.powerpagecomponenttype === PowerPagesComponentType.SiteMarker && c.name === 'Home' + (c) => c.powerpagecomponenttype === PowerPagesComponentType.SiteMarker && c.name === HOME_SITE_MARKER_NAME ); const pageId = siteMarker ? JSON.parse(siteMarker.content).pageid : undefined; @@ -195,7 +179,6 @@ export class PowerPagesSiteManager { return undefined; } - // Find the Home root (metadata) page. Ensure it is the root component. const homeRootPage = this.findComponent( (c) => c.powerpagecomponenttype === PowerPagesComponentType.WebPage && @@ -206,9 +189,6 @@ export class PowerPagesSiteManager { } private getHomePage(): PowerPagesComponent | undefined { - // To get the home page, we first need to get the root page. - // We then use the root page to obtain the correct home page. - // The name of the component will differ per locale, which is why we can't use the literal 'Home'. const homeRootPage = this.getHomeRootPage(); if (!homeRootPage) { return undefined; @@ -222,13 +202,9 @@ export class PowerPagesSiteManager { return homePage; } - /** - * Gets publishing state id - * @returns {string} Publishing state id - */ private getPublishingStateId(): string | undefined { const publishingState = this.findComponent( - (c) => c.powerpagecomponenttype === PowerPagesComponentType.PublishingState && c.name === 'Published' + (c) => c.powerpagecomponenttype === PowerPagesComponentType.PublishingState && c.name === PUBLISHED_STATE_NAME ); return publishingState?.powerpagecomponentid; } @@ -252,14 +228,12 @@ export class PowerPagesSiteManager { (c) => c.powerpagecomponentid === JSON.parse(component.content).rootwebpageid ); rootPageID = rootComponent?.powerpagecomponentid ?? ''; - // update const next = { ...component }; const pageContent = JSON.parse(next.content); pageContent.copy = pageCopy; next.content = JSON.stringify(pageContent); this.updateComponent(next); } else { - // Fetch all the dependencies let displayOrder = this.findComponents( (c) => c.powerpagecomponenttype === PowerPagesComponentType.WebPage && JSON.parse(c.content).isroot ) @@ -268,7 +242,6 @@ export class PowerPagesSiteManager { .sort() .pop(); const homeRootPage = this.getHomeRootPage(); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain if (!homeRootPage) { throw new Error('Home root page not found'); } @@ -277,7 +250,7 @@ export class PowerPagesSiteManager { const pageTemplate = this.findComponent( (c) => c.powerpagecomponenttype === PowerPagesComponentType.PageTemplate && - c.name === 'Default studio template' + c.name === DEFAULT_TEMPLATE_NAME ); const homeWebLink = this.findComponent( (c) => @@ -285,7 +258,6 @@ export class PowerPagesSiteManager { JSON.parse(c.content).pageid === homeRootPage?.powerpagecomponentid ); - // Add root page rootPageID = uuidv4(); const rootPageComponent = { powerpagecomponentid: rootPageID, @@ -305,7 +277,6 @@ export class PowerPagesSiteManager { }; const componentsToAdd = [rootPageComponent]; - // Add content page const contentPageComponent = { powerpagecomponentid: uuidv4(), powerpagesiteid: this.siteData.powerpagesite[0].powerpagesiteid, @@ -325,7 +296,6 @@ export class PowerPagesSiteManager { }; componentsToAdd.push(contentPageComponent); - // Add site marker componentsToAdd.push({ powerpagecomponentid: uuidv4(), powerpagesiteid: this.siteData.powerpagesite[0].powerpagesiteid, @@ -336,7 +306,6 @@ export class PowerPagesSiteManager { }), }); - // Add web link if (homeWebLink !== undefined) { componentsToAdd.push({ powerpagecomponentid: uuidv4(), @@ -360,6 +329,7 @@ export class PowerPagesSiteManager { } return rootPageID; } + private getWebPageRootId(pageName: string): string { const webPageRoot = this.findComponent( (c) => @@ -383,17 +353,16 @@ export class PowerPagesSiteManager { return webRoleId; } - private save = async (orgUrl: string) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars + private async save(orgUrl: string): Promise { + // Get the batch and file uploads const [siteAndLanguages, components, fileComponents] = this.getBatchAndFileUploads(orgUrl); - //const optionalHeaders = { 'x-ms-ppages-options': 'skipDependencyChecker=true;' } - - // cspell:ignore dataverse + // Authenticate and get the Dataverse token const dataverseToken = (await dataverseAuthentication(this.telemetry, orgUrl, true)).accessToken; + // Define fetch options for the operations const fetchOptions = (operation: any) => ({ - method: 'POST', + method: HTTP_METHODS.POST, headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${dataverseToken}`, @@ -402,30 +371,73 @@ export class PowerPagesSiteManager { }); try { - // Process siteAndLanguages operations - for (const operation of siteAndLanguages) { - const response = await fetch(operation.url, fetchOptions(operation)); - console.log('Site and languages operation:', response); + // Process site and language operations + await this.processOperations(siteAndLanguages, fetchOptions); + + // Process component operations + await this.processComponents(components, fetchOptions); + + // Process file components + await this.processFileComponents(fileComponents, dataverseToken, orgUrl); + } catch (error) { + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_SAVE_OPERATION_ERROR, { orgUrl, error: (error as Error).message }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE_SAVE_OPERATION_ERROR, (error as Error).message, error as Error, { orgUrl }, {}); + throw new Error(`Save operation failed: ${(error as Error).message}`); + } + } + private async processOperations(operations: any[], fetchOptions: (operation: any) => RequestInit): Promise { + for (const operation of operations) { + const response = await fetch(operation.url, fetchOptions(operation)); + if (!response.ok) { + const errorText = await response.text(); + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_OPERATION_ERROR, { url: operation.url, error: errorText }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE_OPERATION_ERROR, errorText, new Error(errorText), { url: operation.url }, {}); + throw new Error(`HTTP error! status: ${response.status}, response: ${errorText}`); } + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_OPERATION_SUCCESS, { url: operation.url }); + oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_CREATE_SITE_OPERATION_SUCCESS, { url: operation.url }); + } + } - // Process components operations - // for (const operation of components) { - // console.log('Components operation:', operation.body); - // console.log('Components operation:', await compResponse.json()); - // console.log('Components operation:', compResponse.json()); - // } + private async processComponents(components: any[], fetchOptions: (operation: any) => RequestInit): Promise { + for (const operation of components) { + try { + const response = await fetch(operation.url, fetchOptions(operation)); + if (!response.ok) { + const errorText = await response.text(); + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_ERROR, { url: operation.url, error: errorText }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_ERROR, errorText, new Error(errorText), { url: operation.url }, {}); + throw new Error(`HTTP error! status: ${response.status}, response: ${errorText}`); + } + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_SUCCESS, { url: operation.url }); + oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_CREATE_SITE_COMPONENT_OPERATION_SUCCESS, { url: operation.url }); + } catch (error) { + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE_COMPONENT_PROCESSING_ERROR, { error: (error as Error).message }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE_COMPONENT_PROCESSING_ERROR, (error as Error).message, error as Error, {}, {}); + throw error; + } + } + } - if (fileComponents.length > 0) { - await Promise.all( - fileComponents.map(async (f) => { + /** + * Processes file components by uploading their content to the specified organization URL. + * @param fileComponents - An array of PowerPagesComponent objects representing file components to be uploaded. + * @param dataverseToken - The authentication token for Dataverse. + * @param orgUrl - The organization URL. + */ + private async processFileComponents(fileComponents: PowerPagesComponent[], dataverseToken: string, orgUrl: string): Promise { + if (fileComponents.length > 0) { + await Promise.all( + fileComponents.map(async (f) => { + try { const response = await fetch( getCDSEntityRequestURL({ entityName: entityNames.PowerPagesComponents, entityId: f.powerpagecomponentid, additionalPathTokens: ['filecontent'], - }), + }).replace(CDS_BASE_URL, orgUrl), { - method: 'PATCH', + method: HTTP_METHODS.PATCH, headers: getFileUploadHeaders(f.name, dataverseToken), body: base64ToArrayBuffer(f.filecontent!), } @@ -433,17 +445,27 @@ export class PowerPagesSiteManager { if (!response.ok) { const errorText = await response.text(); - console.log('File component operation response:', await response.json()); + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_ERROR, { url: response.url, error: errorText }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_ERROR, errorText, new Error(errorText), { url: response.url }, {}); throw new Error(`HTTP error! status: ${response.status}, response: ${errorText}`); } - }) - ); - } - } catch (error) { - console.error('Error during save operation:', error); + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_SUCCESS, { url: response.url }); + oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_OPERATION_SUCCESS, { url: response.url }); + } catch (error) { + const errorText = (error as Error).message; + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_PROCESSING_ERROR, { error: errorText }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_PROCESSING_ERROR, errorText, error as Error, {}, {}); + throw new Error(`File component operation failed: ${errorText}`); + } + }) + ).catch((error) => { + this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_PROCESSING_ERROR, { error: (error as Error).message }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_CREATE_SITE__FILE_COMPONENT_PROCESSING_ERROR, (error as Error).message, error as Error, {}, {}); + throw error; + }); } - }; + } // Method to expose site data and actions public getSiteDataAndActions(): { diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts index f45e118b..debbd14a 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts @@ -3,6 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. */ +import { ITelemetry } from "../../../../OneDSLoggerTelemetry/telemetry/ITelemetry"; +import * as vscode from 'vscode'; +import { IIntelligenceAPIEndpointInformation } from "../../../../services/Interfaces"; +import { EditableFileSystemProvider } from "../../../../utilities/EditableFileSystemProvider"; +import { IEnvInfo } from "../../../../constants"; + export interface PowerPagesParsedJson { powerpagesite: PowerPagesSite[]; powerpagecomponent: PowerPagesComponent[]; @@ -80,3 +86,49 @@ export interface IURLParams { filecontent?: string; filename?: string; } + + export interface ICreateSiteOptions { + intelligenceAPIEndpointInfo: IIntelligenceAPIEndpointInformation; + intelligenceApiToken: string; + userPrompt: string; + sessionId: string; + stream: vscode.ChatResponseStream; + telemetry: ITelemetry; + orgId: string; + envId: string; + userId: string; + extensionContext: vscode.ExtensionContext; +} + +export interface IPreviewSitePagesContentOptions { + // siteName: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + sitePages: any[]; + stream: vscode.ChatResponseStream; + extensionContext: vscode.ExtensionContext; + telemetry: ITelemetry; + sessionId: string; + orgId: string; + envId: string; + userId: string; +} + +export interface ISiteInputState { + siteName: string; + envName: string; + OrgUrl: string; + domainName: string; + title: string; + step: number; + totalSteps: number; +} + +export interface ICreateSiteCommandArgs { + siteName: string; + sitePages: any[]; + sitePagesList: string[]; + envList: IEnvInfo[]; + contentProvider: EditableFileSystemProvider; + telemetry: ITelemetry; + isCreateSiteInputsReceived: boolean; +} diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts deleted file mode 100644 index abd42ecb..00000000 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteTypes.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - */ - -import { ITelemetry } from "../../../../OneDSLoggerTelemetry/telemetry/ITelemetry"; -import * as vscode from 'vscode'; -import { IIntelligenceAPIEndpointInformation } from "../../../../services/Interfaces"; - -export interface ICreateSiteOptions { - intelligenceAPIEndpointInfo: IIntelligenceAPIEndpointInformation; - intelligenceApiToken: string; - userPrompt: string; - sessionId: string; - stream: vscode.ChatResponseStream; - telemetry: ITelemetry; - orgId: string; - envId: string; - userId: string; - extensionContext: vscode.ExtensionContext; -} - -export interface IPreviewSitePagesContentOptions { - // siteName: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - sitePages: any[]; - stream: vscode.ChatResponseStream; - extensionContext: vscode.ExtensionContext; - telemetry: ITelemetry; - sessionId: string; - orgId: string; - envId: string; - userId: string; -} - -export interface ISiteInputState { - siteName: string; - envName: string; - OrgUrl: string; - domainName: string; - title: string; - step: number; - totalSteps: number; -} diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts index 6ba585b2..f9b64749 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts @@ -6,7 +6,7 @@ import { v4 as uuidv4 } from 'uuid'; -import { PresetThemeIds, CDS_API_BASE_URL, CDS_API_VERSION } from './CreateSiteConstants'; +import { PresetThemeIds, CDS_API_BASE_URL, CDS_API_VERSION, CONTENT_TYPE_JSON } from './CreateSiteConstants'; import { PowerPagesParsedJson, IURLParams } from './CreateSiteModel'; @@ -154,3 +154,15 @@ export const getFileUploadHeaders = (fileName: string, dataverseToken: string) = Authorization: `Bearer ${dataverseToken}` }; }; + +export function createHttpRequestOptions(method: string, url: string, body: any, headers?: Record): any { + return { + method, + url, + headers: { + 'Content-Type': CONTENT_TYPE_JSON, + ...headers, + }, + body: JSON.stringify(body), + }; +} diff --git a/src/common/constants.ts b/src/common/constants.ts index b7c36538..0aea3e37 100644 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -94,3 +94,10 @@ export const VSCODE_EXTENSION_COPILOT_CONTEXT_RELATED_FILES_FETCH_FAILED = "VSCo export const ADX_WEBPAGE = 'adx_webpage' export const HTML_FILE_EXTENSION = '.html'; export const UTF8_ENCODING = 'utf8'; +export const HTTP_METHODS = { + POST: 'POST', + PATCH: 'PATCH', + GET: 'GET', + PUT: 'PUT', + DELETE: 'DELETE' +}; From 81bf9212a8c8b407527758d237eea3f62e5d3c16 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Tue, 3 Dec 2024 11:20:53 +0530 Subject: [PATCH 22/28] Comment out websiteId in createSite return object --- .../powerpages/commands/create-site/CreateSiteHelper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index f1f1bbf4..cf366210 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -61,7 +61,7 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { return { siteName, - websiteId, + //websiteId, siteDescription, }; }; From 0b57401a3f5dc63d03ce984924af02df6c52800c Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 6 Dec 2024 16:11:14 +0530 Subject: [PATCH 23/28] Add page constants and refactor site data handling in CreateSite modules for site pages --- .../create-site/CreateSiteConstants.ts | 9 ++++ .../commands/create-site/CreateSiteHelper.ts | 8 +-- .../commands/create-site/CreateSiteModel.ts | 49 +++++++++++++------ .../commands/create-site/Nl2PageService.ts | 44 ++++++++++++----- .../commands/create-site/Nl2SiteService.ts | 3 +- 5 files changed, 80 insertions(+), 33 deletions(-) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts index a249b6c1..559ac1ff 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteConstants.ts @@ -52,3 +52,12 @@ export const HOME_SITE_MARKER_NAME = 'Home'; export const PUBLISHED_STATE_NAME = 'Published'; export const DEFAULT_TEMPLATE_NAME = 'Default studio template'; export const BLANK_TEMPLATE_NAME = 'BlankTemplate'; + +export const HOME_PAGE_KEY = 'Home'; +export const ABOUT_PAGE_KEY = 'AboutUs'; +export const FAQ_PAGE_KEY = 'FAQ'; + +export const HOME_PAGE_TYPE = 'Home'; +export const ABOUT_PAGE_TYPE = 'AboutUs'; +export const FAQ_PAGE_TYPE = 'FAQ'; +export const INFO_PAGE_TYPE = 'Informational'; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index cf366210..026077d1 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -70,11 +70,11 @@ async function fetchSiteAndPageData(intelligenceEndpoint: string, intelligenceAp // Call NL2Site service to get initial site content telemetry.sendTelemetryEvent(VSCODE_EXTENSION_NL2SITE_REQUEST, { sessionId: sessionId, orgId: orgId, environmentId: envId, userId: userId }); oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_NL2SITE_REQUEST, { sessionId: sessionId, orgId: orgId, environmentId: envId, userId: userId }); - const { siteName, pages, siteDescription } = await getNL2SiteData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, orgId, envId, userId); - - if (!siteName) { + const siteData = await getNL2SiteData(intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, orgId, envId, userId); + if (!siteData) { throw new Error(NL2SITE_REQUEST_FAILED); } + const { siteName, pages, siteDescription } = siteData; const sitePagesList = pages.map((page: { pageName: string; }) => page.pageName); @@ -83,7 +83,7 @@ async function fetchSiteAndPageData(intelligenceEndpoint: string, intelligenceAp // Call NL2Page service to get page content telemetry.sendTelemetryEvent(VSCODE_EXTENSION_NL2PAGE_REQUEST, { sessionId: sessionId, orgId: orgId, environmentId: envId, userId: userId }); oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_NL2PAGE_REQUEST, { sessionId: sessionId, orgId: orgId, environmentId: envId, userId: userId }); - const sitePages = await getNL2PageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, siteName, sitePagesList, sessionId, telemetry, orgId, envId, userId); + const sitePages = await getNL2PageData(intelligenceEndpoint, intelligenceApiToken, userPrompt, siteName, pages, sessionId, telemetry, orgId, envId, userId); if (!sitePages) { throw new Error(NL2PAGE_RESPONSE_FAILED); diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts index debbd14a..dfadfd27 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts @@ -13,41 +13,41 @@ export interface PowerPagesParsedJson { powerpagesite: PowerPagesSite[]; powerpagecomponent: PowerPagesComponent[]; powerpagesitelanguage: PowerPagesSiteLanguage[]; - } +} - export interface IFileUpload { +export interface IFileUpload { fileName: string; entityId: string; fileContent: string; entityName: string; columnName: string; - } +} export interface IURLParams { entityName?: string; entityId?: string; query?: string; apiVersion?: string; additionalPathTokens?: string[]; - } +} - export interface PowerPagesSiteEntity { +export interface PowerPagesSiteEntity { powerpagesiteid?: string | null; content: string; name: string; - } +} - export interface PowerPagesSite extends PowerPagesSiteEntity { +export interface PowerPagesSite extends PowerPagesSiteEntity { datamodelversion: string; - } +} - export interface PowerPagesSiteLanguage extends PowerPagesSiteEntity { +export interface PowerPagesSiteLanguage extends PowerPagesSiteEntity { powerpagesitelanguageid: string; displayname: string; languagecode: string; lcid: string; - } +} - export enum PowerPagesComponentType { +export enum PowerPagesComponentType { PublishingState = '1', WebPage = '2', WebFile = '3', @@ -77,17 +77,17 @@ export interface IURLParams { PublishingStateTransitionRule = '31', Shortcut = '32', PowerAutomate = '33', - } +} - export interface PowerPagesComponent extends PowerPagesSiteEntity { +export interface PowerPagesComponent extends PowerPagesSiteEntity { powerpagecomponentid: string; powerpagecomponenttype: PowerPagesComponentType; powerpagesitelanguageid?: string | null; filecontent?: string; filename?: string; - } +} - export interface ICreateSiteOptions { +export interface ICreateSiteOptions { intelligenceAPIEndpointInfo: IIntelligenceAPIEndpointInformation; intelligenceApiToken: string; userPrompt: string; @@ -132,3 +132,22 @@ export interface ICreateSiteCommandArgs { telemetry: ITelemetry; isCreateSiteInputsReceived: boolean; } + +export type Page = PageDataDetails & { + pageKey: string; + pageName: string; + pageSummary: string; + pageType?: string; +}; + +export type PageDataDetails = { + includesForm?: boolean; + includesList?: boolean; + suggestedColumns?: string; +}; + +export type Website = { + siteName: string; + pages: Page[]; + siteDescription?: string; +}; diff --git a/src/common/chat-participants/powerpages/commands/create-site/Nl2PageService.ts b/src/common/chat-participants/powerpages/commands/create-site/Nl2PageService.ts index 8cba41c3..459f476d 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/Nl2PageService.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/Nl2PageService.ts @@ -8,37 +8,42 @@ import { ITelemetry } from "../../../../OneDSLoggerTelemetry/telemetry/ITelemetr import { getCommonHeaders } from "../../../../services/AuthenticationProvider"; import { ABOUT_PAGE_TYPE, FAQ_PAGE_TYPE, HOME_PAGE_TYPE, INFO_PAGE_TYPE, NL2PAGE_GENERATE_NEW_PAGE, NL2PAGE_REQUEST_FAILED, NL2PAGE_SCENARIO, NL2PAGE_SCOPE} from "../../PowerPagesChatParticipantConstants"; import { VSCODE_EXTENSION_NL2PAGE_REQUEST_FAILED, VSCODE_EXTENSION_NL2PAGE_REQUEST_SUCCESS } from "../../PowerPagesChatParticipantTelemetryConstants"; +import { ABOUT_PAGE_KEY, FAQ_PAGE_KEY, HOME_PAGE_KEY } from "./CreateSiteConstants"; +import { Page } from "./CreateSiteModel"; -export async function getNL2PageData(aibEndpoint: string, aibToken: string, userPrompt: string, siteName: string, sitePagesList: string[], sessionId: string, telemetry: ITelemetry, orgId: string, envId: string, userId: string) { +export async function getNL2PageData(aibEndpoint: string, aibToken: string, userPrompt: string, siteName: string, sitePagesList: Page[], sessionId: string, telemetry: ITelemetry, orgId: string, envId: string, userId: string) { - const constructRequestBody = (pageType: string, colorNumber:number, exampleNumber: number) => ({ + const constructRequestBody = (pageType: string, pageName: string, colorNumber:number, exampleNumber: number, subScenario: string, isNotHomePage:boolean) => ({ "crossGeoOptions": { "enableCrossGeoCall": true }, - "question": `${userPrompt} - ${pageType} page`, + "question": `${userPrompt} - ${pageName} page`, "context": { "shouldCheckBlockList": false, "sessionId": sessionId, "scenario": NL2PAGE_SCENARIO, - "subScenario": NL2PAGE_GENERATE_NEW_PAGE, + "subScenario": subScenario, "version": "V1", "information": { "scope": NL2PAGE_SCOPE, "includeImages": true, - "pageType": pageType === 'FAQ' ? 'FAQ' : 'Home', //Verify if this is correct + "pageType": pageType, "title": siteName, - "pageName": pageType, + "pageName": pageName, "colorNumber": colorNumber, - "shuffleImages": false, + "shuffleImages": isNotHomePage, "exampleNumber": exampleNumber } } }); - const requests = sitePagesList.map(async pageType => { + const requests = sitePagesList.map(async page => { + const isNotHomePage = page.pageKey !== HOME_PAGE_KEY; + const subScenario = isNotHomePage ? 'GeneratePageWithLayout': NL2PAGE_GENERATE_NEW_PAGE; const colorNumber = generateRandomColorNumber(); - const exampleNumber = generateRandomExampleNumber(pageType); - const requestBody = constructRequestBody(pageType, colorNumber, exampleNumber); + const pageTypeFinal = generatePageType(page.pageKey); + const exampleNumber = generateRandomExampleNumber(pageTypeFinal); + const requestBody = constructRequestBody(pageTypeFinal, page.pageName, colorNumber, exampleNumber, subScenario, isNotHomePage); const requestInit: RequestInit = { method: "POST", @@ -49,7 +54,7 @@ export async function getNL2PageData(aibEndpoint: string, aibToken: string, user try { const response = await fetch(aibEndpoint, requestInit); if (!response.ok) { - throw new Error(`${NL2PAGE_REQUEST_FAILED} ${pageType}`); + throw new Error(`${NL2PAGE_REQUEST_FAILED} ${pageTypeFinal}`); } const responseData = await response.json(); @@ -59,8 +64,8 @@ export async function getNL2PageData(aibEndpoint: string, aibToken: string, user } return null; } catch (error) { - telemetry.sendTelemetryErrorEvent(VSCODE_EXTENSION_NL2PAGE_REQUEST_FAILED, { error: (error as Error)?.message, pageType }); - oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_NL2PAGE_REQUEST_FAILED, error as string, error as Error, { sessionId: sessionId, orgId:orgId, envId: envId, userId: userId, pageType: pageType}, {}); + telemetry.sendTelemetryErrorEvent(VSCODE_EXTENSION_NL2PAGE_REQUEST_FAILED, { error: (error as Error)?.message, pageTypeFinal }); + oneDSLoggerWrapper.getLogger().traceError(VSCODE_EXTENSION_NL2PAGE_REQUEST_FAILED, error as string, error as Error, { sessionId: sessionId, orgId:orgId, envId: envId, userId: userId, pageType: pageTypeFinal}, {}); return null; } }); @@ -91,3 +96,16 @@ export const generateRandomColorNumber = () => { } return 0; }; + + export const generatePageType = (pageKey: string) => { + switch (pageKey) { + case HOME_PAGE_KEY: + return HOME_PAGE_TYPE; + case ABOUT_PAGE_KEY: + return ABOUT_PAGE_TYPE; + case FAQ_PAGE_KEY: + return FAQ_PAGE_TYPE; + default: + return HOME_PAGE_TYPE; + } + }; diff --git a/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts b/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts index 0c9af94d..9278b16e 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/Nl2SiteService.ts @@ -9,8 +9,9 @@ import {VSCODE_EXTENSION_NL2SITE_REQUEST_FAILED, VSCODE_EXTENSION_NL2SITE_REQUES import { getCommonHeaders } from "../../../../services/AuthenticationProvider"; import { oneDSLoggerWrapper } from "../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper"; import { ENGLISH, MAX_PAGES, MIN_PAGES } from "./CreateSiteConstants"; +import { Website } from "./CreateSiteModel"; -export async function getNL2SiteData(aibEndpoint: string, aibToken: string, userPrompt: string, sessionId: string, telemetry: ITelemetry, orgId: string, envId: string, userId: string) { +export async function getNL2SiteData(aibEndpoint: string, aibToken: string, userPrompt: string, sessionId: string, telemetry: ITelemetry, orgId: string, envId: string, userId: string): Promise { const requestBody = { "crossGeoOptions": { "enableCrossGeoCall": true From 1d9a2099fd9e6e7835ddc085b06a52a180c7a3f1 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Fri, 6 Dec 2024 18:31:06 +0530 Subject: [PATCH 24/28] Enhance Command interface and PowerPagesChatParticipant to utilize EditableFileSystemProvider for improved content management --- src/common/chat-participants/CommandRegistry.ts | 3 ++- .../powerpages/PowerPagesChatParticipant.ts | 14 ++++++++++++-- .../commands/create-site/CreateSiteCommand.ts | 6 ++++-- .../commands/create-site/CreateSiteHelper.ts | 14 +++++--------- .../commands/create-site/CreateSiteModel.ts | 2 ++ 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/common/chat-participants/CommandRegistry.ts b/src/common/chat-participants/CommandRegistry.ts index ac1281fa..ec7625d3 100644 --- a/src/common/chat-participants/CommandRegistry.ts +++ b/src/common/chat-participants/CommandRegistry.ts @@ -4,10 +4,11 @@ */ import * as vscode from "vscode"; +import { EditableFileSystemProvider } from "../utilities/EditableFileSystemProvider"; export interface Command { // eslint-disable-next-line @typescript-eslint/no-explicit-any - execute(request: any, stream: vscode.ChatResponseStream): Promise; + execute(request: any, stream: vscode.ChatResponseStream, contentProvider: EditableFileSystemProvider): Promise; } export class CommandRegistry { diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts index eb0a9882..1f664f83 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipant.ts @@ -24,6 +24,8 @@ import { ADX_WEBPAGE, IApiRequestParams, IRelatedFiles } from '../../constants'; import { oneDSLoggerWrapper } from '../../OneDSLoggerTelemetry/oneDSLoggerWrapper'; import { CommandRegistry } from '../CommandRegistry'; import { VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_INVOKED, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ORG_DETAILS_NOT_FOUND, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ORG_DETAILS, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_NOT_AVAILABLE_ECS, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SUCCESSFUL_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_WELCOME_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_NO_PROMPT, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_LOCATION_REFERENCED, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_WEBPAGE_RELATED_FILES, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_SCENARIO, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_ERROR, VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED } from './PowerPagesChatParticipantTelemetryConstants'; +import { EditableFileSystemProvider } from '../../utilities/EditableFileSystemProvider'; +import { EDITABLE_SCHEME } from './commands/create-site/CreateSiteConstants'; export class PowerPagesChatParticipant { private static instance: PowerPagesChatParticipant | null = null; @@ -35,6 +37,7 @@ export class PowerPagesChatParticipant { private readonly _disposables: vscode.Disposable[] = []; private cachedEndpoint: IIntelligenceAPIEndpointInformation | null = null; private powerPagesAgentSessionId: string; + private contentProvider: EditableFileSystemProvider; private orgID: string | undefined; private orgUrl: string | undefined; @@ -63,6 +66,13 @@ export class PowerPagesChatParticipant { this._pacWrapper = pacWrapper; + this.contentProvider = new EditableFileSystemProvider(); + + // Register the content provider + this.extensionContext.subscriptions.push( + vscode.workspace.registerFileSystemProvider(EDITABLE_SCHEME, this.contentProvider, { isCaseSensitive: true }) + ); + registerButtonCommands(); this._disposables.push(orgChangeEvent(async (orgDetails: ActiveOrgOutput) => { @@ -167,7 +177,7 @@ export class PowerPagesChatParticipant { if (request.command) { this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED, { commandName: request.command, sessionId: this.powerPagesAgentSessionId, orgId: this.orgID, environmentId: this.environmentID, userId: userId }); - oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED, { commandName: request.command, sessionId: this.powerPagesAgentSessionId, orgId: this.orgID, environmentId: this.environmentID, userId: userId }); + oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_COMMAND_TRIGGERED, { commandName: request.command, sessionId: this.powerPagesAgentSessionId, orgId: this.orgID, environmentId: this.environmentID, userId: userId }); const command = commandRegistry.get(request.command); @@ -184,7 +194,7 @@ export class PowerPagesChatParticipant { extensionContext: this.extensionContext }; - return await command.execute(commandRequest, stream); + return await command.execute(commandRequest, stream, this.contentProvider); } else { if (location) { this.telemetry.sendTelemetryEvent(VSCODE_EXTENSION_GITHUB_POWER_PAGES_AGENT_LOCATION_REFERENCED, { sessionId: this.powerPagesAgentSessionId, orgId: this.orgID, environmentId: this.environmentID, userId: userId }); diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts index 61bd117b..fe349824 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteCommand.ts @@ -9,10 +9,11 @@ import { createSite } from "./CreateSiteHelper"; import { FAILED_TO_CREATE_SITE, NL2SITE_GENERATING_SITE } from "../../PowerPagesChatParticipantConstants"; import { oneDSLoggerWrapper } from "../../../../OneDSLoggerTelemetry/oneDSLoggerWrapper"; import { VSCODE_EXTENSION_CREATE_SITE_COMMAND_FAILED} from "../../PowerPagesChatParticipantTelemetryConstants"; +import { EditableFileSystemProvider } from "../../../../utilities/EditableFileSystemProvider"; export class CreateSiteCommand implements Command { // eslint-disable-next-line @typescript-eslint/no-explicit-any - async execute(requestObject: any, stream: vscode.ChatResponseStream): Promise { + async execute(requestObject: any, stream: vscode.ChatResponseStream, contentProvider: EditableFileSystemProvider): Promise { const { request, intelligenceAPIEndpointInfo, intelligenceApiToken, powerPagesAgentSessionId, telemetry, orgID, envID, userId, extensionContext } = requestObject; stream.progress(NL2SITE_GENERATING_SITE); @@ -28,7 +29,8 @@ export class CreateSiteCommand implements Command { orgId: orgID, envId: envID, userId, - extensionContext + extensionContext, + contentProvider }); // Process the result diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index 026077d1..6bd3ea46 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -29,7 +29,8 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { orgId, envId, userId, - extensionContext + extensionContext, + contentProvider } = createSiteOptions; if (!intelligenceAPIEndpointInfo.intelligenceEndpoint) { @@ -38,7 +39,7 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { const { siteName, siteDescription, sitePages, sitePagesList } = await fetchSiteAndPageData(intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); // eslint-disable-next-line @typescript-eslint/no-unused-vars - const contentProvider = previewSitePagesContent({ sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId }); + previewSitePagesContent({ sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId, contentProvider }); const envList = await getEnvList(telemetry, intelligenceAPIEndpointInfo.endpointStamp) @@ -99,12 +100,12 @@ function previewSitePagesContent( const { sitePages, stream, - extensionContext, telemetry, sessionId, orgId, envId, - userId + userId, + contentProvider } = options; try { @@ -114,11 +115,6 @@ function previewSitePagesContent( }); const sitePagesFolder: vscode.ChatResponseFileTree[] = []; - const contentProvider = new EditableFileSystemProvider(); - // Register the content provider - extensionContext.subscriptions.push( - vscode.workspace.registerFileSystemProvider(EDITABLE_SCHEME, contentProvider, { isCaseSensitive: true }) - ); const baseUri = vscode.Uri.parse(`${EDITABLE_SCHEME}:/`); diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts index dfadfd27..c66caa7a 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts @@ -98,6 +98,7 @@ export interface ICreateSiteOptions { envId: string; userId: string; extensionContext: vscode.ExtensionContext; + contentProvider: EditableFileSystemProvider; } export interface IPreviewSitePagesContentOptions { @@ -111,6 +112,7 @@ export interface IPreviewSitePagesContentOptions { orgId: string; envId: string; userId: string; + contentProvider: EditableFileSystemProvider; } export interface ISiteInputState { From d596ee92b8a2788658deb64d76d8eb74d2436ac9 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Tue, 10 Dec 2024 14:04:34 +0530 Subject: [PATCH 25/28] Throw an error if intelligence API endpoint is not provided in createSite function --- .../powerpages/commands/create-site/CreateSiteHelper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index 6bd3ea46..59b9e91d 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -34,7 +34,7 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { } = createSiteOptions; if (!intelligenceAPIEndpointInfo.intelligenceEndpoint) { - return; + throw new Error(NL2SITE_REQUEST_FAILED); } const { siteName, siteDescription, sitePages, sitePagesList } = await fetchSiteAndPageData(intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); From 926df6ae5f3bbd508e12bc8058326d48c5046d62 Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Mon, 16 Dec 2024 12:23:11 +0530 Subject: [PATCH 26/28] [PowerPages] Update localization strings for site creation and improve error handling --- l10n/bundle.l10n.json | 55 ++++++++++--------- .../vscode-powerplatform.xlf | 15 ++++- .../PowerPagesChatParticipantUtils.ts | 1 + .../commands/create-site/CreateSiteHelper.ts | 5 ++ .../commands/create-site/CreateSiteModel.ts | 1 + .../commands/create-site/CreateSiteUtils.ts | 1 + 6 files changed, 49 insertions(+), 29 deletions(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 36ca2d22..0f3efdf9 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -83,40 +83,18 @@ "Hi! Power Pages lets you build secure, professional websites that you can quickly configure and publish across web browsers and devices.\n\nTo create your website, visit the [Power Pages](https://powerpages.microsoft.com/).\nReturn to this chat and @powerpages can help you write and edit your website code.": "Hi! Power Pages lets you build secure, professional websites that you can quickly configure and publish across web browsers and devices.\n\nTo create your website, visit the [Power Pages](https://powerpages.microsoft.com/).\nReturn to this chat and @powerpages can help you write and edit your website code.", "Checking for active auth profile...": "Checking for active auth profile...", "@PowerPages is not yet available in your region.": "@PowerPages is not yet available in your region.", - "Failed to get site content from NL2Site service": "Failed to get site content from NL2Site service", "Generating webpages...": "Generating webpages...", "Generating a new Power Pages site...": "Generating a new Power Pages site...", + "Failed to create a new Power Pages site. Please try again.": "Failed to create a new Power Pages site. Please try again.", + "Creating Site Records": "Creating Site Records", + "Initializing site manager...": "Initializing site manager...", + "Saving site...": "Saving site...", "Select Folder for new PCF Control/Do not translate 'PCF' as it is a product name.": { "message": "Select Folder for new PCF Control", "comment": [ "Do not translate 'PCF' as it is a product name." ] }, - "Preparing pac CLI (v{0}).../{0} represents the version number": { - "message": "Preparing pac CLI (v{0})...", - "comment": [ - "{0} represents the version number" - ] - }, - "The pac CLI is ready for use in your VS Code terminal!": "The pac CLI is ready for use in your VS Code terminal!", - "Cannot install pac CLI: {0}/{0} represents the error message returned from the exception": { - "message": "Cannot install pac CLI: {0}", - "comment": [ - "{0} represents the error message returned from the exception" - ] - }, - "Installing Power Pages generator(v{0}).../{0} represents the version number": { - "message": "Installing Power Pages generator(v{0})...", - "comment": [ - "{0} represents the version number" - ] - }, - "dotnet sdk 6.0 or greater must be installed/Do not translate 'dotnet' or 'sdk'": { - "message": "dotnet sdk 6.0 or greater must be installed", - "comment": [ - "Do not translate 'dotnet' or 'sdk'" - ] - }, "File might be referenced by name {0} here./{0} represents the name of the file": { "message": "File might be referenced by name {0} here.", "comment": [ @@ -188,6 +166,12 @@ "Do not translate 'npm'" ] }, + "Installing Power Pages generator(v{0}).../{0} represents the version number": { + "message": "Installing Power Pages generator(v{0})...", + "comment": [ + "{0} represents the version number" + ] + }, "Cannot install Power Pages generator: {0}/{0} represents the error message returned from the exception": { "message": "Cannot install Power Pages generator: {0}", "comment": [ @@ -217,6 +201,25 @@ "The {3} represents Dataverse Environment's Organization ID (GUID)" ] }, + "Preparing pac CLI (v{0}).../{0} represents the version number": { + "message": "Preparing pac CLI (v{0})...", + "comment": [ + "{0} represents the version number" + ] + }, + "The pac CLI is ready for use in your VS Code terminal!": "The pac CLI is ready for use in your VS Code terminal!", + "Cannot install pac CLI: {0}/{0} represents the error message returned from the exception": { + "message": "Cannot install pac CLI: {0}", + "comment": [ + "{0} represents the error message returned from the exception" + ] + }, + "dotnet sdk 6.0 or greater must be installed/Do not translate 'dotnet' or 'sdk'": { + "message": "dotnet sdk 6.0 or greater must be installed", + "comment": [ + "Do not translate 'dotnet' or 'sdk'" + ] + }, "Confirm": "Confirm", "Are you sure you want to clear all the Auth Profiles?": "Are you sure you want to clear all the Auth Profiles?", "Cancel": "Cancel", diff --git a/loc/translations-export/vscode-powerplatform.xlf b/loc/translations-export/vscode-powerplatform.xlf index 5cba25db..153f2f7c 100644 --- a/loc/translations-export/vscode-powerplatform.xlf +++ b/loc/translations-export/vscode-powerplatform.xlf @@ -97,6 +97,9 @@ Copy to clipboard + + Creating Site Records + Creating {0}... {0} will be replaced by the entity type. @@ -143,6 +146,9 @@ The {3} represents Solution's Type (Managed or Unmanaged), but that test is loca Explain the following code {% include 'Page Copy'%} + + Failed to create a new Power Pages site. Please try again. + Failed to create: {0}. {0} will be replaced by the error message. @@ -159,9 +165,6 @@ The {3} represents Solution's Type (Managed or Unmanaged), but that test is loca Failed to get file ready for edit: {0} - - Failed to get site content from NL2Site service - Feature is not enabled for this geo. @@ -214,6 +217,9 @@ Return to this chat and @powerpages can help you write and edit your website cod In your own words, describe what you need. You can get help with writing code for Power Pages sites in HTML, CSS, and JS languages. + + Initializing site manager... + Insert code into editor @@ -357,6 +363,9 @@ The {3} represents Dataverse Environment's Organization ID (GUID) Response data is empty + + Saving site... + Saving your file ... diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts index c7e8539a..f790530e 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts @@ -135,6 +135,7 @@ export function registerButtonCommands() { vscode.commands.registerCommand(CREATE_SITE_BTN_CMD, async ({ siteName, sitePages, sitePagesList, envList, contentProvider, telemetry, isCreateSiteInputsReceived }: ICreateSiteCommandArgs) => { if (!isCreateSiteInputsReceived) { // Update Page Content will be used for the site creation + // eslint-disable-next-line @typescript-eslint/no-explicit-any const updatedPages = sitePages.map((page: any) => { return { ...page, diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index 59b9e91d..7e3b0877 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -110,6 +110,7 @@ function previewSitePagesContent( try { const sitePagesContent: { name: string; content: string }[] = []; + // eslint-disable-next-line @typescript-eslint/no-explicit-any sitePages.forEach((page: any) => { sitePagesContent.push({ name: page.metadata.pageTitle, content: page.code }); }); @@ -198,6 +199,7 @@ export async function collectSiteCreationInputs(siteName: string, envList: IEnvI } +// eslint-disable-next-line @typescript-eslint/no-explicit-any export async function populateSiteRecords(siteName: string, sitePagesList: string[], sitePages: any, orgUrl: string, telemetry: ITelemetry) { return vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, @@ -240,7 +242,9 @@ export async function populateSiteRecords(siteName: string, sitePagesList: strin } +// eslint-disable-next-line @typescript-eslint/no-explicit-any function createSitePagesMap(sitePagesList: string[], sitePages: any): Record { + // eslint-disable-next-line @typescript-eslint/no-explicit-any return sitePagesList.reduce((acc: Record, pageName: string, index: number) => { acc[pageName] = sitePages[index]; return acc; @@ -248,6 +252,7 @@ function createSitePagesMap(sitePagesList: string[], sitePages: any): Record, siteManager: PowerPagesSiteManager): Promise { const { actions } = siteManager.getSiteDataAndActions(); const promises = Object.entries(sitePagesMap).map(([pageName, pageContent]) => { diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts index c66caa7a..5e663c73 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts @@ -127,6 +127,7 @@ export interface ISiteInputState { export interface ICreateSiteCommandArgs { siteName: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any sitePages: any[]; sitePagesList: string[]; envList: IEnvInfo[]; diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts index f9b64749..23de499f 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts @@ -155,6 +155,7 @@ export const getFileUploadHeaders = (fileName: string, dataverseToken: string) = }; }; +// eslint-disable-next-line @typescript-eslint/no-explicit-any export function createHttpRequestOptions(method: string, url: string, body: any, headers?: Record): any { return { method, From 7cb62de01ec6b93163f3ec9e2e3c09c91e7ceb2b Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Thu, 2 Jan 2025 17:10:01 +0530 Subject: [PATCH 27/28] Refactor site creation utilities and enhance progress notifications --- .../commands/create-site/CreateSiteHelper.ts | 13 ++--- .../commands/create-site/CreateSiteModel.ts | 15 ++++++ .../commands/create-site/CreateSiteUtils.ts | 13 ----- .../commands/create-site/SiteComponents.ts | 50 ------------------- src/common/utilities/Utils.ts | 17 +++++-- 5 files changed, 33 insertions(+), 75 deletions(-) delete mode 100644 src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts index 7e3b0877..14278160 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteHelper.ts @@ -14,7 +14,7 @@ import { EditableFileSystemProvider } from '../../../../utilities/EditableFileSy import { HTML_FILE_EXTENSION, IEnvInfo, UTF8_ENCODING } from '../../../../constants'; import { BLANK_TEMPLATE_NAME, CREATE_SITE_BTN_CMD, CREATE_SITE_BTN_TITLE, CREATE_SITE_BTN_TOOLTIP, EDITABLE_SCHEME, ENGLISH, ENVIRONMENT_FOR_SITE_CREATION, INVALIDE_PAGE_CONTENT, SITE_CREATE_INPUTS, SITE_NAME, SITE_NAME_REQUIRED } from './CreateSiteConstants'; import { MultiStepInput } from '../../../../utilities/MultiStepInput'; -import { getEnvList } from '../../../../utilities/Utils'; +import { getEnvList, showProgressWithNotification } from '../../../../utilities/Utils'; import { PowerPagesSiteManager } from './CreateSiteManager'; import { ICreateSiteCommandArgs, ICreateSiteOptions, IPreviewSitePagesContentOptions, ISiteInputState } from './CreateSiteModel'; @@ -38,7 +38,6 @@ export const createSite = async (createSiteOptions: ICreateSiteOptions) => { } const { siteName, siteDescription, sitePages, sitePagesList } = await fetchSiteAndPageData(intelligenceAPIEndpointInfo.intelligenceEndpoint, intelligenceApiToken, userPrompt, sessionId, telemetry, stream, orgId, envId, userId); - // eslint-disable-next-line @typescript-eslint/no-unused-vars previewSitePagesContent({ sitePages, stream, extensionContext, telemetry, sessionId, orgId, envId, userId, contentProvider }); const envList = await getEnvList(telemetry, intelligenceAPIEndpointInfo.endpointStamp) @@ -201,16 +200,12 @@ export async function collectSiteCreationInputs(siteName: string, envList: IEnvI // eslint-disable-next-line @typescript-eslint/no-explicit-any export async function populateSiteRecords(siteName: string, sitePagesList: string[], sitePages: any, orgUrl: string, telemetry: ITelemetry) { - return vscode.window.withProgress({ - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t('Creating Site Records'), - cancellable: false - }, async (progress) => { + return await showProgressWithNotification( vscode.l10n.t('Creating Site Records') , async (progress) => { try { telemetry.sendTelemetryEvent(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_START , { siteName, orgUrl }); oneDSLoggerWrapper.getLogger().traceInfo(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_START , { siteName, orgUrl }); - progress.report({ message: vscode.l10n.t('Initializing site manager...') }); + progress?.report({ message: vscode.l10n.t('Initializing site manager...') }); // Create a map of sitePagesList and sitePages const sitePagesMap = createSitePagesMap(sitePagesList, sitePages); @@ -226,7 +221,7 @@ export async function populateSiteRecords(siteName: string, sitePagesList: strin await processSitePages(sitePagesMap, siteManager); // Save the site - progress.report({ message: vscode.l10n.t('Saving site...') }); + progress?.report({ message: vscode.l10n.t('Saving site...') }); await actions.save(orgUrl); telemetry.sendTelemetryEvent(VSCODE_EXTENSION_POPULATE_SITE_RECORDS_SUCCESS, { siteName, orgUrl }); diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts index 5e663c73..4356eb36 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteModel.ts @@ -47,6 +47,7 @@ export interface PowerPagesSiteLanguage extends PowerPagesSiteEntity { lcid: string; } +// In enhanced (V2) data model, the component type is used to determine the type of the component/entity. export enum PowerPagesComponentType { PublishingState = '1', WebPage = '2', @@ -154,3 +155,17 @@ export type Website = { pages: Page[]; siteDescription?: string; }; + +export interface PowerPagesSiteEntity { + powerpagesiteid?: string | null; + content: string; + name: string; +} + +export interface PowerPagesComponent extends PowerPagesSiteEntity { + powerpagecomponentid: string; + powerpagecomponenttype: PowerPagesComponentType; + powerpagesitelanguageid?: string | null; + filecontent?: string; + filename?: string; +} diff --git a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts index 23de499f..f0dbede8 100644 --- a/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts +++ b/src/common/chat-participants/powerpages/commands/create-site/CreateSiteUtils.ts @@ -3,8 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. */ - - import { v4 as uuidv4 } from 'uuid'; import { PresetThemeIds, CDS_API_BASE_URL, CDS_API_VERSION, CONTENT_TYPE_JSON } from './CreateSiteConstants'; import { PowerPagesParsedJson, IURLParams } from './CreateSiteModel'; @@ -134,17 +132,6 @@ export const generateRandomColorNumber = () => { return colorNumbers[Math.floor(Math.random() * colorNumbers.length)]; }; -/** - * Converts base-64 encoded string to an array buffer - * @param base64String the string containing data to convert - * @returns ArrayBuffer - */ -export function base64ToArrayBuffer(base64String: string): ArrayBuffer { - const binaryString = atob(base64String); - const bytes = new Uint8Array(binaryString.length).map((_, i) => binaryString.charCodeAt(i)); - return bytes.buffer; -} - export const getFileUploadHeaders = (fileName: string, dataverseToken: string) => { return { 'OData-MaxVersion': '4.0', diff --git a/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts b/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts deleted file mode 100644 index 279fab5e..00000000 --- a/src/common/chat-participants/powerpages/commands/create-site/SiteComponents.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - */ - -export interface PowerPagesSiteEntity { - powerpagesiteid?: string | null; - content: string; - name: string; -} - -export enum PowerPagesComponentType { - PublishingState = '1', - WebPage = '2', - WebFile = '3', - WebLinkSet = '4', - WebLink = '5', - PageTemplate = '6', - ContentSnippet = '7', - WebTemplate = '8', - SiteSettings = '9', - WebPageAccessControlRule = '10', - WebRole = '11', - WebsiteAccess = '12', - SiteMarker = '13', - BasicForm = '15', - BasicFormMetadata = '16', - List = '17', - TablePermission = '18', - AdvancedForm = '19', - AdvancedFormStep = '20', - AdvancedFormMetadata = '21', - PollPlacement = '24', - AdPlacement = '26', - BotConsumer = '27', - ColumnPermissionProfile = '28', - ColumnPermission = '29', - Redirect = '30', - PublishingStateTransitionRule = '31', - Shortcut = '32', - PowerAutomate = '33', -} - -export interface PowerPagesComponent extends PowerPagesSiteEntity { - powerpagecomponentid: string; - powerpagecomponenttype: PowerPagesComponentType; - powerpagesitelanguageid?: string | null; - filecontent?: string; - filename?: string; -} diff --git a/src/common/utilities/Utils.ts b/src/common/utilities/Utils.ts index c53080eb..9b1d3c5d 100644 --- a/src/common/utilities/Utils.ts +++ b/src/common/utilities/Utils.ts @@ -104,13 +104,13 @@ export async function showInputBoxAndGetOrgUrl() { }); } -export async function showProgressWithNotification(title: string, task: () => Promise): Promise { +export async function showProgressWithNotification(title: string, task: (progress?: vscode.Progress<{ message?: string; increment?: number }>) => Promise): Promise { return await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: title, cancellable: false - }, async () => { - return await task(); + }, async (progress) => { + return await task(progress); }); } @@ -397,3 +397,14 @@ export function getBAPEndpoint(serviceEndpointStamp: ServiceEndpointCategory, te return BAP_SERVICE_ENDPOINT.replace('{rootURL}', bapEndpoint) } + +/** + * Converts base-64 encoded string to an array buffer + * @param base64String the string containing data to convert + * @returns ArrayBuffer + */ +export function base64ToArrayBuffer(base64String: string): ArrayBuffer { + const binaryString = atob(base64String); + const bytes = new Uint8Array(binaryString.length).map((_, i) => binaryString.charCodeAt(i)); + return bytes.buffer; +} From 0952760146f35e12c9c31ba960340c54fd850bbb Mon Sep 17 00:00:00 2001 From: amitjoshi Date: Thu, 2 Jan 2025 17:13:52 +0530 Subject: [PATCH 28/28] [PowerPages] Add input validation to site creation process to prevent errors --- .../powerpages/PowerPagesChatParticipantUtils.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts index f790530e..cd573ad3 100644 --- a/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts +++ b/src/common/chat-participants/powerpages/PowerPagesChatParticipantUtils.ts @@ -145,6 +145,10 @@ export function registerButtonCommands() { const siteCreateInputs = await collectSiteCreationInputs(siteName, envList); + if (!siteCreateInputs) { + return; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars const siteManager = await populateSiteRecords(siteName, sitePagesList, updatedPages, siteCreateInputs.OrgUrl, telemetry);