diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 584cc76..67fed8f 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ "name": "lua-agent-builder", "source": "./plugins/lua-agent-builder", "description": "Build, test, and deploy Lua AI agents from inside Claude Code", - "version": "1.12.0", + "version": "1.13.0", "homepage": "https://github.com/lua-ai-global/claude-code-lua-plugin#readme", "repository": "https://github.com/lua-ai-global/claude-code-lua-plugin.git", "license": "MIT", diff --git a/README.md b/README.md index 59ac225..5dc017b 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Then `/lua-auth`: an existing credential is kept; a new login runs `lua auth con | Plugin | Description | |---|---| -| [`lua-agent-builder`](./plugins/lua-agent-builder/) | 23 slash commands, 10 subagents, 13 hooks, a 9-file knowledge base verified against lua-cli source (3.33.0 base; 1.3.0 added per-step model classes and the workflow autonomy envelope from lua-cli 3.36.0, 1.4.0 the Job-tier billing rules and the lua-cli 3.37.0 cost read-outs, 1.5.0 log drains and the `lua logs` read window from lua-cli 3.38.0, read from `main`; 1.6.0 headless mode and a hardened production-gate parser; 1.7.0 `/lua-devices`, device credentials that never reach the conversation, and a re-check against lua-cli 3.44.0 / 3.45.0; 1.8.0 web apps (Lua Apps); 1.9.0 the full QA suite, `/lua-qa full`; 1.10.0 decisions, `/lua-decisions` and `/lua-new decision` from lua-cli 3.48.0 / 3.49.2; 1.11.0 `/lua-deploy webapp` scoped web-app deploys from lua-cli 3.49.0; 1.12.0 org-shared `Data.shared` and web-app viewer decisions from lua-cli 3.50.0), a local read-only platform MCP server and the public docs MCP | +| [`lua-agent-builder`](./plugins/lua-agent-builder/) | 23 slash commands, 10 subagents, 13 hooks, a 9-file knowledge base verified against lua-cli source (3.33.0 base; 1.3.0 added per-step model classes and the workflow autonomy envelope from lua-cli 3.36.0, 1.4.0 the Job-tier billing rules and the lua-cli 3.37.0 cost read-outs, 1.5.0 log drains and the `lua logs` read window from lua-cli 3.38.0, read from `main`; 1.6.0 headless mode and a hardened production-gate parser; 1.7.0 `/lua-devices`, device credentials that never reach the conversation, and a re-check against lua-cli 3.44.0 / 3.45.0; 1.8.0 web apps (Lua Apps); 1.9.0 the full QA suite, `/lua-qa full`; 1.10.0 decisions, `/lua-decisions` and `/lua-new decision` from lua-cli 3.48.0 / 3.49.2; 1.11.0 `/lua-deploy webapp` scoped web-app deploys from lua-cli 3.49.0; 1.12.0 org-shared `Data.shared` and web-app viewer decisions from lua-cli 3.50.0; 1.13.0 `lua apps preview` from lua-cli 3.51.0), a local read-only platform MCP server and the public docs MCP | ## Quick walkthrough diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 3bb1709..7dac9b6 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -51,6 +51,8 @@ If you just want to start: [Installation](#installation) → [Your first agent]( `/lua-doctor` checks all of these and offers consent-gated fixes. Platforms: macOS 14+, Ubuntu 22.04+, Windows 11; CI runs the suite on all three with Node 18 and 20. +New in 1.13.0: **preview a web app before it goes live.** After `/lua-push webapp`, the builder can open the staged version with `lua apps preview`: a Lua Workspace link on its own address, where Data writes go to a throwaway copy, emails and messages are recorded instead of sent, and outside calls are blocked. Anyone who can edit the agent can open it, for 24 hours by default. Needs lua-cli 3.51.0. + New in 1.12.0: **org-shared Data and viewer decisions.** When several agents of one organization need the same dataset, the builder now recommends `Data.shared(name)` (same methods as `Data`; an org admin creates the collection and names its readers and writers through the admin API) and explains its errors, including why every call fails in a local test run. A web app's routes can decide workflow approvals and answer input steps as the signed-in person with `Workflows.viewer`. Needs lua-cli 3.50.0. New in 1.10.0: **decisions.** A decision is one call that takes some state and typed questions and returns typed answers with probabilities: the odds that something is true, a choice with its confidence, or a score on a scale. `/lua-new decision ` writes a `LuaDecision` with literal questions and registers it; `/lua-push decision` stages a version; `/lua-decisions` lists the agent's decisions, shows their versions, runs one on a message or JSON state (on the version's model, or `--model ` for any of the thirteen decision models, Jev and OpenAI included), publishes a version (the rollback) or deletes one. Reads and runs go at once; publish and delete confirm once through the Bash prompt. Needs lua-cli 3.48.0; `--model` and the OpenRouter ids need 3.49.2. diff --git a/plugins/lua-agent-builder/.claude-plugin/plugin.json b/plugins/lua-agent-builder/.claude-plugin/plugin.json index 687786f..20f1b4b 100644 --- a/plugins/lua-agent-builder/.claude-plugin/plugin.json +++ b/plugins/lua-agent-builder/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "lua-agent-builder", - "version": "1.12.0", + "version": "1.13.0", "description": "Build, test, and deploy Lua AI agents from inside Claude Code", "author": { "name": "Lua AI", diff --git a/plugins/lua-agent-builder/CHANGELOG.md b/plugins/lua-agent-builder/CHANGELOG.md index 37b820c..996625f 100644 --- a/plugins/lua-agent-builder/CHANGELOG.md +++ b/plugins/lua-agent-builder/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to the `lua-agent-builder` plugin. Versions follow the tag `release-prod.yml` cuts from `package.json` (`v`). lua-cli is a TypeScript SDK/CLI; it is unrelated to the Lua programming language. +## 1.13.0 — 2026-10-12 + +**Preview a web app version before it is live** (lua-cli 3.51.0). + +### Changed + +- **`web-apps.md` §7a: `lua apps preview`.** Opening a staged version as a Lua Workspace link on its own origin (`--p-`) under a Preview banner; what a preview isolates — Data writes go to a copy deleted at the end, emails and messages are recorded (`--effects`), `fetch` fails with `TEST_EGRESS_BLOCKED` and is not recorded, `env()` works, `Products`/`Baskets`/`Orders`/`Templates`/`CDN`/`Jobs` answer `test_session_tier_unsupported`, `Workflows.viewer` answers `viewer_unavailable`; who can open it (edit access), `--ttl` (24 h, max 168 h), `--list`/`--close`/`--effects`, `PREVIEW_ENDED`, `WEB_APP_PREVIEW_NEEDS_AGENT_VERSION`, exit codes. §9 gains the "works in `lua test webapp`, errors in a preview" row. +- **`/lua-push webapp`** offers the preview after a push on lua-cli 3.51.0+ and runs it only if the user wants the link. **`/lua-deploy`** mentions it for a version the user is unsure about. A preview is never reported as deployed. +- `scripts/lint-knowledge-commands.mjs`: `lua apps` gains `preview` (and the existing `delete`). + +`lua apps preview` sits in no permission list: Claude Code asks once before it runs (it opens a shareable link). `PINNED_MIN_LUA_CLI` is unchanged: the new section is marked lua-cli 3.51.0+. + ## 1.12.0 — 2026-10-11 **Org-shared Data and viewer decisions from web apps** (lua-cli 3.50.0). diff --git a/plugins/lua-agent-builder/commands/lua-deploy.md b/plugins/lua-agent-builder/commands/lua-deploy.md index b96b131..c4c1a30 100644 --- a/plugins/lua-agent-builder/commands/lua-deploy.md +++ b/plugins/lua-agent-builder/commands/lua-deploy.md @@ -14,7 +14,7 @@ If `$ARGUMENTS` already names a target and name/version, pre-fill them. AskUserQ - "What goes live?" (options: `skill`, `webhook`, `trigger`, `job`, `preprocessor`, `postprocessor`, `persona`, `workflow`, `webapp` (⏳ lua-cli 3.49.0+: goes live on its own; below: through a new agent version — only the web app may change), `mcp`, `voice`, `agent-version` (promote a whole-agent snapshot — also how you roll back), `all` (latest version of every deployable primitive)) -⏳ From lua-cli **3.49.0** a web app deploys like a webhook: `webapp` pushes it and runs `lua deploy webapp`, a scoped promote that moves only that app's pin. Below 3.49.0 there is no `webapp` deploy type: `webapp` pushes it and promotes a new agent version that differs from the live one only in its web apps (`lib/knowledge/web-apps.md` §7). Devices and device-triggers are **not** deployed here: they are not part of agent versions, a pushed `defineDevice` is live on the next turn, and a device-trigger is published only by `--auto-deploy`, which this plugin never runs. If the user names one, say so and point at `/lua-devices push` (`lib/knowledge/devices.md` §5) instead of asking. +⏳ From lua-cli **3.49.0** a web app deploys like a webhook: `webapp` pushes it and runs `lua deploy webapp`, a scoped promote that moves only that app's pin. Below 3.49.0 there is no `webapp` deploy type: `webapp` pushes it and promotes a new agent version that differs from the live one only in its web apps (`lib/knowledge/web-apps.md` §7). ⏳ On lua-cli 3.51.0+ a staged version can be clicked through first with `lua apps preview ` (§7a) — not a deploy, nothing goes live; mention it when the user is unsure the version is ready. Devices and device-triggers are **not** deployed here: they are not part of agent versions, a pushed `defineDevice` is live on the next turn, and a device-trigger is published only by `--auto-deploy`, which this plugin never runs. If the user names one, say so and point at `/lua-devices push` (`lib/knowledge/devices.md` §5) instead of asking. - "Name?" (free-text; hidden for `persona`, `all`, `agent-version`). If `dist-v2/manifest.json` exists, pre-offer names of the matching kind. - "Version?" (options: `latest`, or free-text `x.y.z` — an integer for `persona`, an agent version number for `agent-version`; hidden for `mcp` and `all`) - "Notes? (optional — e.g. 'activate the workflow schedule', a version message)" (free-text) diff --git a/plugins/lua-agent-builder/commands/lua-push.md b/plugins/lua-agent-builder/commands/lua-push.md index 60b7c36..7da4159 100644 --- a/plugins/lua-agent-builder/commands/lua-push.md +++ b/plugins/lua-agent-builder/commands/lua-push.md @@ -43,7 +43,7 @@ Always `--ci --force`. **NEVER** `--auto-deploy` (denied at the permission layer ⚠ A failed item: below lua-cli 3.44.0, `all` (and a type push of several primitives) prints `❌ Failed to push : …` per item and `⚠️ N component(s) failed to push`, then `✅ Push All Complete!`, and still **exits 0**; ⏳ from 3.44.0 it exits 1 when any item failed (`push.ts` `pushAllExitCode`). Either way scan the output for `❌ Failed to push`; if present, report the failed items as a failure (the others were pushed) — never say "✓ Pushed". -On success: "✓ Pushed `:` v`` (server version created; not live). Next: `/lua-deploy`." — for workflows note the live path is `lua workflows deploy -v latest` (the deploy slash handles it); for `agent` say plainly that the model settings are **already live** and, on 3.44.0 or later, that persona v`` is **staged** (`/lua-deploy` persona makes it live) — below 3.44.0 that it is already live (rollback: `/lua-deploy` persona with the previous version); for `device` say it is **live on the next turn** (rollback = push the previous code); for `device-trigger` print the user-terminal `--auto-deploy` line; for `webapp` the CLI ends with `Staged but NOT live yet` — say it is staged and that `/lua-deploy webapp` makes it live (⏳ lua-cli 3.49.0+: on its own, nothing else staged goes live; below: through an agent version, or ship it with `agent-version`), then it opens at `https://workspace.heylua.ai/apps//`; for `all` add that every `defineDevice` is live and the other primitives still need `lua deploy` / an agent version promote. +On success: "✓ Pushed `:` v`` (server version created; not live). Next: `/lua-deploy`." — for workflows note the live path is `lua workflows deploy -v latest` (the deploy slash handles it); for `agent` say plainly that the model settings are **already live** and, on 3.44.0 or later, that persona v`` is **staged** (`/lua-deploy` persona makes it live) — below 3.44.0 that it is already live (rollback: `/lua-deploy` persona with the previous version); for `device` say it is **live on the next turn** (rollback = push the previous code); for `device-trigger` print the user-terminal `--auto-deploy` line; for `webapp` the CLI ends with `Staged but NOT live yet` — say it is staged and that `/lua-deploy webapp` makes it live (⏳ lua-cli 3.49.0+: on its own, nothing else staged goes live; below: through an agent version, or ship it with `agent-version`), then it opens at `https://workspace.heylua.ai/apps//`; ⏳ on lua-cli 3.51.0+ also offer to click through the staged version first with `lua apps preview --ci ` (a Workspace link on its own address; Data writes go to a copy, emails and messages are recorded, `fetch` fails — `lib/knowledge/web-apps.md` §7a), and run it only if the user wants the link; for `all` add that every `defineDevice` is live and the other primitives still need `lua deploy` / an agent version promote. If the output contains `Model configuration cleared`, `Model settings cleared`, `Batching config cleared` or `Voices cleared` (types `all` / `agent`), say so plainly: the agent push overwrites those server fields with whatever `src/index.ts` declares, so a model chosen in the dashboard is now gone. Point at the fix: set `model` (or `modelSettings` / `batching`) on the `LuaAgent` — `lua models set --model ` writes it for you — and push `agent` again. diff --git a/plugins/lua-agent-builder/lib/knowledge/web-apps.md b/plugins/lua-agent-builder/lib/knowledge/web-apps.md index d3c448b..8d04af8 100644 --- a/plugins/lua-agent-builder/lib/knowledge/web-apps.md +++ b/plugins/lua-agent-builder/lib/knowledge/web-apps.md @@ -1,4 +1,4 @@ -# Web apps — pages and typed routes on an agent (lua-cli 3.42.0+ · read at 3.45.0; §7 deploy at 3.49.0) +# Web apps — pages and typed routes on an agent (lua-cli 3.42.0+ · read at 3.45.0; §7 deploy at 3.49.0; §7a preview at 3.51.0) Read from lua-cli `src/types/web-app.ts`, `src/commands/apps.ts`, `src/commands/test.ts` (`testWebApp`), `src/commands/push.ts`, `src/primitives/web-app.handler.ts`, `src/utils/web-app-build.ts`, `src/utils/web-app-route.ts` and `template-web-app/` at **3.45.0** (npm `latest` is 3.46.0 on 2026-10-06 — not re-read); the wire contract and limits from `@lua/shared-types` `web-route-contract.ts`; the page policy from lua-core `src/apps-gateway/web-app-html.ts`; the snapshot rule from lua-agents `agent-version.service.ts`. Product docs: docs.heylua.ai `/concepts/apps`, `/build/apps/quickstart`, `/build/apps/routes-and-pages`, `/reference/cli/apps`. Below lua-cli **3.42.0** `webapp` is not a push/test type and `lua apps` does not exist — `/lua-update` first. @@ -104,6 +104,23 @@ Compiles, then starts the app's own Vite with hot reload; routes are served at ` | Roll back | 3.49.0+: `LUA_DEPLOY_CONFIRMED=1 lua deploy webapp --ci --name --set-version --force`; any version: promote an earlier agent version | the scoped form rolls back only that app | | Switch off | admin console → agent → Apps | an admin toggle; a disabled app answers `APP_DISABLED`. A deploy **never** switches it on: 3.49.0+ prints `⚠️ Web app is switched off: the new version is live, but nobody can open it until it is switched on again.` — pass that on | +### 7a. Preview a staged version before it is live — `lua apps preview` (⏳ lua-cli 3.51.0+) + +Read from lua-cli `src/commands/apps-preview.ts` and lua-core `src/apps-gateway/web-app-preview.service.ts` on `main` (ADR 0019); docs.heylua.ai `/reference/cli/apps#lua-apps-preview`. + +``` +lua apps preview --ci [--version |latest] [--ttl 24h|2d] [--json] # open one (or get the open one for that version) +lua apps preview --ci [] --list | --close | --effects +``` + +- Prints a **Lua Workspace link** (`https://workspace.heylua.ai/apps//?preview=`) to that pushed version, framed on its **own origin** `--p-.apps.heylua.ai` under a **Preview** banner. Any version can be previewed (default: the latest push); a disabled app or one with no live version too. A second open of the same version hands back the open preview. +- **Isolated:** routes read the agent's `Data`, but every write, update and delete goes to a **copy** (copy-on-write) deleted when the preview ends. Emails and messages are **recorded, not sent** (`--effects ` lists them, needs `logs:read`). ⚠ A `fetch` (any outside network call) **fails with `TEST_EGRESS_BLOCKED`** and is not recorded — a route that calls a third party errors in a preview. `env()` works. `Products`, `Baskets`, `Orders`, `Templates`, `CDN` and `Jobs` answer `test_session_tier_unsupported`; `Workflows.viewer` answers `viewer_unavailable`. +- **Who:** anyone with **edit** access to the agent can open the link (shareable with another builder; they share the one copy of the data). Readers of the agent cannot. +- **Lifetime:** 24 h by default, `--ttl` up to 168 h; `--close ` ends it at once (copy and recorded effects deleted). Afterwards the link shows an ended notice and routes answer `PREVIEW_ENDED`. +- Refused with `WEB_APP_PREVIEW_NEEDS_AGENT_VERSION` (exit 10) when the agent has no agent version yet: the preview runs on the live agent version — tell the user to run `lua version create` once. +- Exit codes: 2 usage (two modes, malformed id, bad `--ttl`), 3 no such app / preview, 9 auth, 10 forbidden or refused, 11 platform unavailable. +- **The plugin's use:** it is safe to run — nothing goes live and nothing is sent — so after `lua push webapp` the plugin may offer it and, when the user wants to click through, run it and hand over the link. It is in no permission list, so Claude Code asks once before it runs. Never present a preview as "deployed": only `/lua-deploy webapp` makes a version live. + Refused before upload (`WebAppBuildError`): no `index.html` in `pages.root`; built `index.html` over **256 Ki characters**; more than **1000** assets; an asset over **8 MiB**; an asset path outside `assets/[A-Za-z0-9._-/]` or over 512 chars (rename the source file); more than **200** routes. **Opening it** (after the promote): `https://workspace.heylua.ai/apps//` (full page in Lua Workspace) and `https://admin.heylua.ai/admin/agents//apps` (the admin list). `agentId` is `agent.agentId` in `lua.skill.yaml`. Anyone who can read the agent can open its apps. The browser builds only — the native desktop app does not show web apps yet. @@ -117,6 +134,7 @@ Wall clock 30 s by default (60 s cap) → `WALL_TIMEOUT` · request body **1 MB* | Symptom | Cause | Fix | |---|---|---| | `No Vite installation found for …` | `npm install` never ran in `web/` | `npm --prefix src/apps//web install --ignore-scripts` | +| A route works in `lua test webapp` but errors in a preview with `TEST_EGRESS_BLOCKED` / `test_session_tier_unsupported` / `viewer_unavailable` | previews block outside calls and refuse those runtime objects (§7a) | expected in a preview; test that path with `lua test webapp` (live) or after the deploy | | `lua compile` fails on JSX / React types | `src/apps/*/web` missing from `tsconfig.json` `exclude` (tsconfig had comments, `apps new` skipped it) | add `"src/apps/*/web"` to `exclude` | | `❌ No web apps found` / `No web app named …` | app not in `webApps` on the `LuaAgent` | import it in `src/index.ts`, add to `webApps` | | `defineWebApp(): route key … must look like 'GET /path'` | key typo (`'get /x'`, two spaces, no leading `/`) | `' /'` | diff --git a/plugins/lua-agent-builder/mcp/lua-platform/dist/server.js b/plugins/lua-agent-builder/mcp/lua-platform/dist/server.js index fa6549f..9cb4fb0 100644 --- a/plugins/lua-agent-builder/mcp/lua-platform/dist/server.js +++ b/plugins/lua-agent-builder/mcp/lua-platform/dist/server.js @@ -1,6 +1,6 @@ import { createRequire as __luaCreateRequire } from 'node:module'; const require = __luaCreateRequire(import.meta.url); var mr=Object.defineProperty;var Nt=(r,e)=>{for(var t in e)mr(r,t,{get:e[t],enumerable:!0})};var i={};Nt(i,{BRAND:()=>Dr,DIRTY:()=>Q,EMPTY_PATH:()=>vr,INVALID:()=>g,NEVER:()=>Ts,OK:()=>E,ParseStatus:()=>R,Schema:()=>v,ZodAny:()=>G,ZodArray:()=>J,ZodBigInt:()=>te,ZodBoolean:()=>re,ZodBranded:()=>Ce,ZodCatch:()=>he,ZodDate:()=>se,ZodDefault:()=>pe,ZodDiscriminatedUnion:()=>Ue,ZodEffects:()=>L,ZodEnum:()=>de,ZodError:()=>I,ZodFirstPartyTypeKind:()=>_,ZodFunction:()=>De,ZodIntersection:()=>oe,ZodIssueCode:()=>u,ZodLazy:()=>ce,ZodLiteral:()=>le,ZodMap:()=>we,ZodNaN:()=>Se,ZodNativeEnum:()=>ue,ZodNever:()=>P,ZodNull:()=>ae,ZodNullable:()=>D,ZodNumber:()=>ee,ZodObject:()=>A,ZodOptional:()=>j,ZodParsedType:()=>h,ZodPipeline:()=>Ie,ZodPromise:()=>X,ZodReadonly:()=>fe,ZodRecord:()=>qe,ZodSchema:()=>v,ZodSet:()=>ke,ZodString:()=>K,ZodSymbol:()=>xe,ZodTransformer:()=>L,ZodTuple:()=>q,ZodType:()=>v,ZodUndefined:()=>ne,ZodUnion:()=>ie,ZodUnknown:()=>B,ZodVoid:()=>be,addIssueToContext:()=>p,any:()=>Kr,array:()=>es,bigint:()=>zr,boolean:()=>Ft,coerce:()=>Ss,custom:()=>qt,date:()=>Br,datetimeRegex:()=>Vt,defaultErrorMap:()=>H,discriminatedUnion:()=>ns,effect:()=>gs,enum:()=>hs,function:()=>ds,getErrorMap:()=>_e,getParsedType:()=>U,instanceof:()=>Fr,intersection:()=>as,isAborted:()=>Me,isAsync:()=>ye,isDirty:()=>Ve,isValid:()=>Y,late:()=>Zr,lazy:()=>us,literal:()=>ps,makeIssue:()=>Ee,map:()=>cs,nan:()=>Hr,nativeEnum:()=>fs,never:()=>Xr,null:()=>Yr,nullable:()=>ys,number:()=>Zt,object:()=>ts,objectUtil:()=>ut,oboolean:()=>ks,onumber:()=>ws,optional:()=>_s,ostring:()=>bs,pipeline:()=>xs,preprocess:()=>vs,promise:()=>ms,quotelessJson:()=>gr,record:()=>os,set:()=>ls,setErrorMap:()=>yr,strictObject:()=>rs,string:()=>Dt,symbol:()=>Jr,transformer:()=>gs,tuple:()=>is,undefined:()=>Wr,union:()=>ss,unknown:()=>Gr,util:()=>b,void:()=>Qr});var b;(function(r){r.assertEqual=n=>{};function e(n){}r.assertIs=e;function t(n){throw new Error}r.assertNever=t,r.arrayToEnum=n=>{let a={};for(let c of n)a[c]=c;return a},r.getValidEnumValues=n=>{let a=r.objectKeys(n).filter(o=>typeof n[n[o]]!="number"),c={};for(let o of a)c[o]=n[o];return r.objectValues(c)},r.objectValues=n=>r.objectKeys(n).map(function(a){return n[a]}),r.objectKeys=typeof Object.keys=="function"?n=>Object.keys(n):n=>{let a=[];for(let c in n)Object.prototype.hasOwnProperty.call(n,c)&&a.push(c);return a},r.find=(n,a)=>{for(let c of n)if(a(c))return c},r.isInteger=typeof Number.isInteger=="function"?n=>Number.isInteger(n):n=>typeof n=="number"&&Number.isFinite(n)&&Math.floor(n)===n;function s(n,a=" | "){return n.map(c=>typeof c=="string"?`'${c}'`:c).join(a)}r.joinValues=s,r.jsonStringifyReplacer=(n,a)=>typeof a=="bigint"?a.toString():a})(b||(b={}));var ut;(function(r){r.mergeShapes=(e,t)=>({...e,...t})})(ut||(ut={}));var h=b.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),U=r=>{switch(typeof r){case"undefined":return h.undefined;case"string":return h.string;case"number":return Number.isNaN(r)?h.nan:h.number;case"boolean":return h.boolean;case"function":return h.function;case"bigint":return h.bigint;case"symbol":return h.symbol;case"object":return Array.isArray(r)?h.array:r===null?h.null:r.then&&typeof r.then=="function"&&r.catch&&typeof r.catch=="function"?h.promise:typeof Map<"u"&&r instanceof Map?h.map:typeof Set<"u"&&r instanceof Set?h.set:typeof Date<"u"&&r instanceof Date?h.date:h.object;default:return h.unknown}};var u=b.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),gr=r=>JSON.stringify(r,null,2).replace(/"([^"]+)":/g,"$1:"),I=class r extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=s=>{this.issues=[...this.issues,s]},this.addIssues=(s=[])=>{this.issues=[...this.issues,...s]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(a){return a.message},s={_errors:[]},n=a=>{for(let c of a.issues)if(c.code==="invalid_union")c.unionErrors.map(n);else if(c.code==="invalid_return_type")n(c.returnTypeError);else if(c.code==="invalid_arguments")n(c.argumentsError);else if(c.path.length===0)s._errors.push(t(c));else{let o=s,l=0;for(;lt.message){let t={},s=[];for(let n of this.issues)if(n.path.length>0){let a=n.path[0];t[a]=t[a]||[],t[a].push(e(n))}else s.push(e(n));return{formErrors:s,fieldErrors:t}}get formErrors(){return this.flatten()}};I.create=r=>new I(r);var _r=(r,e)=>{let t;switch(r.code){case u.invalid_type:r.received===h.undefined?t="Required":t=`Expected ${r.expected}, received ${r.received}`;break;case u.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(r.expected,b.jsonStringifyReplacer)}`;break;case u.unrecognized_keys:t=`Unrecognized key(s) in object: ${b.joinValues(r.keys,", ")}`;break;case u.invalid_union:t="Invalid input";break;case u.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${b.joinValues(r.options)}`;break;case u.invalid_enum_value:t=`Invalid enum value. Expected ${b.joinValues(r.options)}, received '${r.received}'`;break;case u.invalid_arguments:t="Invalid function arguments";break;case u.invalid_return_type:t="Invalid function return type";break;case u.invalid_date:t="Invalid date";break;case u.invalid_string:typeof r.validation=="object"?"includes"in r.validation?(t=`Invalid input: must include "${r.validation.includes}"`,typeof r.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${r.validation.position}`)):"startsWith"in r.validation?t=`Invalid input: must start with "${r.validation.startsWith}"`:"endsWith"in r.validation?t=`Invalid input: must end with "${r.validation.endsWith}"`:b.assertNever(r.validation):r.validation!=="regex"?t=`Invalid ${r.validation}`:t="Invalid";break;case u.too_small:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at least":"more than"} ${r.minimum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at least":"over"} ${r.minimum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="bigint"?t=`Number must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${r.minimum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly equal to ":r.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(r.minimum))}`:t="Invalid input";break;case u.too_big:r.type==="array"?t=`Array must contain ${r.exact?"exactly":r.inclusive?"at most":"less than"} ${r.maximum} element(s)`:r.type==="string"?t=`String must contain ${r.exact?"exactly":r.inclusive?"at most":"under"} ${r.maximum} character(s)`:r.type==="number"?t=`Number must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="bigint"?t=`BigInt must be ${r.exact?"exactly":r.inclusive?"less than or equal to":"less than"} ${r.maximum}`:r.type==="date"?t=`Date must be ${r.exact?"exactly":r.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(r.maximum))}`:t="Invalid input";break;case u.custom:t="Invalid input";break;case u.invalid_intersection_types:t="Intersection results could not be merged";break;case u.not_multiple_of:t=`Number must be a multiple of ${r.multipleOf}`;break;case u.not_finite:t="Number must be finite";break;default:t=e.defaultError,b.assertNever(r)}return{message:t}},H=_r;var jt=H;function yr(r){jt=r}function _e(){return jt}var Ee=r=>{let{data:e,path:t,errorMaps:s,issueData:n}=r,a=[...t,...n.path||[]],c={...n,path:a};if(n.message!==void 0)return{...n,path:a,message:n.message};let o="",l=s.filter(d=>!!d).slice().reverse();for(let d of l)o=d(c,{data:e,defaultError:o}).message;return{...n,path:a,message:o}},vr=[];function p(r,e){let t=_e(),s=Ee({issueData:e,data:r.data,path:r.path,errorMaps:[r.common.contextualErrorMap,r.schemaErrorMap,t,t===H?void 0:H].filter(n=>!!n)});r.common.issues.push(s)}var R=class r{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let s=[];for(let n of t){if(n.status==="aborted")return g;n.status==="dirty"&&e.dirty(),s.push(n.value)}return{status:e.value,value:s}}static async mergeObjectAsync(e,t){let s=[];for(let n of t){let a=await n.key,c=await n.value;s.push({key:a,value:c})}return r.mergeObjectSync(e,s)}static mergeObjectSync(e,t){let s={};for(let n of t){let{key:a,value:c}=n;if(a.status==="aborted"||c.status==="aborted")return g;a.status==="dirty"&&e.dirty(),c.status==="dirty"&&e.dirty(),a.value!=="__proto__"&&(typeof c.value<"u"||n.alwaysSet)&&(s[a.value]=c.value)}return{status:e.value,value:s}}},g=Object.freeze({status:"aborted"}),Q=r=>({status:"dirty",value:r}),E=r=>({status:"valid",value:r}),Me=r=>r.status==="aborted",Ve=r=>r.status==="dirty",Y=r=>r.status==="valid",ye=r=>typeof Promise<"u"&&r instanceof Promise;var m;(function(r){r.errToObj=e=>typeof e=="string"?{message:e}:e||{},r.toString=e=>typeof e=="string"?e:e?.message})(m||(m={}));var $=class{constructor(e,t,s,n){this._cachedPath=[],this.parent=e,this.data=t,this._path=s,this._key=n}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},$t=(r,e)=>{if(Y(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new I(r.common.issues);return this._error=t,this._error}}};function y(r){if(!r)return{};let{errorMap:e,invalid_type_error:t,required_error:s,description:n}=r;if(e&&(t||s))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:n}:{errorMap:(c,o)=>{let{message:l}=r;return c.code==="invalid_enum_value"?{message:l??o.defaultError}:typeof o.data>"u"?{message:l??s??o.defaultError}:c.code!=="invalid_type"?{message:o.defaultError}:{message:l??t??o.defaultError}},description:n}}var v=class{get description(){return this._def.description}_getType(e){return U(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:U(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new R,ctx:{common:e.parent.common,data:e.data,parsedType:U(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(ye(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){let s={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:U(e)},n=this._parseSync({data:e,path:s.path,parent:s});return $t(s,n)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:U(e)};if(!this["~standard"].async)try{let s=this._parseSync({data:e,path:[],parent:t});return Y(s)?{value:s.value}:{issues:t.common.issues}}catch(s){s?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(s=>Y(s)?{value:s.value}:{issues:t.common.issues})}async parseAsync(e,t){let s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){let s={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:U(e)},n=this._parse({data:e,path:s.path,parent:s}),a=await(ye(n)?n:Promise.resolve(n));return $t(s,a)}refine(e,t){let s=n=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(n):t;return this._refinement((n,a)=>{let c=e(n),o=()=>a.addIssue({code:u.custom,...s(n)});return typeof Promise<"u"&&c instanceof Promise?c.then(l=>l?!0:(o(),!1)):c?!0:(o(),!1)})}refinement(e,t){return this._refinement((s,n)=>e(s)?!0:(n.addIssue(typeof t=="function"?t(s,n):t),!1))}_refinement(e){return new L({schema:this,typeName:_.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return j.create(this,this._def)}nullable(){return D.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return J.create(this)}promise(){return X.create(this,this._def)}or(e){return ie.create([this,e],this._def)}and(e){return oe.create(this,e,this._def)}transform(e){return new L({...y(this._def),schema:this,typeName:_.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new pe({...y(this._def),innerType:this,defaultValue:t,typeName:_.ZodDefault})}brand(){return new Ce({typeName:_.ZodBranded,type:this,...y(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new he({...y(this._def),innerType:this,catchValue:t,typeName:_.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Ie.create(this,e)}readonly(){return fe.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},xr=/^c[^\s-]{8,}$/i,br=/^[0-9a-z]+$/,wr=/^[0-9A-HJKMNP-TV-Z]{26}$/i,kr=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Sr=/^[a-z0-9_-]{21}$/i,Tr=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Rr=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Er=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Cr="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",pt,Ir=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Ar=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Or=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Nr=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,jr=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,$r=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Pt="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Lr=new RegExp(`^${Pt}$`);function Mt(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);let t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function Pr(r){return new RegExp(`^${Mt(r)}$`)}function Vt(r){let e=`${Pt}T${Mt(r)}`,t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function Mr(r,e){return!!((e==="v4"||!e)&&Ir.test(r)||(e==="v6"||!e)&&Or.test(r))}function Vr(r,e){if(!Tr.test(r))return!1;try{let[t]=r.split(".");if(!t)return!1;let s=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),n=JSON.parse(atob(s));return!(typeof n!="object"||n===null||"typ"in n&&n?.typ!=="JWT"||!n.alg||e&&n.alg!==e)}catch{return!1}}function Ur(r,e){return!!((e==="v4"||!e)&&Ar.test(r)||(e==="v6"||!e)&&Nr.test(r))}var K=class r extends v{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==h.string){let a=this._getOrReturnCtx(e);return p(a,{code:u.invalid_type,expected:h.string,received:a.parsedType}),g}let s=new R,n;for(let a of this._def.checks)if(a.kind==="min")e.data.lengtha.value&&(n=this._getOrReturnCtx(e,n),p(n,{code:u.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),s.dirty());else if(a.kind==="length"){let c=e.data.length>a.value,o=e.data.lengthe.test(n),{validation:t,code:u.invalid_string,...m.errToObj(s)})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...m.errToObj(e)})}url(e){return this._addCheck({kind:"url",...m.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...m.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...m.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...m.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...m.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...m.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...m.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...m.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...m.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...m.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...m.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...m.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...m.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...m.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...m.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...m.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...m.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...m.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...m.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...m.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...m.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...m.errToObj(t)})}nonempty(e){return this.min(1,m.errToObj(e))}trim(){return new r({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new r({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.valuenew K({checks:[],typeName:_.ZodString,coerce:r?.coerce??!1,...y(r)});function qr(r,e){let t=(r.toString().split(".")[1]||"").length,s=(e.toString().split(".")[1]||"").length,n=t>s?t:s,a=Number.parseInt(r.toFixed(n).replace(".","")),c=Number.parseInt(e.toFixed(n).replace(".",""));return a%c/10**n}var ee=class r extends v{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==h.number){let a=this._getOrReturnCtx(e);return p(a,{code:u.invalid_type,expected:h.number,received:a.parsedType}),g}let s,n=new R;for(let a of this._def.checks)a.kind==="int"?b.isInteger(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_type,expected:"integer",received:"float",message:a.message}),n.dirty()):a.kind==="min"?(a.inclusive?e.dataa.value:e.data>=a.value)&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),n.dirty()):a.kind==="multipleOf"?qr(e.data,a.value)!==0&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.not_multiple_of,multipleOf:a.value,message:a.message}),n.dirty()):a.kind==="finite"?Number.isFinite(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.not_finite,message:a.message}),n.dirty()):b.assertNever(a);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,m.toString(t))}gt(e,t){return this.setLimit("min",e,!1,m.toString(t))}lte(e,t){return this.setLimit("max",e,!0,m.toString(t))}lt(e,t){return this.setLimit("max",e,!1,m.toString(t))}setLimit(e,t,s,n){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:m.toString(n)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:m.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:m.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:m.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:m.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:m.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.valuee.kind==="int"||e.kind==="multipleOf"&&b.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let s of this._def.checks){if(s.kind==="finite"||s.kind==="int"||s.kind==="multipleOf")return!0;s.kind==="min"?(t===null||s.value>t)&&(t=s.value):s.kind==="max"&&(e===null||s.valuenew ee({checks:[],typeName:_.ZodNumber,coerce:r?.coerce||!1,...y(r)});var te=class r extends v{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==h.bigint)return this._getInvalidInput(e);let s,n=new R;for(let a of this._def.checks)a.kind==="min"?(a.inclusive?e.dataa.value:e.data>=a.value)&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),n.dirty()):a.kind==="multipleOf"?e.data%a.value!==BigInt(0)&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.not_multiple_of,multipleOf:a.value,message:a.message}),n.dirty()):b.assertNever(a);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return p(t,{code:u.invalid_type,expected:h.bigint,received:t.parsedType}),g}gte(e,t){return this.setLimit("min",e,!0,m.toString(t))}gt(e,t){return this.setLimit("min",e,!1,m.toString(t))}lte(e,t){return this.setLimit("max",e,!0,m.toString(t))}lt(e,t){return this.setLimit("max",e,!1,m.toString(t))}setLimit(e,t,s,n){return new r({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:m.toString(n)}]})}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:m.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.valuenew te({checks:[],typeName:_.ZodBigInt,coerce:r?.coerce??!1,...y(r)});var re=class extends v{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==h.boolean){let s=this._getOrReturnCtx(e);return p(s,{code:u.invalid_type,expected:h.boolean,received:s.parsedType}),g}return E(e.data)}};re.create=r=>new re({typeName:_.ZodBoolean,coerce:r?.coerce||!1,...y(r)});var se=class r extends v{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==h.date){let a=this._getOrReturnCtx(e);return p(a,{code:u.invalid_type,expected:h.date,received:a.parsedType}),g}if(Number.isNaN(e.data.getTime())){let a=this._getOrReturnCtx(e);return p(a,{code:u.invalid_date}),g}let s=new R,n;for(let a of this._def.checks)a.kind==="min"?e.data.getTime()a.value&&(n=this._getOrReturnCtx(e,n),p(n,{code:u.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),s.dirty()):b.assertNever(a);return{status:s.value,value:new Date(e.data.getTime())}}_addCheck(e){return new r({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:m.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:m.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.valuenew se({checks:[],coerce:r?.coerce||!1,typeName:_.ZodDate,...y(r)});var xe=class extends v{_parse(e){if(this._getType(e)!==h.symbol){let s=this._getOrReturnCtx(e);return p(s,{code:u.invalid_type,expected:h.symbol,received:s.parsedType}),g}return E(e.data)}};xe.create=r=>new xe({typeName:_.ZodSymbol,...y(r)});var ne=class extends v{_parse(e){if(this._getType(e)!==h.undefined){let s=this._getOrReturnCtx(e);return p(s,{code:u.invalid_type,expected:h.undefined,received:s.parsedType}),g}return E(e.data)}};ne.create=r=>new ne({typeName:_.ZodUndefined,...y(r)});var ae=class extends v{_parse(e){if(this._getType(e)!==h.null){let s=this._getOrReturnCtx(e);return p(s,{code:u.invalid_type,expected:h.null,received:s.parsedType}),g}return E(e.data)}};ae.create=r=>new ae({typeName:_.ZodNull,...y(r)});var G=class extends v{constructor(){super(...arguments),this._any=!0}_parse(e){return E(e.data)}};G.create=r=>new G({typeName:_.ZodAny,...y(r)});var B=class extends v{constructor(){super(...arguments),this._unknown=!0}_parse(e){return E(e.data)}};B.create=r=>new B({typeName:_.ZodUnknown,...y(r)});var P=class extends v{_parse(e){let t=this._getOrReturnCtx(e);return p(t,{code:u.invalid_type,expected:h.never,received:t.parsedType}),g}};P.create=r=>new P({typeName:_.ZodNever,...y(r)});var be=class extends v{_parse(e){if(this._getType(e)!==h.undefined){let s=this._getOrReturnCtx(e);return p(s,{code:u.invalid_type,expected:h.void,received:s.parsedType}),g}return E(e.data)}};be.create=r=>new be({typeName:_.ZodVoid,...y(r)});var J=class r extends v{_parse(e){let{ctx:t,status:s}=this._processInputParams(e),n=this._def;if(t.parsedType!==h.array)return p(t,{code:u.invalid_type,expected:h.array,received:t.parsedType}),g;if(n.exactLength!==null){let c=t.data.length>n.exactLength.value,o=t.data.lengthn.maxLength.value&&(p(t,{code:u.too_big,maximum:n.maxLength.value,type:"array",inclusive:!0,exact:!1,message:n.maxLength.message}),s.dirty()),t.common.async)return Promise.all([...t.data].map((c,o)=>n.type._parseAsync(new $(t,c,t.path,o)))).then(c=>R.mergeArray(s,c));let a=[...t.data].map((c,o)=>n.type._parseSync(new $(t,c,t.path,o)));return R.mergeArray(s,a)}get element(){return this._def.type}min(e,t){return new r({...this._def,minLength:{value:e,message:m.toString(t)}})}max(e,t){return new r({...this._def,maxLength:{value:e,message:m.toString(t)}})}length(e,t){return new r({...this._def,exactLength:{value:e,message:m.toString(t)}})}nonempty(e){return this.min(1,e)}};J.create=(r,e)=>new J({type:r,minLength:null,maxLength:null,exactLength:null,typeName:_.ZodArray,...y(e)});function ve(r){if(r instanceof A){let e={};for(let t in r.shape){let s=r.shape[t];e[t]=j.create(ve(s))}return new A({...r._def,shape:()=>e})}else return r instanceof J?new J({...r._def,type:ve(r.element)}):r instanceof j?j.create(ve(r.unwrap())):r instanceof D?D.create(ve(r.unwrap())):r instanceof q?q.create(r.items.map(e=>ve(e))):r}var A=class r extends v{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=b.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==h.object){let d=this._getOrReturnCtx(e);return p(d,{code:u.invalid_type,expected:h.object,received:d.parsedType}),g}let{status:s,ctx:n}=this._processInputParams(e),{shape:a,keys:c}=this._getCached(),o=[];if(!(this._def.catchall instanceof P&&this._def.unknownKeys==="strip"))for(let d in n.data)c.includes(d)||o.push(d);let l=[];for(let d of c){let f=a[d],x=n.data[d];l.push({key:{status:"valid",value:d},value:f._parse(new $(n,x,n.path,d)),alwaysSet:d in n.data})}if(this._def.catchall instanceof P){let d=this._def.unknownKeys;if(d==="passthrough")for(let f of o)l.push({key:{status:"valid",value:f},value:{status:"valid",value:n.data[f]}});else if(d==="strict")o.length>0&&(p(n,{code:u.unrecognized_keys,keys:o}),s.dirty());else if(d!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let d=this._def.catchall;for(let f of o){let x=n.data[f];l.push({key:{status:"valid",value:f},value:d._parse(new $(n,x,n.path,f)),alwaysSet:f in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let d=[];for(let f of l){let x=await f.key,S=await f.value;d.push({key:x,value:S,alwaysSet:f.alwaysSet})}return d}).then(d=>R.mergeObjectSync(s,d)):R.mergeObjectSync(s,l)}get shape(){return this._def.shape()}strict(e){return m.errToObj,new r({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,s)=>{let n=this._def.errorMap?.(t,s).message??s.defaultError;return t.code==="unrecognized_keys"?{message:m.errToObj(e).message??n}:{message:n}}}:{}})}strip(){return new r({...this._def,unknownKeys:"strip"})}passthrough(){return new r({...this._def,unknownKeys:"passthrough"})}extend(e){return new r({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:_.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r({...this._def,catchall:e})}pick(e){let t={};for(let s of b.objectKeys(e))e[s]&&this.shape[s]&&(t[s]=this.shape[s]);return new r({...this._def,shape:()=>t})}omit(e){let t={};for(let s of b.objectKeys(this.shape))e[s]||(t[s]=this.shape[s]);return new r({...this._def,shape:()=>t})}deepPartial(){return ve(this)}partial(e){let t={};for(let s of b.objectKeys(this.shape)){let n=this.shape[s];e&&!e[s]?t[s]=n:t[s]=n.optional()}return new r({...this._def,shape:()=>t})}required(e){let t={};for(let s of b.objectKeys(this.shape))if(e&&!e[s])t[s]=this.shape[s];else{let a=this.shape[s];for(;a instanceof j;)a=a._def.innerType;t[s]=a}return new r({...this._def,shape:()=>t})}keyof(){return Ut(b.objectKeys(this.shape))}};A.create=(r,e)=>new A({shape:()=>r,unknownKeys:"strip",catchall:P.create(),typeName:_.ZodObject,...y(e)});A.strictCreate=(r,e)=>new A({shape:()=>r,unknownKeys:"strict",catchall:P.create(),typeName:_.ZodObject,...y(e)});A.lazycreate=(r,e)=>new A({shape:r,unknownKeys:"strip",catchall:P.create(),typeName:_.ZodObject,...y(e)});var ie=class extends v{_parse(e){let{ctx:t}=this._processInputParams(e),s=this._def.options;function n(a){for(let o of a)if(o.result.status==="valid")return o.result;for(let o of a)if(o.result.status==="dirty")return t.common.issues.push(...o.ctx.common.issues),o.result;let c=a.map(o=>new I(o.ctx.common.issues));return p(t,{code:u.invalid_union,unionErrors:c}),g}if(t.common.async)return Promise.all(s.map(async a=>{let c={...t,common:{...t.common,issues:[]},parent:null};return{result:await a._parseAsync({data:t.data,path:t.path,parent:c}),ctx:c}})).then(n);{let a,c=[];for(let l of s){let d={...t,common:{...t.common,issues:[]},parent:null},f=l._parseSync({data:t.data,path:t.path,parent:d});if(f.status==="valid")return f;f.status==="dirty"&&!a&&(a={result:f,ctx:d}),d.common.issues.length&&c.push(d.common.issues)}if(a)return t.common.issues.push(...a.ctx.common.issues),a.result;let o=c.map(l=>new I(l));return p(t,{code:u.invalid_union,unionErrors:o}),g}}get options(){return this._def.options}};ie.create=(r,e)=>new ie({options:r,typeName:_.ZodUnion,...y(e)});var z=r=>r instanceof ce?z(r.schema):r instanceof L?z(r.innerType()):r instanceof le?[r.value]:r instanceof de?r.options:r instanceof ue?b.objectValues(r.enum):r instanceof pe?z(r._def.innerType):r instanceof ne?[void 0]:r instanceof ae?[null]:r instanceof j?[void 0,...z(r.unwrap())]:r instanceof D?[null,...z(r.unwrap())]:r instanceof Ce||r instanceof fe?z(r.unwrap()):r instanceof he?z(r._def.innerType):[],Ue=class r extends v{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.object)return p(t,{code:u.invalid_type,expected:h.object,received:t.parsedType}),g;let s=this.discriminator,n=t.data[s],a=this.optionsMap.get(n);return a?t.common.async?a._parseAsync({data:t.data,path:t.path,parent:t}):a._parseSync({data:t.data,path:t.path,parent:t}):(p(t,{code:u.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[s]}),g)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,s){let n=new Map;for(let a of t){let c=z(a.shape[e]);if(!c.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let o of c){if(n.has(o))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(o)}`);n.set(o,a)}}return new r({typeName:_.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:n,...y(s)})}};function ht(r,e){let t=U(r),s=U(e);if(r===e)return{valid:!0,data:r};if(t===h.object&&s===h.object){let n=b.objectKeys(e),a=b.objectKeys(r).filter(o=>n.indexOf(o)!==-1),c={...r,...e};for(let o of a){let l=ht(r[o],e[o]);if(!l.valid)return{valid:!1};c[o]=l.data}return{valid:!0,data:c}}else if(t===h.array&&s===h.array){if(r.length!==e.length)return{valid:!1};let n=[];for(let a=0;a{if(Me(a)||Me(c))return g;let o=ht(a.value,c.value);return o.valid?((Ve(a)||Ve(c))&&t.dirty(),{status:t.value,value:o.data}):(p(s,{code:u.invalid_intersection_types}),g)};return s.common.async?Promise.all([this._def.left._parseAsync({data:s.data,path:s.path,parent:s}),this._def.right._parseAsync({data:s.data,path:s.path,parent:s})]).then(([a,c])=>n(a,c)):n(this._def.left._parseSync({data:s.data,path:s.path,parent:s}),this._def.right._parseSync({data:s.data,path:s.path,parent:s}))}};oe.create=(r,e,t)=>new oe({left:r,right:e,typeName:_.ZodIntersection,...y(t)});var q=class r extends v{_parse(e){let{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.array)return p(s,{code:u.invalid_type,expected:h.array,received:s.parsedType}),g;if(s.data.lengththis._def.items.length&&(p(s,{code:u.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let a=[...s.data].map((c,o)=>{let l=this._def.items[o]||this._def.rest;return l?l._parse(new $(s,c,s.path,o)):null}).filter(c=>!!c);return s.common.async?Promise.all(a).then(c=>R.mergeArray(t,c)):R.mergeArray(t,a)}get items(){return this._def.items}rest(e){return new r({...this._def,rest:e})}};q.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new q({items:r,typeName:_.ZodTuple,rest:null,...y(e)})};var qe=class r extends v{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.object)return p(s,{code:u.invalid_type,expected:h.object,received:s.parsedType}),g;let n=[],a=this._def.keyType,c=this._def.valueType;for(let o in s.data)n.push({key:a._parse(new $(s,o,s.path,o)),value:c._parse(new $(s,s.data[o],s.path,o)),alwaysSet:o in s.data});return s.common.async?R.mergeObjectAsync(t,n):R.mergeObjectSync(t,n)}get element(){return this._def.valueType}static create(e,t,s){return t instanceof v?new r({keyType:e,valueType:t,typeName:_.ZodRecord,...y(s)}):new r({keyType:K.create(),valueType:e,typeName:_.ZodRecord,...y(t)})}},we=class extends v{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.map)return p(s,{code:u.invalid_type,expected:h.map,received:s.parsedType}),g;let n=this._def.keyType,a=this._def.valueType,c=[...s.data.entries()].map(([o,l],d)=>({key:n._parse(new $(s,o,s.path,[d,"key"])),value:a._parse(new $(s,l,s.path,[d,"value"]))}));if(s.common.async){let o=new Map;return Promise.resolve().then(async()=>{for(let l of c){let d=await l.key,f=await l.value;if(d.status==="aborted"||f.status==="aborted")return g;(d.status==="dirty"||f.status==="dirty")&&t.dirty(),o.set(d.value,f.value)}return{status:t.value,value:o}})}else{let o=new Map;for(let l of c){let d=l.key,f=l.value;if(d.status==="aborted"||f.status==="aborted")return g;(d.status==="dirty"||f.status==="dirty")&&t.dirty(),o.set(d.value,f.value)}return{status:t.value,value:o}}}};we.create=(r,e,t)=>new we({valueType:e,keyType:r,typeName:_.ZodMap,...y(t)});var ke=class r extends v{_parse(e){let{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.set)return p(s,{code:u.invalid_type,expected:h.set,received:s.parsedType}),g;let n=this._def;n.minSize!==null&&s.data.sizen.maxSize.value&&(p(s,{code:u.too_big,maximum:n.maxSize.value,type:"set",inclusive:!0,exact:!1,message:n.maxSize.message}),t.dirty());let a=this._def.valueType;function c(l){let d=new Set;for(let f of l){if(f.status==="aborted")return g;f.status==="dirty"&&t.dirty(),d.add(f.value)}return{status:t.value,value:d}}let o=[...s.data.values()].map((l,d)=>a._parse(new $(s,l,s.path,d)));return s.common.async?Promise.all(o).then(l=>c(l)):c(o)}min(e,t){return new r({...this._def,minSize:{value:e,message:m.toString(t)}})}max(e,t){return new r({...this._def,maxSize:{value:e,message:m.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};ke.create=(r,e)=>new ke({valueType:r,minSize:null,maxSize:null,typeName:_.ZodSet,...y(e)});var De=class r extends v{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.function)return p(t,{code:u.invalid_type,expected:h.function,received:t.parsedType}),g;function s(o,l){return Ee({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,_e(),H].filter(d=>!!d),issueData:{code:u.invalid_arguments,argumentsError:l}})}function n(o,l){return Ee({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,_e(),H].filter(d=>!!d),issueData:{code:u.invalid_return_type,returnTypeError:l}})}let a={errorMap:t.common.contextualErrorMap},c=t.data;if(this._def.returns instanceof X){let o=this;return E(async function(...l){let d=new I([]),f=await o._def.args.parseAsync(l,a).catch(w=>{throw d.addIssue(s(l,w)),d}),x=await Reflect.apply(c,this,f);return await o._def.returns._def.type.parseAsync(x,a).catch(w=>{throw d.addIssue(n(x,w)),d})})}else{let o=this;return E(function(...l){let d=o._def.args.safeParse(l,a);if(!d.success)throw new I([s(l,d.error)]);let f=Reflect.apply(c,this,d.data),x=o._def.returns.safeParse(f,a);if(!x.success)throw new I([n(f,x.error)]);return x.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new r({...this._def,args:q.create(e).rest(B.create())})}returns(e){return new r({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,s){return new r({args:e||q.create([]).rest(B.create()),returns:t||B.create(),typeName:_.ZodFunction,...y(s)})}},ce=class extends v{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};ce.create=(r,e)=>new ce({getter:r,typeName:_.ZodLazy,...y(e)});var le=class extends v{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return p(t,{received:t.data,code:u.invalid_literal,expected:this._def.value}),g}return{status:"valid",value:e.data}}get value(){return this._def.value}};le.create=(r,e)=>new le({value:r,typeName:_.ZodLiteral,...y(e)});function Ut(r,e){return new de({values:r,typeName:_.ZodEnum,...y(e)})}var de=class r extends v{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),s=this._def.values;return p(t,{expected:b.joinValues(s),received:t.parsedType,code:u.invalid_type}),g}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),s=this._def.values;return p(t,{received:t.data,code:u.invalid_enum_value,options:s}),g}return E(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return r.create(e,{...this._def,...t})}exclude(e,t=this._def){return r.create(this.options.filter(s=>!e.includes(s)),{...this._def,...t})}};de.create=Ut;var ue=class extends v{_parse(e){let t=b.getValidEnumValues(this._def.values),s=this._getOrReturnCtx(e);if(s.parsedType!==h.string&&s.parsedType!==h.number){let n=b.objectValues(t);return p(s,{expected:b.joinValues(n),received:s.parsedType,code:u.invalid_type}),g}if(this._cache||(this._cache=new Set(b.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let n=b.objectValues(t);return p(s,{received:s.data,code:u.invalid_enum_value,options:n}),g}return E(e.data)}get enum(){return this._def.values}};ue.create=(r,e)=>new ue({values:r,typeName:_.ZodNativeEnum,...y(e)});var X=class extends v{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.promise&&t.common.async===!1)return p(t,{code:u.invalid_type,expected:h.promise,received:t.parsedType}),g;let s=t.parsedType===h.promise?t.data:Promise.resolve(t.data);return E(s.then(n=>this._def.type.parseAsync(n,{path:t.path,errorMap:t.common.contextualErrorMap})))}};X.create=(r,e)=>new X({type:r,typeName:_.ZodPromise,...y(e)});var L=class extends v{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===_.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:s}=this._processInputParams(e),n=this._def.effect||null,a={addIssue:c=>{p(s,c),c.fatal?t.abort():t.dirty()},get path(){return s.path}};if(a.addIssue=a.addIssue.bind(a),n.type==="preprocess"){let c=n.transform(s.data,a);if(s.common.async)return Promise.resolve(c).then(async o=>{if(t.value==="aborted")return g;let l=await this._def.schema._parseAsync({data:o,path:s.path,parent:s});return l.status==="aborted"?g:l.status==="dirty"?Q(l.value):t.value==="dirty"?Q(l.value):l});{if(t.value==="aborted")return g;let o=this._def.schema._parseSync({data:c,path:s.path,parent:s});return o.status==="aborted"?g:o.status==="dirty"?Q(o.value):t.value==="dirty"?Q(o.value):o}}if(n.type==="refinement"){let c=o=>{let l=n.refinement(o,a);if(s.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return o};if(s.common.async===!1){let o=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});return o.status==="aborted"?g:(o.status==="dirty"&&t.dirty(),c(o.value),{status:t.value,value:o.value})}else return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then(o=>o.status==="aborted"?g:(o.status==="dirty"&&t.dirty(),c(o.value).then(()=>({status:t.value,value:o.value}))))}if(n.type==="transform")if(s.common.async===!1){let c=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(!Y(c))return g;let o=n.transform(c.value,a);if(o instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:o}}else return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then(c=>Y(c)?Promise.resolve(n.transform(c.value,a)).then(o=>({status:t.value,value:o})):g);b.assertNever(n)}};L.create=(r,e,t)=>new L({schema:r,typeName:_.ZodEffects,effect:e,...y(t)});L.createWithPreprocess=(r,e,t)=>new L({schema:e,effect:{type:"preprocess",transform:r},typeName:_.ZodEffects,...y(t)});var j=class extends v{_parse(e){return this._getType(e)===h.undefined?E(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};j.create=(r,e)=>new j({innerType:r,typeName:_.ZodOptional,...y(e)});var D=class extends v{_parse(e){return this._getType(e)===h.null?E(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};D.create=(r,e)=>new D({innerType:r,typeName:_.ZodNullable,...y(e)});var pe=class extends v{_parse(e){let{ctx:t}=this._processInputParams(e),s=t.data;return t.parsedType===h.undefined&&(s=this._def.defaultValue()),this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};pe.create=(r,e)=>new pe({innerType:r,typeName:_.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...y(e)});var he=class extends v{_parse(e){let{ctx:t}=this._processInputParams(e),s={...t,common:{...t.common,issues:[]}},n=this._def.innerType._parse({data:s.data,path:s.path,parent:{...s}});return ye(n)?n.then(a=>({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new I(s.common.issues)},input:s.data})})):{status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new I(s.common.issues)},input:s.data})}}removeCatch(){return this._def.innerType}};he.create=(r,e)=>new he({innerType:r,typeName:_.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...y(e)});var Se=class extends v{_parse(e){if(this._getType(e)!==h.nan){let s=this._getOrReturnCtx(e);return p(s,{code:u.invalid_type,expected:h.nan,received:s.parsedType}),g}return{status:"valid",value:e.data}}};Se.create=r=>new Se({typeName:_.ZodNaN,...y(r)});var Dr=Symbol("zod_brand"),Ce=class extends v{_parse(e){let{ctx:t}=this._processInputParams(e),s=t.data;return this._def.type._parse({data:s,path:t.path,parent:t})}unwrap(){return this._def.type}},Ie=class r extends v{_parse(e){let{status:t,ctx:s}=this._processInputParams(e);if(s.common.async)return(async()=>{let a=await this._def.in._parseAsync({data:s.data,path:s.path,parent:s});return a.status==="aborted"?g:a.status==="dirty"?(t.dirty(),Q(a.value)):this._def.out._parseAsync({data:a.value,path:s.path,parent:s})})();{let n=this._def.in._parseSync({data:s.data,path:s.path,parent:s});return n.status==="aborted"?g:n.status==="dirty"?(t.dirty(),{status:"dirty",value:n.value}):this._def.out._parseSync({data:n.value,path:s.path,parent:s})}}static create(e,t){return new r({in:e,out:t,typeName:_.ZodPipeline})}},fe=class extends v{_parse(e){let t=this._def.innerType._parse(e),s=n=>(Y(n)&&(n.value=Object.freeze(n.value)),n);return ye(t)?t.then(n=>s(n)):s(t)}unwrap(){return this._def.innerType}};fe.create=(r,e)=>new fe({innerType:r,typeName:_.ZodReadonly,...y(e)});function Lt(r,e){let t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function qt(r,e={},t){return r?G.create().superRefine((s,n)=>{let a=r(s);if(a instanceof Promise)return a.then(c=>{if(!c){let o=Lt(e,s),l=o.fatal??t??!0;n.addIssue({code:"custom",...o,fatal:l})}});if(!a){let c=Lt(e,s),o=c.fatal??t??!0;n.addIssue({code:"custom",...c,fatal:o})}}):G.create()}var Zr={object:A.lazycreate},_;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(_||(_={}));var Fr=(r,e={message:`Input not instance of ${r.name}`})=>qt(t=>t instanceof r,e),Dt=K.create,Zt=ee.create,Hr=Se.create,zr=te.create,Ft=re.create,Br=se.create,Jr=xe.create,Wr=ne.create,Yr=ae.create,Kr=G.create,Gr=B.create,Xr=P.create,Qr=be.create,es=J.create,ts=A.create,rs=A.strictCreate,ss=ie.create,ns=Ue.create,as=oe.create,is=q.create,os=qe.create,cs=we.create,ls=ke.create,ds=De.create,us=ce.create,ps=le.create,hs=de.create,fs=ue.create,ms=X.create,gs=L.create,_s=j.create,ys=D.create,vs=L.createWithPreprocess,xs=Ie.create,bs=()=>Dt().optional(),ws=()=>Zt().optional(),ks=()=>Ft().optional(),Ss={string:r=>K.create({...r,coerce:!0}),number:r=>ee.create({...r,coerce:!0}),boolean:r=>re.create({...r,coerce:!0}),bigint:r=>te.create({...r,coerce:!0}),date:r=>se.create({...r,coerce:!0})};var Ts=g;var ft="2024-11-05",Ht=[ft,"2024-10-07"],Ze="2.0",zt=i.union([i.string(),i.number().int()]),Bt=i.string(),M=i.object({_meta:i.optional(i.object({progressToken:i.optional(zt)}).passthrough())}).passthrough(),N=i.object({method:i.string(),params:i.optional(M)}),Ae=i.object({_meta:i.optional(i.object({}).passthrough())}).passthrough(),Z=i.object({method:i.string(),params:i.optional(Ae)}),V=i.object({_meta:i.optional(i.object({}).passthrough())}).passthrough(),Fe=i.union([i.string(),i.number().int()]),Rs=i.object({jsonrpc:i.literal(Ze),id:Fe}).merge(N).strict(),Es=i.object({jsonrpc:i.literal(Ze)}).merge(Z).strict(),Cs=i.object({jsonrpc:i.literal(Ze),id:Fe,result:V}).strict(),me;(function(r){r[r.ConnectionClosed=-1]="ConnectionClosed",r[r.RequestTimeout=-2]="RequestTimeout",r[r.ParseError=-32700]="ParseError",r[r.InvalidRequest=-32600]="InvalidRequest",r[r.MethodNotFound=-32601]="MethodNotFound",r[r.InvalidParams=-32602]="InvalidParams",r[r.InternalError=-32603]="InternalError"})(me||(me={}));var Is=i.object({jsonrpc:i.literal(Ze),id:Fe,error:i.object({code:i.number().int(),message:i.string(),data:i.optional(i.unknown())})}).strict(),Jt=i.union([Rs,Es,Cs,Is]),He=V.strict(),ze=Z.extend({method:i.literal("notifications/cancelled"),params:Ae.extend({requestId:Fe,reason:i.string().optional()})}),Wt=i.object({name:i.string(),version:i.string()}).passthrough(),As=i.object({experimental:i.optional(i.object({}).passthrough()),sampling:i.optional(i.object({}).passthrough()),roots:i.optional(i.object({listChanged:i.optional(i.boolean())}).passthrough())}).passthrough(),mt=N.extend({method:i.literal("initialize"),params:M.extend({protocolVersion:i.string(),capabilities:As,clientInfo:Wt})}),Os=i.object({experimental:i.optional(i.object({}).passthrough()),logging:i.optional(i.object({}).passthrough()),prompts:i.optional(i.object({listChanged:i.optional(i.boolean())}).passthrough()),resources:i.optional(i.object({subscribe:i.optional(i.boolean()),listChanged:i.optional(i.boolean())}).passthrough()),tools:i.optional(i.object({listChanged:i.optional(i.boolean())}).passthrough())}).passthrough(),Ns=V.extend({protocolVersion:i.string(),capabilities:Os,serverInfo:Wt}),gt=Z.extend({method:i.literal("notifications/initialized")}),Be=N.extend({method:i.literal("ping")}),js=i.object({progress:i.number(),total:i.optional(i.number())}).passthrough(),Je=Z.extend({method:i.literal("notifications/progress"),params:Ae.merge(js).extend({progressToken:zt})}),We=N.extend({params:M.extend({cursor:i.optional(Bt)}).optional()}),Ye=V.extend({nextCursor:i.optional(Bt)}),Yt=i.object({uri:i.string(),mimeType:i.optional(i.string())}).passthrough(),Kt=Yt.extend({text:i.string()}),Gt=Yt.extend({blob:i.string().base64()}),$s=i.object({uri:i.string(),name:i.string(),description:i.optional(i.string()),mimeType:i.optional(i.string())}).passthrough(),Ls=i.object({uriTemplate:i.string(),name:i.string(),description:i.optional(i.string()),mimeType:i.optional(i.string())}).passthrough(),Ps=We.extend({method:i.literal("resources/list")}),Ms=Ye.extend({resources:i.array($s)}),Vs=We.extend({method:i.literal("resources/templates/list")}),Us=Ye.extend({resourceTemplates:i.array(Ls)}),qs=N.extend({method:i.literal("resources/read"),params:M.extend({uri:i.string()})}),Ds=V.extend({contents:i.array(i.union([Kt,Gt]))}),Zs=Z.extend({method:i.literal("notifications/resources/list_changed")}),Fs=N.extend({method:i.literal("resources/subscribe"),params:M.extend({uri:i.string()})}),Hs=N.extend({method:i.literal("resources/unsubscribe"),params:M.extend({uri:i.string()})}),zs=Z.extend({method:i.literal("notifications/resources/updated"),params:Ae.extend({uri:i.string()})}),Bs=i.object({name:i.string(),description:i.optional(i.string()),required:i.optional(i.boolean())}).passthrough(),Js=i.object({name:i.string(),description:i.optional(i.string()),arguments:i.optional(i.array(Bs))}).passthrough(),Ws=We.extend({method:i.literal("prompts/list")}),Ys=Ye.extend({prompts:i.array(Js)}),Ks=N.extend({method:i.literal("prompts/get"),params:M.extend({name:i.string(),arguments:i.optional(i.record(i.string()))})}),Ke=i.object({type:i.literal("text"),text:i.string()}).passthrough(),Ge=i.object({type:i.literal("image"),data:i.string().base64(),mimeType:i.string()}).passthrough(),Xt=i.object({type:i.literal("resource"),resource:i.union([Kt,Gt])}).passthrough(),Gs=i.object({role:i.enum(["user","assistant"]),content:i.union([Ke,Ge,Xt])}).passthrough(),Xs=V.extend({description:i.optional(i.string()),messages:i.array(Gs)}),Qs=Z.extend({method:i.literal("notifications/prompts/list_changed")}),en=i.object({name:i.string(),description:i.optional(i.string()),inputSchema:i.object({type:i.literal("object"),properties:i.optional(i.object({}).passthrough())}).passthrough()}).passthrough(),_t=We.extend({method:i.literal("tools/list")}),tn=Ye.extend({tools:i.array(en)}),Qt=V.extend({content:i.array(i.union([Ke,Ge,Xt])),isError:i.boolean().default(!1).optional()}),_a=Qt.or(V.extend({toolResult:i.unknown()})),yt=N.extend({method:i.literal("tools/call"),params:M.extend({name:i.string(),arguments:i.optional(i.record(i.unknown()))})}),rn=Z.extend({method:i.literal("notifications/tools/list_changed")}),er=i.enum(["debug","info","notice","warning","error","critical","alert","emergency"]),sn=N.extend({method:i.literal("logging/setLevel"),params:M.extend({level:er})}),nn=Z.extend({method:i.literal("notifications/message"),params:Ae.extend({level:er,logger:i.optional(i.string()),data:i.unknown()})}),an=i.object({name:i.string().optional()}).passthrough(),on=i.object({hints:i.optional(i.array(an)),costPriority:i.optional(i.number().min(0).max(1)),speedPriority:i.optional(i.number().min(0).max(1)),intelligencePriority:i.optional(i.number().min(0).max(1))}).passthrough(),cn=i.object({role:i.enum(["user","assistant"]),content:i.union([Ke,Ge])}).passthrough(),ln=N.extend({method:i.literal("sampling/createMessage"),params:M.extend({messages:i.array(cn),systemPrompt:i.optional(i.string()),includeContext:i.optional(i.enum(["none","thisServer","allServers"])),temperature:i.optional(i.number()),maxTokens:i.number().int(),stopSequences:i.optional(i.array(i.string())),metadata:i.optional(i.object({}).passthrough()),modelPreferences:i.optional(on)})}),vt=V.extend({model:i.string(),stopReason:i.optional(i.enum(["endTurn","stopSequence","maxTokens"]).or(i.string())),role:i.enum(["user","assistant"]),content:i.discriminatedUnion("type",[Ke,Ge])}),dn=i.object({type:i.literal("ref/resource"),uri:i.string()}).passthrough(),un=i.object({type:i.literal("ref/prompt"),name:i.string()}).passthrough(),pn=N.extend({method:i.literal("completion/complete"),params:M.extend({ref:i.union([un,dn]),argument:i.object({name:i.string(),value:i.string()}).passthrough()})}),hn=V.extend({completion:i.object({values:i.array(i.string()).max(100),total:i.optional(i.number().int()),hasMore:i.optional(i.boolean())}).passthrough()}),fn=i.object({uri:i.string().startsWith("file://"),name:i.optional(i.string())}).passthrough(),mn=N.extend({method:i.literal("roots/list")}),xt=V.extend({roots:i.array(fn)}),gn=Z.extend({method:i.literal("notifications/roots/list_changed")}),ya=i.union([Be,mt,pn,sn,Ks,Ws,Ps,Vs,qs,Fs,Hs,yt,_t]),va=i.union([ze,Je,gt,gn]),xa=i.union([He,vt,xt]),ba=i.union([Be,ln,mn]),wa=i.union([ze,Je,nn,zs,Zs,rn,Qs]),ka=i.union([He,Ns,hn,Xs,Ys,Ms,Us,Ds,Qt,tn]),Te=class extends Error{constructor(e,t,s){super(`MCP error ${e}: ${t}`),this.code=e,this.data=s}};var _n=6e4,Xe=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this.setNotificationHandler(ze,t=>{let s=this._requestHandlerAbortControllers.get(t.params.requestId);s?.abort(t.params.reason)}),this.setNotificationHandler(Je,t=>{this._onprogress(t)}),this.setRequestHandler(Be,t=>({}))}async connect(e){this._transport=e,this._transport.onclose=()=>{this._onclose()},this._transport.onerror=t=>{this._onerror(t)},this._transport.onmessage=t=>{"method"in t?"id"in t?this._onrequest(t):this._onnotification(t):this._onresponse(t)},await this._transport.start()}_onclose(){var e;let t=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._transport=void 0,(e=this.onclose)===null||e===void 0||e.call(this);let s=new Te(me.ConnectionClosed,"Connection closed");for(let n of t.values())n(s)}_onerror(e){var t;(t=this.onerror)===null||t===void 0||t.call(this,e)}_onnotification(e){var t;let s=(t=this._notificationHandlers.get(e.method))!==null&&t!==void 0?t:this.fallbackNotificationHandler;s!==void 0&&Promise.resolve().then(()=>s(e)).catch(n=>this._onerror(new Error(`Uncaught error in notification handler: ${n}`)))}_onrequest(e){var t,s;let n=(t=this._requestHandlers.get(e.method))!==null&&t!==void 0?t:this.fallbackRequestHandler;if(n===void 0){(s=this._transport)===null||s===void 0||s.send({jsonrpc:"2.0",id:e.id,error:{code:me.MethodNotFound,message:"Method not found"}}).catch(c=>this._onerror(new Error(`Failed to send an error response: ${c}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(e.id,a),Promise.resolve().then(()=>n(e,{signal:a.signal})).then(c=>{var o;if(!a.signal.aborted)return(o=this._transport)===null||o===void 0?void 0:o.send({result:c,jsonrpc:"2.0",id:e.id})},c=>{var o,l;if(!a.signal.aborted)return(o=this._transport)===null||o===void 0?void 0:o.send({jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(c.code)?c.code:me.InternalError,message:(l=c.message)!==null&&l!==void 0?l:"Internal error"}})}).catch(c=>this._onerror(new Error(`Failed to send response: ${c}`))).finally(()=>{this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progress:t,total:s,progressToken:n}=e.params,a=this._progressHandlers.get(Number(n));if(a===void 0){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}a({progress:t,total:s})}_onresponse(e){let t=e.id,s=this._responseHandlers.get(Number(t));if(s===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}if(this._responseHandlers.delete(Number(t)),this._progressHandlers.delete(Number(t)),"result"in e)s(e);else{let n=new Te(e.error.code,e.error.message,e.error.data);s(n)}}get transport(){return this._transport}async close(){var e;await((e=this._transport)===null||e===void 0?void 0:e.close())}request(e,t,s){return new Promise((n,a)=>{var c,o,l,d;if(!this._transport){a(new Error("Not connected"));return}((c=this._options)===null||c===void 0?void 0:c.enforceStrictCapabilities)===!0&&this.assertCapabilityForMethod(e.method),(o=s?.signal)===null||o===void 0||o.throwIfAborted();let f=this._requestMessageId++,x={...e,jsonrpc:"2.0",id:f};s?.onprogress&&(this._progressHandlers.set(f,s.onprogress),x.params={...e.params,_meta:{progressToken:f}});let S;this._responseHandlers.set(f,T=>{var C;if(S!==void 0&&clearTimeout(S),!(!((C=s?.signal)===null||C===void 0)&&C.aborted)){if(T instanceof Error)return a(T);try{let F=t.parse(T.result);n(F)}catch(F){a(F)}}});let w=T=>{var C;this._responseHandlers.delete(f),this._progressHandlers.delete(f),(C=this._transport)===null||C===void 0||C.send({jsonrpc:"2.0",method:"cancelled",params:{requestId:f,reason:String(T)}}).catch(F=>this._onerror(new Error(`Failed to send cancellation: ${F}`))),a(T)};(l=s?.signal)===null||l===void 0||l.addEventListener("abort",()=>{var T;S!==void 0&&clearTimeout(S),w((T=s?.signal)===null||T===void 0?void 0:T.reason)});let k=(d=s?.timeout)!==null&&d!==void 0?d:_n;S=setTimeout(()=>w(new Te(me.RequestTimeout,"Request timed out",{timeout:k})),k),this._transport.send(x).catch(T=>{S!==void 0&&clearTimeout(S),a(T)})})}async notification(e){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let t={...e,jsonrpc:"2.0"};await this._transport.send(t)}setRequestHandler(e,t){let s=e.shape.method.value;this.assertRequestHandlerCapability(s),this._requestHandlers.set(s,(n,a)=>Promise.resolve(t(e.parse(n),a)))}removeRequestHandler(e){this._requestHandlers.delete(e)}setNotificationHandler(e,t){this._notificationHandlers.set(e.shape.method.value,s=>Promise.resolve(t(e.parse(s))))}removeNotificationHandler(e){this._notificationHandlers.delete(e)}};var Qe=class extends Xe{constructor(e,t){super(t),this._serverInfo=e,this._capabilities=t.capabilities,this.setRequestHandler(mt,s=>this._oninitialize(s)),this.setNotificationHandler(gt,()=>{var s;return(s=this.oninitialized)===null||s===void 0?void 0:s.call(this)})}assertCapabilityForMethod(e){var t,s;switch(e){case"sampling/createMessage":if(!(!((t=this._clientCapabilities)===null||t===void 0)&&t.sampling))throw new Error(`Client does not support sampling (required for ${e})`);break;case"roots/list":if(!(!((s=this._clientCapabilities)===null||s===void 0)&&s.roots))throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){switch(e){case"sampling/createMessage":if(!this._capabilities.sampling)throw new Error(`Server does not support sampling (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"ping":case"initialize":break}}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:Ht.includes(t)?t:ft,capabilities:this.getCapabilities(),serverInfo:this._serverInfo}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},He)}async createMessage(e,t){return this.request({method:"sampling/createMessage",params:e},vt,t)}async listRoots(e,t){return this.request({method:"roots/list",params:e},xt,t)}async sendLoggingMessage(e){return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};import rr from"node:process";var et=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(` `);if(e===-1)return null;let t=this._buffer.toString("utf8",0,e);return this._buffer=this._buffer.subarray(e+1),yn(t)}clear(){this._buffer=void 0}};function yn(r){return Jt.parse(JSON.parse(r))}function tr(r){return JSON.stringify(r)+` -`}var tt=class{constructor(e=rr.stdin,t=rr.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new et,this._started=!1,this._ondata=s=>{this._readBuffer.append(s),this.processReadBuffer()},this._onerror=s=>{var n;(n=this.onerror)===null||n===void 0||n.call(this,s)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(var e,t;;)try{let s=this._readBuffer.readMessage();if(s===null)break;(e=this.onmessage)===null||e===void 0||e.call(this,s)}catch(s){(t=this.onerror)===null||t===void 0||t.call(this,s)}}async close(){var e;this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._readBuffer.clear(),(e=this.onclose)===null||e===void 0||e.call(this)}send(e){return new Promise(t=>{let s=tr(e);this._stdout.write(s)?t():this._stdout.once("drain",t)})}};var Et={};Nt(Et,{getAgent:()=>nr,getDeploymentStatus:()=>dr,listAgents:()=>sr,listPrimitiveVersions:()=>cr,tailLogs:()=>ur});import{spawn as vn}from"node:child_process";var xn=6e4;function bn(r,{spawnFn:e=vn,timeoutMs:t=xn,label:s="lua"}={}){return new Promise((n,a)=>{let c=e("lua",r,{shell:process.platform==="win32",windowsHide:!0,env:{...process.env,LUA_NO_BANNER:"1",LUA_NO_HINTS:"1"}}),o="",l="";c.stdout.on("data",f=>{o+=f.toString("utf8")}),c.stderr.on("data",f=>{l+=f.toString("utf8")});let d=setTimeout(()=>{c.kill("SIGTERM"),a(new Error(`${s}: 'lua ${r.join(" ")}' timed out after ${t}ms`))},t);c.on("exit",f=>{clearTimeout(d),f!==0?a(new Error(`'lua ${r.join(" ")}' exited ${f}: ${l.trim()}`)):n(o)}),c.on("error",f=>{clearTimeout(d),a(f)})})}function wn(r){let e=r,t=Array.isArray(e)?e:e?.agents??e?.orgs??[];return t.length>0&&t[0]&&Array.isArray(t[0].agents)?t.flatMap(n=>(n.agents??[]).map(a=>({id:a.agentId??a.id??a._id,name:a.name??null,orgId:n.orgId??n.id??n._id??null,orgName:n.name??n.registeredName??null,visibility:a.visibility??null}))):t.map(n=>({id:n.agentId??n.id??n._id,name:n.name??null,orgId:n.orgId??null,orgName:n.orgName??null,visibility:n.visibility??null}))}async function rt({spawnFn:r,label:e="list_agents"}={}){let t=await bn(["agents","--json","--ci"],{spawnFn:r,label:e}),s;try{s=JSON.parse(t)}catch(n){throw new Error(`${e}: could not parse 'lua agents --json' output: ${n.message}`)}return wn(s)}var sr={spec:{name:"list_agents",description:"List all Lua agents the authenticated credential can reach. Returns a compact array of {id, name, orgId, orgName, visibility} flattened across all organisations. Same data as `lua agents --json` \u2014 it resolves every organisation, so on accounts with many orgs this takes 20 s or more; prefer get_agent when you already know the id.",inputSchema:{type:"object",properties:{},required:[]}},async handler(r,e={}){let t=await rt({spawnFn:e.spawnFn,label:"list_agents"});return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}};var nr={spec:{name:"get_agent",description:"Look up one Lua agent by ID and return {id, name, orgId, orgName, visibility}. For what is live use get_deployment_status / list_primitive_versions; for logs use tail_logs.",inputSchema:{type:"object",properties:{agentId:{type:"string",description:"Agent ID (the `id` field from list_agents; also `agent.agentId` in lua.skill.yaml)"}},required:["agentId"]}},async handler({agentId:r},e={}){if(!r)throw new Error("agentId is required");let s=(await rt({spawnFn:e.spawnFn,label:"get_agent"})).find(n=>n.id===r)??null;if(!s)throw new Error(`get_agent: no agent with id "${r}" found in the authenticated credential's accessible orgs. Run list_agents to see available agents.`);return{content:[{type:"text",text:JSON.stringify(s,null,2)}]}}};import{readFile as bt,readdir as kn,stat as Sn}from"node:fs/promises";import{join as st,dirname as Tn}from"node:path";import{homedir as Rn}from"node:os";var En="https://api.heylua.ai",Cn="https://securetoken.googleapis.com/v1/token",In=15e3,An=6e4,On=["TOKEN_EXPIRED","USER_DISABLED","USER_NOT_FOUND","INVALID_REFRESH_TOKEN","INVALID_GRANT_TYPE","MISSING_REFRESH_TOKEN"],ar=new Map;function Nn(r){for(let e of r.split(/\r?\n/)){let t=e.match(/^\s*(?:export\s+)?LUA_API_KEY\s*=\s*(.*)$/);if(!t)continue;let s=t[1].trim(),n=s.match(/^(['"`])(.*?)\1(?:\s+#.*)?\s*$/);return n?s=n[2]:s=s.replace(/\s+#.*$/,"").trim(),s||null}return null}async function jn({sessionsDir:r,apiUrl:e}){let t;try{t=await kn(r)}catch{return null}let s=[];for(let n of t){if(!n.endsWith(".json")||n.startsWith("."))continue;let a=st(r,n);try{let c=JSON.parse(await bt(a,"utf8"));if(c?.kind!=="firebase-session"||c?.version!==1||typeof c.refreshToken!="string"||!c.refreshToken||typeof c.firebaseWebApiKey!="string"||!c.firebaseWebApiKey||c.apiUrl!==e)continue;let{mtimeMs:o}=await Sn(a);s.push({path:a,session:c,mtimeMs:o})}catch{}}return s.length===0?null:(s.sort((n,a)=>a.mtimeMs-n.mtimeMs),{path:s[0].path,session:s[0].session})}async function $n({path:r,session:e,fetchFn:t=globalThis.fetch,now:s=Date.now}){let n=ar.get(r);if(n&&n.expiresAt-s()>An)return n.idToken;let a=new AbortController,c=setTimeout(()=>a.abort(),In),o;try{o=await t(`${Cn}?key=${encodeURIComponent(e.firebaseWebApiKey)}`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e.refreshToken}).toString(),signal:a.signal})}catch(x){throw new Error(`MCP_AUTH_UNAVAILABLE: could not refresh the lua-cli session (${x?.name==="AbortError"?"timed out":x.message}). Check your network, or set LUA_API_KEY to bypass the session.`)}finally{clearTimeout(c)}if(!o.ok){let x=o.statusText??String(o.status);try{let k=(await o.json())?.error?.message;typeof k=="string"&&k&&(x=k.split(":")[0].trim())}catch{}let S=o.status<500&&On.find(w=>x.toUpperCase().includes(w));throw S?new Error(`MCP_AUTH_STALE: your lua-cli session was signed out (${S}). Signing out of the Lua dashboard, desktop or mobile app also ends CLI sessions. Run \`lua auth configure\` in a terminal to sign in again.`):new Error(`MCP_AUTH_UNAVAILABLE: lua-cli session refresh failed (${o.status} ${x}). Retry in a moment.`)}let l=await o.json(),d=l?.id_token,f=Number(l?.expires_in);if(typeof d!="string"||!d||!Number.isFinite(f)||f<=0)throw new Error("MCP_AUTH_UNAVAILABLE: the session refresh returned an invalid token. Run `lua auth configure` again.");return ar.set(r,{idToken:d,expiresAt:s()+f*1e3}),d}async function ir({env:r=process.env,credentialsPath:e=r.LUA_CREDENTIALS_PATH??st(Rn(),".lua-cli","credentials"),sessionsDir:t=r.LUA_SESSIONS_DIR??st(Tn(e),"sessions"),cwd:s=process.cwd(),apiUrl:n=r.LUA_API_URL||En,fetchFn:a=globalThis.fetch,now:c=Date.now}={}){if(r.LUA_API_KEY&&r.LUA_API_KEY.trim())return r.LUA_API_KEY.trim();try{let l=Nn(await bt(st(s,".env"),"utf8"));if(l)return l}catch{}let o=await jn({sessionsDir:t,apiUrl:n});if(o)return $n({...o,fetchFn:a,now:c});try{let l=(await bt(e,"utf8")).trim();if(l){if(l.startsWith("{"))try{let d=JSON.parse(l);if(d?.apiKey)return d.apiKey}catch{}return l}}catch{}throw new Error("MCP_AUTH_STALE: No lua-cli credentials found in LUA_API_KEY, .env, ~/.lua-cli/sessions, or ~/.lua-cli/credentials. Run `lua auth configure` in a terminal (or /lua-auth in Claude Code).")}var Ln="https://api.heylua.ai",Pn=1e4,Ba=Object.freeze({skills:"automations:read",webhooks:"automations:read",jobs:"automations:read",triggers:"automations:read",preprocessors:"automations:read",postprocessors:"automations:read",workflows:"workflows:read",persona:"agents:read",logs:"knowledge:read"}),Mn="skills/webhooks/jobs/triggers/preprocessors/postprocessors need automations:read, workflows need workflows:read, persona needs agents:read, logs need knowledge:read";async function ge(r,{method:e="GET",body:t,query:s,fetchFn:n=globalThis.fetch,baseUrl:a=process.env.LUA_API_URL||Ln,timeoutMs:c=Pn}={}){let o=await ir(),l=new URL(a.replace(/\/$/,"")+r);if(s)for(let[x,S]of Object.entries(s))l.searchParams.set(x,String(S));let d=new AbortController,f=setTimeout(()=>d.abort(),c);try{let x=await n(l.toString(),{method:e,headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","X-Lua-Client":"claude-plugin/1.12.0"},body:t?JSON.stringify(t):void 0,signal:d.signal});if(x.status===401)throw new Error("MCP_AUTH_STALE: lua-api returned 401. The credential is missing, expired, or the session was signed out (signing out of the Lua dashboard or apps also ends CLI sessions). Run `lua auth configure` in a terminal, or re-run /lua-doctor.");if(x.status===403)throw new Error(`MCP_FORBIDDEN: lua-api returned 403 for ${r}. The credential cannot access this agent or org, or it lacks the route scope (${Mn} \u2014 typed keys are scoped to the agents and role chosen at \`lua auth configure\`). Re-run /lua-doctor or check the LUA_API_KEY env var.`);if(!x.ok){let S=await x.text(),w=S;try{let k=JSON.parse(S);w=k?.error?.message??k?.message??S;let T=k?.error?.code;typeof T=="string"&&T&&!String(w).includes(T)&&(w=`${T}: ${w}`)}catch{}throw new Error(`lua-api ${x.status}: ${w}`)}return await x.json()}catch(x){throw x.name==="AbortError"?new Error(`MCP_TIMEOUT: ${r} did not respond in ${c}ms`):x}finally{clearTimeout(f)}}var wt={skill:r=>r?.skills??[],webhook:r=>r?.data?.webhooks??[],job:r=>r?.data?.jobs??[],trigger:r=>r?.data?.triggers??[],preprocessor:r=>r?.data?.preprocessors??[],postprocessor:r=>r?.data?.postprocessors??[],workflow:r=>r?.data?.workflows??[]},kt={skill:r=>r?.versions??[],webhook:r=>r?.data?.versions??[],job:r=>Array.isArray(r?.data)?r.data:[],trigger:r=>r?.data?.versions??[],preprocessor:r=>r?.data?.versions??[],postprocessor:r=>r?.data?.versions??[],workflow:r=>Array.isArray(r?.data)?r.data:[],persona:r=>r?.versions??[]},Re={skill:"skills",webhook:"webhooks",job:"jobs",trigger:"triggers",preprocessor:"preprocessors",postprocessor:"postprocessors",workflow:"workflows"};function nt(r,e){let t=wt[r];if(!t)throw new Error(`extractList: unknown primitive type "${r}". Valid: ${Object.keys(wt).join(", ")}`);return t(e)}function Oe(r,e){let t=kt[r];if(!t)throw new Error(`extractVersions: unknown primitive type "${r}". Valid: ${Object.keys(kt).join(", ")}`);return t(e)}function Ne(r){let e=r?.data?.activeVersionId;return typeof e=="string"&&e?e:null}function je(r,e,t){if(!e||typeof e!="object")return!1;switch(r){case"skill":case"persona":return e.isCurrent===!0;case"job":case"workflow":return e.active===!0;case"webhook":case"trigger":case"preprocessor":case"postprocessor":{if(e.isActive===!0)return!0;let s=Ne(t),n=e.versionId??e.id??null;return!!s&&n===s}default:return!1}}function $e(r){if(!r||typeof r!="object")return null;let e=r.createdAt??r.createdDate??null;return e==null?null:typeof e=="number"?Number.isFinite(e)?new Date(e).toISOString():null:String(e)}function at(r){return!r||typeof r!="object"?null:r.versionId??r.id??null}var Wa=Object.keys(wt),or=Object.keys(kt);var St=new Set(or),cr={spec:{name:"list_primitive_versions",description:"List the server-side versions of one primitive (skill, webhook, job, trigger, preprocessor, postprocessor, workflow) or the agent persona. Returns { activeVersionId, versions: [{version, versionId, active, createdAt}] } \u2014 `active` is the version currently live. `versionId` is null for types whose versions route carries no per-entry id: skill, persona and webhook (the webhook route exposes the row id only under a misnamed `webhookId` key). For those, identify a version by `version`; for webhooks the live row id is the top-level `activeVersionId`. `activeVersionId` is populated only for webhook, trigger, preprocessor and postprocessor envelopes and is null for skill, job, workflow and persona.",inputSchema:{type:"object",properties:{agentId:{type:"string"},type:{type:"string",enum:[...St]},name:{type:"string",description:"Primitive name as written in lua.skill.yaml (omit for persona \u2014 an agent has only one)"}},required:["agentId","type"]}},async handler({agentId:r,type:e,name:t},s={}){if(!r||!e)throw new Error("agentId and type are required");if(!St.has(e))throw new Error(`Invalid type: ${e}. Valid: ${[...St].join(", ")}`);if(e!=="persona"&&!t)throw new Error("name is required for all types except persona");let n;if(e==="persona")n=`/developer/agents/${encodeURIComponent(r)}/persona/versions`;else{let d=await Vn({agentId:r,type:e,name:t,fetchFn:s.fetchFn});n=`/developer/${Re[e]}/${encodeURIComponent(r)}/${encodeURIComponent(d)}/versions`}let a=await ge(n,{fetchFn:s.fetchFn}),o=Oe(e,a).map(d=>({version:d.version,versionId:at(d),active:je(e,d,a),createdAt:$e(d)})),l={agentId:r,type:e,name:e==="persona"?null:t,activeVersionId:Ne(a),versions:o};return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}}};async function Vn({agentId:r,type:e,name:t,fetchFn:s}){let n=`/developer/${Re[e]}/${encodeURIComponent(r)}`,a=await ge(n,{fetchFn:s}),c=nt(e,a),o=c.find(d=>d.name===t);if(!o){let d=c.map(f=>f.name).filter(Boolean).join(", ")||"(none)";throw new Error(`list_primitive_versions: no ${e} named "${t}" on agent ${r}. Available: ${d}`)}let l=o.id??o._id;if(!l)throw new Error(`list_primitive_versions: ${e} "${t}" exists but has no id field`);return l}var it=["skill","webhook","job","trigger","preprocessor","postprocessor","workflow"],lr=5,Un=45e3,dr={spec:{name:"get_deployment_status",description:'What is live right now for an agent: for every skill, webhook, job, trigger, preprocessor, postprocessor and workflow the active (deployed) version, plus the active persona version. Composed from the per-type lua-api version routes (list calls in parallel, then per-item version lookups in chunks of 5). Bounded by a 45 s wall-clock budget: if exceeded, remaining items are listed with `error: "skipped: \u2026"` and the result carries `partial: true` + `partialReason`. Inside a project, `lua status --json` additionally compares local vs deployed.',inputSchema:{type:"object",properties:{agentId:{type:"string"}},required:["agentId"]}},async handler({agentId:r},e={}){if(!r)throw new Error("agentId is required");let t=encodeURIComponent(r),s=Number.isFinite(e.budgetMs)?e.budgetMs:Un,n=Date.now(),a=()=>Date.now()-n>s,c=w=>ge(w,{fetchFn:e.fetchFn}),o={agentId:r,persona:null,primitives:{}};for(let w of it)o.primitives[w]=[];let[l,...d]=await Promise.allSettled([c(`/developer/agents/${t}/persona/versions`),...it.map(w=>c(`/developer/${Re[w]}/${t}`))]);if(l.status==="fulfilled"){let w=l.value,k=Oe("persona",w),T=k.find(C=>je("persona",C,w))??null;o.persona={activeVersion:T?.version??null,activeVersionCreatedAt:$e(T),versionCount:k.length}}else o.persona={error:l.reason?.message??String(l.reason)};let f=!1,x=0,S=0;for(let w=0;w({p:O,primId:O.id??O._id,name:O.name??O.id??O._id})).filter(O=>O.primId);S+=F.length;for(let O=0;Oc(`/developer/${T}/${t}/${encodeURIComponent(W)}/versions`)))).forEach((W,ot)=>{let{p:Pe,primId:It,name:At}=Le[ot];if(W.status!=="fulfilled"){o.primitives[k].push({name:At,id:It,error:W.reason?.message??String(W.reason)});return}let ct=W.value,Ot=Oe(k,ct),lt=Ot.find(fr=>je(k,fr,ct))??null,dt={name:At,id:It,activeVersion:lt?.version??null,activeVersionId:at(lt)??Ne(ct),activeVersionCreatedAt:$e(lt),versionCount:Ot.length};typeof Pe.active=="boolean"&&(dt.enabled=Pe.active),k==="workflow"&&typeof Pe.dynamic=="boolean"&&(dt.dynamic=Pe.dynamic),o.primitives[k].push(dt)})}}return x>0&&(o.partial=!0,o.partialReason=`Wall-clock budget of ${s}ms exceeded after ${Date.now()-n}ms; ${x} of ${S} version lookups were not issued (entries carry error: "skipped: \u2026").`),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}};var qn=["skill","job","webhook","trigger","preprocessor","postprocessor","user_message","agent_response","agent_error","runtime","mcp","rag","device","device-trigger","model-resolver","workflow-step","workflow-script","workflow"],Rt=["error","warn","info","debug","start","complete"],Tt=new Set(["all",...qn]),Dn=new Set(Rt),ur={spec:{name:"tail_logs",description:"Fetch recent execution logs for an agent (same data as `lua logs --json`). Returns { logs: LogEntry[], pagination }. Each LogEntry has `subType` (error | warn | info | debug | start | complete), `message`, `timestamp`, and `metadata.logSource` / `metadata.primitiveName` \u2014 there is NO `level` field. Filter by source (`type`), primitive (`name`) and/or severity (`logType`, which filters on `subType`).",inputSchema:{type:"object",properties:{agentId:{type:"string"},type:{type:"string",enum:[...Tt],default:"all",description:"Log source filter (maps to lua-api `logSource`). `all` = no filter."},name:{type:"string",description:"Filter by primitive name (optional; maps to `primitiveName`)"},logType:{type:"string",enum:Rt,description:"Filter by LogEntry `subType` (optional; maps to lua-api `logType`). Omit for every severity. e.g. `error` to see only failures."},limit:{type:"number",default:50,minimum:1,maximum:100},page:{type:"number",minimum:1,description:"Page number for pagination (optional)"}},required:["agentId"]}},async handler({agentId:r,type:e="all",name:t,logType:s,limit:n=50,page:a},c={}){if(!r)throw new Error("agentId is required");if(!Tt.has(e))throw new Error(`Invalid type: ${e}. Valid: ${[...Tt].join(", ")}`);if(s!==void 0&&!Dn.has(s))throw new Error(`Invalid logType: ${s}. Valid: ${Rt.join(", ")}`);if(n>100)throw new Error(`Invalid limit: ${n}. lua-api caps logs at 100 entries per call.`);let o={limit:n};e!=="all"&&(o.logSource=e),t&&(o.primitiveName=t),s&&(o.logType=s),a&&(o.page=a);let l=await ge(`/developer/agents/${encodeURIComponent(r)}/logs`,{query:o,fetchFn:c.fetchFn});return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}}};var pr=Object.values(Et),Ct=new Qe({name:"lua-platform",version:"1.12.0"},{capabilities:{tools:{}}});Ct.setRequestHandler(_t,async()=>({tools:pr.map(r=>r.spec)}));Ct.setRequestHandler(yt,async r=>{let e=pr.find(t=>t.spec.name===r.params.name);if(!e)throw new Error(`Unknown tool: ${r.params.name}`);try{return await e.handler(r.params.arguments??{})}catch(t){return{content:[{type:"text",text:`Error: ${t.message}`}],isError:!0}}});function hr(r){process.stderr.write(JSON.stringify(r)+` -`,()=>process.exit(1))}process.on("uncaughtException",r=>{hr({event:"mcp_server_crash",kind:"uncaughtException",message:r?.message,stack:r?.stack,plugin_version:"1.12.0",lua_cli_version:process.env.LUA_CLI_VERSION??null,platform:process.platform,ts:new Date().toISOString()})});process.on("unhandledRejection",r=>{hr({event:"mcp_server_crash",kind:"unhandledRejection",reason:String(r),stack:r?.stack,plugin_version:"1.12.0",lua_cli_version:process.env.LUA_CLI_VERSION??null,platform:process.platform,ts:new Date().toISOString()})});await Ct.connect(new tt); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3pvZC92My9leHRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL2hlbHBlcnMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL1pvZEVycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy96b2QvdjMvbG9jYWxlcy9lbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL2hlbHBlcnMvcGFyc2VVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy96b2QvdjMvaGVscGVycy9lcnJvclV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3pvZC92My90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zcmMvdHlwZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc3JjL3NoYXJlZC9wcm90b2NvbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zcmMvc2VydmVyL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NyYy9zZXJ2ZXIvc3RkaW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc3JjL3NoYXJlZC9zdGRpby50cyIsICIuLi9zcmMvdG9vbHMvaW5kZXgubWpzIiwgIi4uL3NyYy9ydW4tbHVhLm1qcyIsICIuLi9zcmMvdG9vbHMvbGlzdC1hZ2VudHMubWpzIiwgIi4uL3NyYy90b29scy9nZXQtYWdlbnQubWpzIiwgIi4uL3NyYy9hdXRoLm1qcyIsICIuLi9zcmMvYXBpLWNsaWVudC5tanMiLCAiLi4vc3JjL3Jlc3BvbnNlLXNoYXBlcy5tanMiLCAiLi4vc3JjL3Rvb2xzL2xpc3QtcHJpbWl0aXZlLXZlcnNpb25zLm1qcyIsICIuLi9zcmMvdG9vbHMvZ2V0LWRlcGxveW1lbnQtc3RhdHVzLm1qcyIsICIuLi9zcmMvdG9vbHMvdGFpbC1sb2dzLm1qcyIsICIuLi9zcmMvc2VydmVyLm1qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9oZWxwZXJzL3BhcnNlVXRpbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscGVycy90eXBlQWxpYXNlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscGVycy91dGlsLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vWm9kRXJyb3IuanNcIjtcbiIsICJleHBvcnQgdmFyIHV0aWw7XG4oZnVuY3Rpb24gKHV0aWwpIHtcbiAgICB1dGlsLmFzc2VydEVxdWFsID0gKF8pID0+IHsgfTtcbiAgICBmdW5jdGlvbiBhc3NlcnRJcyhfYXJnKSB7IH1cbiAgICB1dGlsLmFzc2VydElzID0gYXNzZXJ0SXM7XG4gICAgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuICAgIHV0aWwuYXNzZXJ0TmV2ZXIgPSBhc3NlcnROZXZlcjtcbiAgICB1dGlsLmFycmF5VG9FbnVtID0gKGl0ZW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIG9ialtpdGVtXSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZEtleXMgPSB1dGlsLm9iamVjdEtleXMob2JqKS5maWx0ZXIoKGspID0+IHR5cGVvZiBvYmpbb2JqW2tdXSAhPT0gXCJudW1iZXJcIik7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiB2YWxpZEtleXMpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkW2tdID0gb2JqW2tdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyhmaWx0ZXJlZCk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdFZhbHVlcyA9IChvYmopID0+IHtcbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0S2V5cyhvYmopLm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtlXTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdEtleXMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09IFwiZnVuY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgPyAob2JqKSA9PiBPYmplY3Qua2V5cyhvYmopIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6IChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9O1xuICAgIHV0aWwuZmluZCA9IChhcnIsIGNoZWNrZXIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGNoZWNrZXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHV0aWwuaXNJbnRlZ2VyID0gdHlwZW9mIE51bWJlci5pc0ludGVnZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/ICh2YWwpID0+IE51bWJlci5pc0ludGVnZXIodmFsKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWwpICYmIE1hdGguZmxvb3IodmFsKSA9PT0gdmFsO1xuICAgIGZ1bmN0aW9uIGpvaW5WYWx1ZXMoYXJyYXksIHNlcGFyYXRvciA9IFwiIHwgXCIpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5Lm1hcCgodmFsKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAnJHt2YWx9J2AgOiB2YWwpKS5qb2luKHNlcGFyYXRvcik7XG4gICAgfVxuICAgIHV0aWwuam9pblZhbHVlcyA9IGpvaW5WYWx1ZXM7XG4gICAgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIgPSAoXywgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSh1dGlsIHx8ICh1dGlsID0ge30pKTtcbmV4cG9ydCB2YXIgb2JqZWN0VXRpbDtcbihmdW5jdGlvbiAob2JqZWN0VXRpbCkge1xuICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXMgPSAoZmlyc3QsIHNlY29uZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZmlyc3QsXG4gICAgICAgICAgICAuLi5zZWNvbmQsIC8vIHNlY29uZCBvdmVyd3JpdGVzIGZpcnN0XG4gICAgICAgIH07XG4gICAgfTtcbn0pKG9iamVjdFV0aWwgfHwgKG9iamVjdFV0aWwgPSB7fSkpO1xuZXhwb3J0IGNvbnN0IFpvZFBhcnNlZFR5cGUgPSB1dGlsLmFycmF5VG9FbnVtKFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibmFuXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcInVuZGVmaW5lZFwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwidW5rbm93blwiLFxuICAgIFwicHJvbWlzZVwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcIm1hcFwiLFxuICAgIFwic2V0XCIsXG5dKTtcbmV4cG9ydCBjb25zdCBnZXRQYXJzZWRUeXBlID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZDtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc3RyaW5nO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGEpID8gWm9kUGFyc2VkVHlwZS5uYW4gOiBab2RQYXJzZWRUeXBlLm51bWJlcjtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmJvb2xlYW47XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuZnVuY3Rpb247XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmJpZ2ludDtcbiAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc3ltYm9sO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmFycmF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5udWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEudGhlbiAmJiB0eXBlb2YgZGF0YS50aGVuID09PSBcImZ1bmN0aW9uXCIgJiYgZGF0YS5jYXRjaCAmJiB0eXBlb2YgZGF0YS5jYXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUucHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5tYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBEYXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm9iamVjdDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnVua25vd247XG4gICAgfVxufTtcbiIsICJpbXBvcnQgeyB1dGlsIH0gZnJvbSBcIi4vaGVscGVycy91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgWm9kSXNzdWVDb2RlID0gdXRpbC5hcnJheVRvRW51bShbXG4gICAgXCJpbnZhbGlkX3R5cGVcIixcbiAgICBcImludmFsaWRfbGl0ZXJhbFwiLFxuICAgIFwiY3VzdG9tXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3JcIixcbiAgICBcImludmFsaWRfZW51bV92YWx1ZVwiLFxuICAgIFwidW5yZWNvZ25pemVkX2tleXNcIixcbiAgICBcImludmFsaWRfYXJndW1lbnRzXCIsXG4gICAgXCJpbnZhbGlkX3JldHVybl90eXBlXCIsXG4gICAgXCJpbnZhbGlkX2RhdGVcIixcbiAgICBcImludmFsaWRfc3RyaW5nXCIsXG4gICAgXCJ0b29fc21hbGxcIixcbiAgICBcInRvb19iaWdcIixcbiAgICBcImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzXCIsXG4gICAgXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICBcIm5vdF9maW5pdGVcIixcbl0pO1xuZXhwb3J0IGNvbnN0IHF1b3RlbGVzc0pzb24gPSAob2JqKSA9PiB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLCBcIiQxOlwiKTtcbn07XG5leHBvcnQgY2xhc3MgWm9kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgZ2V0IGVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNzdWVzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZSA9IChzdWIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCBzdWJdO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZElzc3VlcyA9IChzdWJzID0gW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCAuLi5zdWJzXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0dWFsUHJvdG8gPSBuZXcudGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBhY3R1YWxQcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IGFjdHVhbFByb3RvO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBpc3N1ZXM7XG4gICAgfVxuICAgIGZvcm1hdChfbWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlciA9IF9tYXBwZXIgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpc3N1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWUudW5pb25FcnJvcnMubWFwKHByb2Nlc3NFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcihpc3N1ZS5yZXR1cm5UeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfYXJndW1lbnRzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLmFyZ3VtZW50c0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGlzc3VlLnBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGlzc3VlLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGlzc3VlLnBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAodHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHR5cGVvZiBlbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc3QgZXJyb3JBcnJheTogYW55ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlcnJvckFycmF5Ll9lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgZXJyb3JBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXS5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3VycltlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3NFcnJvcih0aGlzKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkRXJyb3JzO1xuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgWm9kRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIFpvZEVycm9yOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH1cbiAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgfVxuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICBmbGF0dGVuKG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBmb3JtRXJyb3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoc3ViLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSBzdWIucGF0aFswXTtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tmaXJzdEVsXSA9IGZpZWxkRXJyb3JzW2ZpcnN0RWxdIHx8IFtdO1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW2ZpcnN0RWxdLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybUVycm9ycy5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBmb3JtRXJyb3JzLCBmaWVsZEVycm9ycyB9O1xuICAgIH1cbiAgICBnZXQgZm9ybUVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhdHRlbigpO1xuICAgIH1cbn1cblpvZEVycm9yLmNyZWF0ZSA9IChpc3N1ZXMpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihpc3N1ZXMpO1xuICAgIHJldHVybiBlcnJvcjtcbn07XG4iLCAiaW1wb3J0IHsgWm9kSXNzdWVDb2RlIH0gZnJvbSBcIi4uL1pvZEVycm9yLmpzXCI7XG5pbXBvcnQgeyB1dGlsLCBab2RQYXJzZWRUeXBlIH0gZnJvbSBcIi4uL2hlbHBlcnMvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3JNYXAgPSAoaXNzdWUsIF9jdHgpID0+IHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnJlY2VpdmVkID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlJlcXVpcmVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEV4cGVjdGVkICR7aXNzdWUuZXhwZWN0ZWR9LCByZWNlaXZlZCAke2lzc3VlLnJlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGxpdGVyYWwgdmFsdWUsIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoaXNzdWUuZXhwZWN0ZWQsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBVbnJlY29nbml6ZWQga2V5KHMpIGluIG9iamVjdDogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb246XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBlbnVtIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX0sIHJlY2VpdmVkICcke2lzc3VlLnJlY2VpdmVkfSdgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGZ1bmN0aW9uIGFyZ3VtZW50c2A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBmdW5jdGlvbiByZXR1cm4gdHlwZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9kYXRlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGRhdGVgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwiaW5jbHVkZXNcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBpbmNsdWRlIFwiJHtpc3N1ZS52YWxpZGF0aW9uLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uLnBvc2l0aW9uID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYCR7bWVzc2FnZX0gYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2lzc3VlLnZhbGlkYXRpb24ucG9zaXRpb259YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcInN0YXJ0c1dpdGhcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBzdGFydCB3aXRoIFwiJHtpc3N1ZS52YWxpZGF0aW9uLnN0YXJ0c1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImVuZHNXaXRoXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3QgZW5kIHdpdGggXCIke2lzc3VlLnZhbGlkYXRpb24uZW5kc1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihpc3N1ZS52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS52YWxpZGF0aW9uICE9PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgJHtpc3N1ZS52YWxpZGF0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX3NtYWxsOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnR5cGUgPT09IFwiYXJyYXlcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEFycmF5IG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG1vcmUgdGhhbmB9ICR7aXNzdWUubWluaW11bX0gZWxlbWVudChzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgU3RyaW5nIG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG92ZXJgfSAke2lzc3VlLm1pbmltdW19IGNoYXJhY3RlcihzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5IGVxdWFsIHRvIGAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGAgOiBgZ3JlYXRlciB0aGFuIGB9JHtpc3N1ZS5taW5pbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImJpZ2ludFwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5IGVxdWFsIHRvIGAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGAgOiBgZ3JlYXRlciB0aGFuIGB9JHtpc3N1ZS5taW5pbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImRhdGVcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYERhdGUgbXVzdCBiZSAke2lzc3VlLmV4YWN0ID8gYGV4YWN0bHkgZXF1YWwgdG8gYCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYCA6IGBncmVhdGVyIHRoYW4gYH0ke25ldyBEYXRlKE51bWJlcihpc3N1ZS5taW5pbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX2JpZzpcbiAgICAgICAgICAgIGlmIChpc3N1ZS50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBcnJheSBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19IGVsZW1lbnQocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYFN0cmluZyBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGB1bmRlcmB9ICR7aXNzdWUubWF4aW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0ID8gYGV4YWN0bHlgIDogaXNzdWUuaW5jbHVzaXZlID8gYGxlc3MgdGhhbiBvciBlcXVhbCB0b2AgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImJpZ2ludFwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQmlnSW50IG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gIDogYGxlc3MgdGhhbmB9ICR7aXNzdWUubWF4aW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBEYXRlIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG9gIDogYHNtYWxsZXIgdGhhbmB9ICR7bmV3IERhdGUoTnVtYmVyKGlzc3VlLm1heGltdW0pKX1gO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5jdXN0b206XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnRlcnNlY3Rpb24gcmVzdWx0cyBjb3VsZCBub3QgYmUgbWVyZ2VkYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2Y6XG4gICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtpc3N1ZS5tdWx0aXBsZU9mfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X2Zpbml0ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIk51bWJlciBtdXN0IGJlIGZpbml0ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBtZXNzYWdlID0gX2N0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGVycm9yTWFwO1xuIiwgImltcG9ydCBkZWZhdWx0RXJyb3JNYXAgZnJvbSBcIi4vbG9jYWxlcy9lbi5qc1wiO1xubGV0IG92ZXJyaWRlRXJyb3JNYXAgPSBkZWZhdWx0RXJyb3JNYXA7XG5leHBvcnQgeyBkZWZhdWx0RXJyb3JNYXAgfTtcbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvck1hcChtYXApIHtcbiAgICBvdmVycmlkZUVycm9yTWFwID0gbWFwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTWFwKCkge1xuICAgIHJldHVybiBvdmVycmlkZUVycm9yTWFwO1xufVxuIiwgImltcG9ydCB7IGdldEVycm9yTWFwIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuaW1wb3J0IGRlZmF1bHRFcnJvck1hcCBmcm9tIFwiLi4vbG9jYWxlcy9lbi5qc1wiO1xuZXhwb3J0IGNvbnN0IG1ha2VJc3N1ZSA9IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IGRhdGEsIHBhdGgsIGVycm9yTWFwcywgaXNzdWVEYXRhIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBbLi4ucGF0aCwgLi4uKGlzc3VlRGF0YS5wYXRoIHx8IFtdKV07XG4gICAgY29uc3QgZnVsbElzc3VlID0ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgIH07XG4gICAgaWYgKGlzc3VlRGF0YS5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICAgICAgbWVzc2FnZTogaXNzdWVEYXRhLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGNvbnN0IG1hcHMgPSBlcnJvck1hcHNcbiAgICAgICAgLmZpbHRlcigobSkgPT4gISFtKVxuICAgICAgICAuc2xpY2UoKVxuICAgICAgICAucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgbWFwIG9mIG1hcHMpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gbWFwKGZ1bGxJc3N1ZSwgeyBkYXRhLCBkZWZhdWx0RXJyb3I6IGVycm9yTWVzc2FnZSB9KS5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgfTtcbn07XG5leHBvcnQgY29uc3QgRU1QVFlfUEFUSCA9IFtdO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgaXNzdWVEYXRhKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVNYXAgPSBnZXRFcnJvck1hcCgpO1xuICAgIGNvbnN0IGlzc3VlID0gbWFrZUlzc3VlKHtcbiAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZURhdGEsXG4gICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCwgLy8gY29udGV4dHVhbCBlcnJvciBtYXAgaXMgZmlyc3QgcHJpb3JpdHlcbiAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCwgLy8gdGhlbiBzY2hlbWEtYm91bmQgbWFwIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAsIC8vIHRoZW4gZ2xvYmFsIG92ZXJyaWRlIG1hcFxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAgPT09IGRlZmF1bHRFcnJvck1hcCA/IHVuZGVmaW5lZCA6IGRlZmF1bHRFcnJvck1hcCwgLy8gdGhlbiBnbG9iYWwgZGVmYXVsdCBtYXBcbiAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgfSk7XG4gICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaChpc3N1ZSk7XG59XG5leHBvcnQgY2xhc3MgUGFyc2VTdGF0dXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gXCJ2YWxpZFwiO1xuICAgIH1cbiAgICBkaXJ0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IFwidmFsaWRcIilcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBcImRpcnR5XCI7XG4gICAgfVxuICAgIGFib3J0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJhYm9ydGVkXCI7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0cykge1xuICAgICAgICBjb25zdCBhcnJheVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocy5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBhcnJheVZhbHVlLnB1c2gocy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBhcnJheVZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qgc3luY1BhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycykge1xuICAgICAgICBjb25zdCBmaW5hbE9iamVjdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcGFpcjtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmIChrZXkudmFsdWUgIT09IFwiX19wcm90b19fXCIgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiB8fCBwYWlyLmFsd2F5c1NldCkpIHtcbiAgICAgICAgICAgICAgICBmaW5hbE9iamVjdFtrZXkudmFsdWVdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE9iamVjdCB9O1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBJTlZBTElEID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgc3RhdHVzOiBcImFib3J0ZWRcIixcbn0pO1xuZXhwb3J0IGNvbnN0IERJUlRZID0gKHZhbHVlKSA9PiAoeyBzdGF0dXM6IFwiZGlydHlcIiwgdmFsdWUgfSk7XG5leHBvcnQgY29uc3QgT0sgPSAodmFsdWUpID0+ICh7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZSB9KTtcbmV4cG9ydCBjb25zdCBpc0Fib3J0ZWQgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiO1xuZXhwb3J0IGNvbnN0IGlzRGlydHkgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiZGlydHlcIjtcbmV4cG9ydCBjb25zdCBpc1ZhbGlkID0gKHgpID0+IHguc3RhdHVzID09PSBcInZhbGlkXCI7XG5leHBvcnQgY29uc3QgaXNBc3luYyA9ICh4KSA9PiB0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB4IGluc3RhbmNlb2YgUHJvbWlzZTtcbiIsICJleHBvcnQgdmFyIGVycm9yVXRpbDtcbihmdW5jdGlvbiAoZXJyb3JVdGlsKSB7XG4gICAgZXJyb3JVdGlsLmVyclRvT2JqID0gKG1lc3NhZ2UpID0+IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8geyBtZXNzYWdlIH0gOiBtZXNzYWdlIHx8IHt9O1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50OlxuICAgIGVycm9yVXRpbC50b1N0cmluZyA9IChtZXNzYWdlKSA9PiB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBtZXNzYWdlPy5tZXNzYWdlO1xufSkoZXJyb3JVdGlsIHx8IChlcnJvclV0aWwgPSB7fSkpO1xuIiwgImltcG9ydCB7IFpvZEVycm9yLCBab2RJc3N1ZUNvZGUsIH0gZnJvbSBcIi4vWm9kRXJyb3IuanNcIjtcbmltcG9ydCB7IGRlZmF1bHRFcnJvck1hcCwgZ2V0RXJyb3JNYXAgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmltcG9ydCB7IGVycm9yVXRpbCB9IGZyb20gXCIuL2hlbHBlcnMvZXJyb3JVdGlsLmpzXCI7XG5pbXBvcnQgeyBESVJUWSwgSU5WQUxJRCwgT0ssIFBhcnNlU3RhdHVzLCBhZGRJc3N1ZVRvQ29udGV4dCwgaXNBYm9ydGVkLCBpc0FzeW5jLCBpc0RpcnR5LCBpc1ZhbGlkLCBtYWtlSXNzdWUsIH0gZnJvbSBcIi4vaGVscGVycy9wYXJzZVV0aWwuanNcIjtcbmltcG9ydCB7IHV0aWwsIFpvZFBhcnNlZFR5cGUsIGdldFBhcnNlZFR5cGUgfSBmcm9tIFwiLi9oZWxwZXJzL3V0aWwuanNcIjtcbmNsYXNzIFBhcnNlSW5wdXRMYXp5UGF0aCB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCB2YWx1ZSwgcGF0aCwga2V5KSB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFBhdGggPSBbXTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRQYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLCAuLi50aGlzLl9rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsIHRoaXMuX2tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFBhdGg7XG4gICAgfVxufVxuY29uc3QgaGFuZGxlUmVzdWx0ID0gKGN0eCwgcmVzdWx0KSA9PiB7XG4gICAgaWYgKGlzVmFsaWQocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZXN1bHQudmFsdWUgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghY3R4LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWYWxpZGF0aW9uIGZhaWxlZCBidXQgbm8gaXNzdWVzIGRldGVjdGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59O1xuZnVuY3Rpb24gcHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcylcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHsgZXJyb3JNYXAsIGludmFsaWRfdHlwZV9lcnJvciwgcmVxdWlyZWRfZXJyb3IsIGRlc2NyaXB0aW9uIH0gPSBwYXJhbXM7XG4gICAgaWYgKGVycm9yTWFwICYmIChpbnZhbGlkX3R5cGVfZXJyb3IgfHwgcmVxdWlyZWRfZXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgdXNlIFwiaW52YWxpZF90eXBlX2Vycm9yXCIgb3IgXCJyZXF1aXJlZF9lcnJvclwiIGluIGNvbmp1bmN0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1hcC5gKTtcbiAgICB9XG4gICAgaWYgKGVycm9yTWFwKVxuICAgICAgICByZXR1cm4geyBlcnJvck1hcDogZXJyb3JNYXAsIGRlc2NyaXB0aW9uIH07XG4gICAgY29uc3QgY3VzdG9tTWFwID0gKGlzcywgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gcGFyYW1zO1xuICAgICAgICBpZiAoaXNzLmNvZGUgPT09IFwiaW52YWxpZF9lbnVtX3ZhbHVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG1lc3NhZ2UgPz8gY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGEgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG1lc3NhZ2UgPz8gcmVxdWlyZWRfZXJyb3IgPz8gY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc3MuY29kZSAhPT0gXCJpbnZhbGlkX3R5cGVcIilcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogbWVzc2FnZSA/PyBpbnZhbGlkX3R5cGVfZXJyb3IgPz8gY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgZXJyb3JNYXA6IGN1c3RvbU1hcCwgZGVzY3JpcHRpb24gfTtcbn1cbmV4cG9ydCBjbGFzcyBab2RUeXBlIHtcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIF9nZXRUeXBlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBfZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCkge1xuICAgICAgICByZXR1cm4gKGN0eCB8fCB7XG4gICAgICAgICAgICBjb21tb246IGlucHV0LnBhcmVudC5jb21tb24sXG4gICAgICAgICAgICBkYXRhOiBpbnB1dC5kYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IG5ldyBQYXJzZVN0YXR1cygpLFxuICAgICAgICAgICAgY3R4OiB7XG4gICAgICAgICAgICAgICAgY29tbW9uOiBpbnB1dC5wYXJlbnQuY29tbW9uLFxuICAgICAgICAgICAgICAgIGRhdGE6IGlucHV0LmRhdGEsXG4gICAgICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGFyc2VTeW5jKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3luY2hyb25vdXMgcGFyc2UgZW5jb3VudGVyZWQgcHJvbWlzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX3BhcnNlQXN5bmMoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuICAgIHBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNhZmVQYXJzZShkYXRhLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgc2FmZVBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGFzeW5jOiBwYXJhbXM/LmFzeW5jID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRleHR1YWxFcnJvck1hcDogcGFyYW1zPy5lcnJvck1hcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiBwYXJhbXM/LnBhdGggfHwgW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlU3luYyh7IGRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIFwifnZhbGlkYXRlXCIoZGF0YSkge1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGFzeW5jOiAhIXRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGlmICghdGhpc1tcIn5zdGFuZGFyZFwiXS5hc3luYykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZVN5bmMoeyBkYXRhLCBwYXRoOiBbXSwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGN0eC5jb21tb24uaXNzdWVzLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnI/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKFwiZW5jb3VudGVyZWRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tcIn5zdGFuZGFyZFwiXS5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5jb21tb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlQXN5bmMoeyBkYXRhLCBwYXRoOiBbXSwgcGFyZW50OiBjdHggfSkudGhlbigocmVzdWx0KSA9PiBpc1ZhbGlkKHJlc3VsdClcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQudmFsdWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IGN0eC5jb21tb24uaXNzdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHBhcnNlQXN5bmMoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2FmZVBhcnNlQXN5bmMoZGF0YSwgcGFyYW1zKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgfVxuICAgIGFzeW5jIHNhZmVQYXJzZUFzeW5jKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGNvbnRleHR1YWxFcnJvck1hcDogcGFyYW1zPy5lcnJvck1hcCxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiBwYXJhbXM/LnBhdGggfHwgW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1heWJlQXN5bmNSZXN1bHQgPSB0aGlzLl9wYXJzZSh7IGRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGlzQXN5bmMobWF5YmVBc3luY1Jlc3VsdCkgPyBtYXliZUFzeW5jUmVzdWx0IDogUHJvbWlzZS5yZXNvbHZlKG1heWJlQXN5bmNSZXN1bHQpKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJlZmluZShjaGVjaywgbWVzc2FnZSkge1xuICAgICAgICBjb25zdCBnZXRJc3N1ZVByb3BlcnRpZXMgPSAodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1lc3NhZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNoZWNrKHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzZXRFcnJvciA9ICgpID0+IGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgICAgICAuLi5nZXRJc3N1ZVByb3BlcnRpZXModmFsKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZmluZW1lbnQoY2hlY2ssIHJlZmluZW1lbnREYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KCh2YWwsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGVjayh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHR5cGVvZiByZWZpbmVtZW50RGF0YSA9PT0gXCJmdW5jdGlvblwiID8gcmVmaW5lbWVudERhdGEodmFsLCBjdHgpIDogcmVmaW5lbWVudERhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlZmluZW1lbnQocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwicmVmaW5lbWVudFwiLCByZWZpbmVtZW50IH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdXBlclJlZmluZShyZWZpbmVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KHJlZmluZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihkZWYpIHtcbiAgICAgICAgLyoqIEFsaWFzIG9mIHNhZmVQYXJzZUFzeW5jICovXG4gICAgICAgIHRoaXMuc3BhID0gdGhpcy5zYWZlUGFyc2VBc3luYztcbiAgICAgICAgdGhpcy5fZGVmID0gZGVmO1xuICAgICAgICB0aGlzLnBhcnNlID0gdGhpcy5wYXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZSA9IHRoaXMuc2FmZVBhcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGFyc2VBc3luYyA9IHRoaXMucGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZUFzeW5jID0gdGhpcy5zYWZlUGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNwYSA9IHRoaXMuc3BhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVmaW5lID0gdGhpcy5yZWZpbmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZpbmVtZW50ID0gdGhpcy5yZWZpbmVtZW50LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3VwZXJSZWZpbmUgPSB0aGlzLnN1cGVyUmVmaW5lLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGFibGUgPSB0aGlzLm51bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGlzaCA9IHRoaXMubnVsbGlzaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFycmF5ID0gdGhpcy5hcnJheS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLnByb21pc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vciA9IHRoaXMub3IuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hbmQgPSB0aGlzLmFuZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYnJhbmQgPSB0aGlzLmJyYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVmYXVsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNhdGNoID0gdGhpcy5jYXRjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlID0gdGhpcy5kZXNjcmliZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBpcGUgPSB0aGlzLnBpcGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHkuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc051bGxhYmxlID0gdGhpcy5pc051bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzW1wifnN0YW5kYXJkXCJdID0ge1xuICAgICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICAgIHZlbmRvcjogXCJ6b2RcIixcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoZGF0YSkgPT4gdGhpc1tcIn52YWxpZGF0ZVwiXShkYXRhKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBab2RPcHRpb25hbC5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBab2ROdWxsYWJsZS5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGlzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbGFibGUoKS5vcHRpb25hbCgpO1xuICAgIH1cbiAgICBhcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZEFycmF5LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG4gICAgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZFByb21pc2UuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIG9yKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gWm9kVW5pb24uY3JlYXRlKFt0aGlzLCBvcHRpb25dLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBhbmQoaW5jb21pbmcpIHtcbiAgICAgICAgcmV0dXJuIFpvZEludGVyc2VjdGlvbi5jcmVhdGUodGhpcywgaW5jb21pbmcsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInRyYW5zZm9ybVwiLCB0cmFuc2Zvcm0gfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlZmF1bHQoZGVmKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUZ1bmMgPSB0eXBlb2YgZGVmID09PSBcImZ1bmN0aW9uXCIgPyBkZWYgOiAoKSA9PiBkZWY7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRGVmYXVsdCh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBpbm5lclR5cGU6IHRoaXMsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZUZ1bmMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERlZmF1bHQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBicmFuZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCcmFuZGVkKHtcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQnJhbmRlZCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaChkZWYpIHtcbiAgICAgICAgY29uc3QgY2F0Y2hWYWx1ZUZ1bmMgPSB0eXBlb2YgZGVmID09PSBcImZ1bmN0aW9uXCIgPyBkZWYgOiAoKSA9PiBkZWY7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQ2F0Y2goe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgaW5uZXJUeXBlOiB0aGlzLFxuICAgICAgICAgICAgY2F0Y2hWYWx1ZTogY2F0Y2hWYWx1ZUZ1bmMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgY29uc3QgVGhpcyA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiBuZXcgVGhpcyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBpcGUodGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBab2RQaXBlbGluZS5jcmVhdGUodGhpcywgdGFyZ2V0KTtcbiAgICB9XG4gICAgcmVhZG9ubHkoKSB7XG4gICAgICAgIHJldHVybiBab2RSZWFkb25seS5jcmVhdGUodGhpcyk7XG4gICAgfVxuICAgIGlzT3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZSh1bmRlZmluZWQpLnN1Y2Nlc3M7XG4gICAgfVxuICAgIGlzTnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzO1xuICAgIH1cbn1cbmNvbnN0IGN1aWRSZWdleCA9IC9eY1teXFxzLV17OCx9JC9pO1xuY29uc3QgY3VpZDJSZWdleCA9IC9eWzAtOWEtel0rJC87XG5jb25zdCB1bGlkUmVnZXggPSAvXlswLTlBLUhKS01OUC1UVi1aXXsyNn0kL2k7XG4vLyBjb25zdCB1dWlkUmVnZXggPVxuLy8gICAvXihbYS1mMC05XXs4fS1bYS1mMC05XXs0fS1bMS01XVthLWYwLTldezN9LVthLWYwLTldezR9LVthLWYwLTldezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuY29uc3QgdXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kL2k7XG5jb25zdCBuYW5vaWRSZWdleCA9IC9eW2EtejAtOV8tXXsyMX0kL2k7XG5jb25zdCBqd3RSZWdleCA9IC9eW0EtWmEtejAtOS1fXStcXC5bQS1aYS16MC05LV9dK1xcLltBLVphLXowLTktX10qJC87XG5jb25zdCBkdXJhdGlvblJlZ2V4ID0gL15bLStdP1AoPyEkKSg/Oig/OlstK10/XFxkK1kpfCg/OlstK10/XFxkK1suLF1cXGQrWSQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86KD86Wy0rXT9cXGQrVyl8KD86Wy0rXT9cXGQrWy4sXVxcZCtXJCkpPyg/Oig/OlstK10/XFxkK0QpfCg/OlstK10/XFxkK1suLF1cXGQrRCQpKT8oPzpUKD89W1xcZCstXSkoPzooPzpbLStdP1xcZCtIKXwoPzpbLStdP1xcZCtbLixdXFxkK0gkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/OlstK10/XFxkKyg/OlsuLF1cXGQrKT9TKT8pPz8kLztcbi8vIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2MTgxLzE1NTAxNTVcbi8vIG9sZCB2ZXJzaW9uOiB0b28gc2xvdywgZGlkbid0IHN1cHBvcnQgdW5pY29kZVxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSQvaTtcbi8vb2xkIGVtYWlsIHJlZ2V4XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID0gL14oKFtePD4oKVtcXF0uLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXS4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKCg/IS0pKFtePD4oKVtcXF0uLDs6XFxzQFwiXStcXC4pK1tePD4oKVtcXF0uLDs6XFxzQFwiXXsxLH0pW14tPD4oKVtcXF0uLDs6XFxzQFwiXSQvaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcWygoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcXSl8KFxcW0lQdjY6KChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXFwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKVxcXSl8KFtBLVphLXowLTldKFtBLVphLXowLTktXSpbQS1aYS16MC05XSkqKFxcLltBLVphLXpdezIsfSkrKSkkLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXpBLVowLTlcXC5cXCFcXCNcXCRcXCVcXCZcXCdcXCpcXCtcXC9cXD1cXD9cXF5cXF9cXGBcXHtcXHxcXH1cXH5cXC1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKD86W2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKnxcIig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKlwiKUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/fFxcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/fFthLXowLTktXSpbYS16MC05XTooPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMS1cXHg1YVxceDUzLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkrKVxcXSkkL2k7XG5jb25zdCBlbWFpbFJlZ2V4ID0gL14oPyFcXC4pKD8hLipcXC5cXC4pKFtBLVowLTlfJytcXC1cXC5dKilbQS1aMC05XystXUAoW0EtWjAtOV1bQS1aMC05XFwtXSpcXC4pK1tBLVpdezIsfSQvaTtcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXowLTkuISMkJSZcdTIwMTkqKy89P15fYHt8fX4tXStAW2EtejAtOS1dKyg/OlxcLlthLXowLTlcXC1dKykqJC9pO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamlSZWdleCA9IGBeKFxcXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY318XFxcXHB7RW1vamlfQ29tcG9uZW50fSkrJGA7XG5sZXQgZW1vamlSZWdleDtcbi8vIGZhc3Rlciwgc2ltcGxlciwgc2FmZXJcbmNvbnN0IGlwdjRSZWdleCA9IC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC87XG5jb25zdCBpcHY0Q2lkclJlZ2V4ID0gL14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oM1swLTJdfFsxMl0/WzAtOV0pJC87XG4vLyBjb25zdCBpcHY2UmVnZXggPVxuLy8gL14oKFthLWYwLTldezEsNH06KXs3fXw6OihbYS1mMC05XXsxLDR9Oil7MCw2fXwoW2EtZjAtOV17MSw0fTopezF9OihbYS1mMC05XXsxLDR9Oil7MCw1fXwoW2EtZjAtOV17MSw0fTopezJ9OihbYS1mMC05XXsxLDR9Oil7MCw0fXwoW2EtZjAtOV17MSw0fTopezN9OihbYS1mMC05XXsxLDR9Oil7MCwzfXwoW2EtZjAtOV17MSw0fTopezR9OihbYS1mMC05XXsxLDR9Oil7MCwyfXwoW2EtZjAtOV17MSw0fTopezV9OihbYS1mMC05XXsxLDR9Oil7MCwxfSkoW2EtZjAtOV17MSw0fXwoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkpJC87XG5jb25zdCBpcHY2UmVnZXggPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezcsN31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdezAsNH0pezAsNH0lWzAtOWEtekEtWl17MSx9fDo6KGZmZmYoOjB7MSw0fSl7MCwxfTopezAsMX0oKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKSkkLztcbmNvbnN0IGlwdjZDaWRyUmVnZXggPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezcsN31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdezAsNH0pezAsNH0lWzAtOWEtekEtWl17MSx9fDo6KGZmZmYoOjB7MSw0fSl7MCwxfTopezAsMX0oKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKSlcXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg2MDM5Mi9kZXRlcm1pbmUtaWYtc3RyaW5nLWlzLWluLWJhc2U2NC11c2luZy1qYXZhc2NyaXB0XG5jb25zdCBiYXNlNjRSZWdleCA9IC9eKFswLTlhLXpBLVorL117NH0pKigoWzAtOWEtekEtWisvXXsyfT09KXwoWzAtOWEtekEtWisvXXszfT0pKT8kLztcbi8vIGh0dHBzOi8vYmFzZTY0Lmd1cnUvc3RhbmRhcmRzL2Jhc2U2NHVybFxuY29uc3QgYmFzZTY0dXJsUmVnZXggPSAvXihbMC05YS16QS1aLV9dezR9KSooKFswLTlhLXpBLVotX117Mn0oPT0pPyl8KFswLTlhLXpBLVotX117M30oPSk/KSk/JC87XG4vLyBzaW1wbGVcbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfWA7XG4vLyBubyBsZWFwIHllYXIgdmFsaWRhdGlvblxuLy8gY29uc3QgZGF0ZVJlZ2V4U291cmNlID0gYFxcXFxkezR9LSgoMFsxMzU3OF18MTB8MTIpLTMxfCgwWzEzLTldfDFbMC0yXSktMzB8KDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVxcXFxkfDJcXFxcZCkpYDtcbi8vIHdpdGggbGVhcCB5ZWFyIHZhbGlkYXRpb25cbmNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZGF0ZVJlZ2V4U291cmNlfSRgKTtcbmZ1bmN0aW9uIHRpbWVSZWdleFNvdXJjZShhcmdzKSB7XG4gICAgbGV0IHNlY29uZHNSZWdleFNvdXJjZSA9IGBbMC01XVxcXFxkYDtcbiAgICBpZiAoYXJncy5wcmVjaXNpb24pIHtcbiAgICAgICAgc2Vjb25kc1JlZ2V4U291cmNlID0gYCR7c2Vjb25kc1JlZ2V4U291cmNlfVxcXFwuXFxcXGR7JHthcmdzLnByZWNpc2lvbn19YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgICBzZWNvbmRzUmVnZXhTb3VyY2UgPSBgJHtzZWNvbmRzUmVnZXhTb3VyY2V9KFxcXFwuXFxcXGQrKT9gO1xuICAgIH1cbiAgICBjb25zdCBzZWNvbmRzUXVhbnRpZmllciA9IGFyZ3MucHJlY2lzaW9uID8gXCIrXCIgOiBcIj9cIjsgLy8gcmVxdWlyZSBzZWNvbmRzIGlmIHByZWNpc2lvbiBpcyBub256ZXJvXG4gICAgcmV0dXJuIGAoWzAxXVxcXFxkfDJbMC0zXSk6WzAtNV1cXFxcZCg6JHtzZWNvbmRzUmVnZXhTb3VyY2V9KSR7c2Vjb25kc1F1YW50aWZpZXJ9YDtcbn1cbmZ1bmN0aW9uIHRpbWVSZWdleChhcmdzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3RpbWVSZWdleFNvdXJjZShhcmdzKX0kYCk7XG59XG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzMxNDMyMzFcbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZVJlZ2V4KGFyZ3MpIHtcbiAgICBsZXQgcmVnZXggPSBgJHtkYXRlUmVnZXhTb3VyY2V9VCR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfWA7XG4gICAgY29uc3Qgb3B0cyA9IFtdO1xuICAgIG9wdHMucHVzaChhcmdzLmxvY2FsID8gYFo/YCA6IGBaYCk7XG4gICAgaWYgKGFyZ3Mub2Zmc2V0KVxuICAgICAgICBvcHRzLnB1c2goYChbKy1dXFxcXGR7Mn06P1xcXFxkezJ9KWApO1xuICAgIHJlZ2V4ID0gYCR7cmVnZXh9KCR7b3B0cy5qb2luKFwifFwiKX0pYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufVxuZnVuY3Rpb24gaXNWYWxpZElQKGlwLCB2ZXJzaW9uKSB7XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY0XCIgfHwgIXZlcnNpb24pICYmIGlwdjRSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY2XCIgfHwgIXZlcnNpb24pICYmIGlwdjZSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNWYWxpZEpXVChqd3QsIGFsZykge1xuICAgIGlmICghand0UmVnZXgudGVzdChqd3QpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgW2hlYWRlcl0gPSBqd3Quc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoIWhlYWRlcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gQ29udmVydCBiYXNlNjR1cmwgdG8gYmFzZTY0XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGhlYWRlclxuICAgICAgICAgICAgLnJlcGxhY2UoLy0vZywgXCIrXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXy9nLCBcIi9cIilcbiAgICAgICAgICAgIC5wYWRFbmQoaGVhZGVyLmxlbmd0aCArICgoNCAtIChoZWFkZXIubGVuZ3RoICUgNCkpICUgNCksIFwiPVwiKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IEpTT04ucGFyc2UoYXRvYihiYXNlNjQpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWNvZGVkICE9PSBcIm9iamVjdFwiIHx8IGRlY29kZWQgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChcInR5cFwiIGluIGRlY29kZWQgJiYgZGVjb2RlZD8udHlwICE9PSBcIkpXVFwiKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWRlY29kZWQuYWxnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYWxnICYmIGRlY29kZWQuYWxnICE9PSBhbGcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1ZhbGlkQ2lkcihpcCwgdmVyc2lvbikge1xuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NFwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY0Q2lkclJlZ2V4LnRlc3QoaXApKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoKHZlcnNpb24gPT09IFwidjZcIiB8fCAhdmVyc2lvbikgJiYgaXB2NkNpZHJSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IFN0cmluZyhpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA8IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gaW5wdXQuZGF0YS5sZW5ndGggPCBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW1haWxcIikge1xuICAgICAgICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVtb2ppXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVtb2ppUmVnZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1vamlSZWdleCA9IG5ldyBSZWdFeHAoX2Vtb2ppUmVnZXgsIFwidVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbW9qaVJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJlbW9qaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidXVpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dWlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInV1aWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW5vaWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwibmFub2lkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjdWlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1aWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgIGlmICghY3VpZDJSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdWxpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1bGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICBjaGVjay5yZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBjaGVjay5yZWdleC50ZXN0KGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInJlZ2V4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0cmltXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImluY2x1ZGVzXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuaW5jbHVkZXMoY2hlY2sudmFsdWUsIGNoZWNrLnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IGluY2x1ZGVzOiBjaGVjay52YWx1ZSwgcG9zaXRpb246IGNoZWNrLnBvc2l0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0b0xvd2VyQ2FzZVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidG9VcHBlckNhc2VcIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInN0YXJ0c1dpdGhcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5zdGFydHNXaXRoKGNoZWNrLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IHN0YXJ0c1dpdGg6IGNoZWNrLnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJlbmRzV2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLmVuZHNXaXRoKGNoZWNrLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IGVuZHNXaXRoOiBjaGVjay52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZGF0ZXRpbWVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gZGF0ZXRpbWVSZWdleChjaGVjayk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImRhdGVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gZGF0ZVJlZ2V4O1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gdGltZVJlZ2V4KGNoZWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkdXJhdGlvblJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiaXBcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZElQKGlucHV0LmRhdGEsIGNoZWNrLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiaXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImp3dFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSldUKGlucHV0LmRhdGEsIGNoZWNrLmFsZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJqd3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImNpZHJcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZENpZHIoaW5wdXQuZGF0YSwgY2hlY2sudmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJjaWRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZTY0UmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImJhc2U2NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiYmFzZTY0dXJsXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NHVybFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJiYXNlNjR1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgX3JlZ2V4KHJlZ2V4LCB2YWxpZGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmluZW1lbnQoKGRhdGEpID0+IHJlZ2V4LnRlc3QoZGF0YSksIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW1haWwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImVtYWlsXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1cmxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBlbW9qaShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1vamlcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1dWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1dWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgbmFub2lkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJuYW5vaWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJjdWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgY3VpZDIobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWQyXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdWxpZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwidWxpZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGJhc2U2NChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiYmFzZTY0XCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgYmFzZTY0dXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gYmFzZTY0dXJsIGVuY29kaW5nIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGJhc2U2NCB0aGF0IGNhbiBzYWZlbHkgYmUgdXNlZCBpbiBVUkxzIGFuZCBmaWxlbmFtZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiYmFzZTY0dXJsXCIsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBqd3Qob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImp3dFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucykgfSk7XG4gICAgfVxuICAgIGlwKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJpcFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucykgfSk7XG4gICAgfVxuICAgIGNpZHIob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImNpZHJcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMpIH0pO1xuICAgIH1cbiAgICBkYXRldGltZShvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbG9jYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2Ygb3B0aW9ucz8ucHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnM/LnByZWNpc2lvbixcbiAgICAgICAgICAgIG9mZnNldDogb3B0aW9ucz8ub2Zmc2V0ID8/IGZhbHNlLFxuICAgICAgICAgICAgbG9jYWw6IG9wdGlvbnM/LmxvY2FsID8/IGZhbHNlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnM/Lm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGF0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZGF0ZVwiLCBtZXNzYWdlIH0pO1xuICAgIH1cbiAgICB0aW1lKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2Ygb3B0aW9ucz8ucHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnM/LnByZWNpc2lvbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zPy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGR1cmF0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJkdXJhdGlvblwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHJlZ2V4KHJlZ2V4LCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInJlZ2V4XCIsXG4gICAgICAgICAgICByZWdleDogcmVnZXgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbmNsdWRlcyh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJpbmNsdWRlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcG9zaXRpb246IG9wdGlvbnM/LnBvc2l0aW9uLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnM/Lm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhcnRzV2l0aCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJzdGFydHNXaXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbmRzV2l0aCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJlbmRzV2l0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkxlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBtaW5MZW5ndGgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4TGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IG1heExlbmd0aCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxlbmd0aChsZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibGVuZ3RoXCIsXG4gICAgICAgICAgICB2YWx1ZTogbGVuLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXF1aXZhbGVudCB0byBgLm1pbigxKWBcbiAgICAgKi9cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBlcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkpO1xuICAgIH1cbiAgICB0cmltKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidHJpbVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9Mb3dlckNhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0b0xvd2VyQ2FzZVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9VcHBlckNhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0b1VwcGVyQ2FzZVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IGlzRGF0ZXRpbWUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZGF0ZXRpbWVcIik7XG4gICAgfVxuICAgIGdldCBpc0RhdGUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZGF0ZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVGltZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ0aW1lXCIpO1xuICAgIH1cbiAgICBnZXQgaXNEdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJkdXJhdGlvblwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1haWwoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZW1haWxcIik7XG4gICAgfVxuICAgIGdldCBpc1VSTCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1cmxcIik7XG4gICAgfVxuICAgIGdldCBpc0Vtb2ppKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImVtb2ppXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVVUlEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInV1aWRcIik7XG4gICAgfVxuICAgIGdldCBpc05BTk9JRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJuYW5vaWRcIik7XG4gICAgfVxuICAgIGdldCBpc0NVSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY3VpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQ1VJRDIoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY3VpZDJcIik7XG4gICAgfVxuICAgIGdldCBpc1VMSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidWxpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzSVAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiaXBcIik7XG4gICAgfVxuICAgIGdldCBpc0NJRFIoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY2lkclwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0dXJsKCkge1xuICAgICAgICAvLyBiYXNlNjR1cmwgZW5jb2RpbmcgaXMgYSBtb2RpZmljYXRpb24gb2YgYmFzZTY0IHRoYXQgY2FuIHNhZmVseSBiZSB1c2VkIGluIFVSTHMgYW5kIGZpbGVuYW1lc1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NHVybFwiKTtcbiAgICB9XG4gICAgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4TGVuZ3RoKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kU3RyaW5nLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3RyaW5nLFxuICAgICAgICBjb2VyY2U6IHBhcmFtcz8uY29lcmNlID8/IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzk2NjQ4NC93aHktZG9lcy1tb2R1bHVzLW9wZXJhdG9yLXJldHVybi1mcmFjdGlvbmFsLW51bWJlci1pbi1qYXZhc2NyaXB0LzMxNzExMDM0IzMxNzExMDM0XG5mdW5jdGlvbiBmbG9hdFNhZmVSZW1haW5kZXIodmFsLCBzdGVwKSB7XG4gICAgY29uc3QgdmFsRGVjQ291bnQgPSAodmFsLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbiAgICBjb25zdCBzdGVwRGVjQ291bnQgPSAoc3RlcC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3QgZGVjQ291bnQgPSB2YWxEZWNDb3VudCA+IHN0ZXBEZWNDb3VudCA/IHZhbERlY0NvdW50IDogc3RlcERlY0NvdW50O1xuICAgIGNvbnN0IHZhbEludCA9IE51bWJlci5wYXJzZUludCh2YWwudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIGNvbnN0IHN0ZXBJbnQgPSBOdW1iZXIucGFyc2VJbnQoc3RlcC50b0ZpeGVkKGRlY0NvdW50KS5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XG4gICAgcmV0dXJuICh2YWxJbnQgJSBzdGVwSW50KSAvIDEwICoqIGRlY0NvdW50O1xufVxuZXhwb3J0IGNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgICAgICB0aGlzLnN0ZXAgPSB0aGlzLm11bHRpcGxlT2Y7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IE51bWJlcihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5udW1iZXIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJpbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0ludGVnZXIoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBcImZsb2F0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmUgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWUgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChmbG9hdFNhZmVSZW1haW5kZXIoaW5wdXQuZGF0YSwgY2hlY2sudmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2YsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZU9mOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImZpbml0ZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9maW5pdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImludFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25wb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpbml0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImZpbml0ZVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2FmZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KS5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgZ2V0IGlzSW50KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImludFwiIHx8IChjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIiAmJiB1dGlsLmlzSW50ZWdlcihjaC52YWx1ZSkpKTtcbiAgICB9XG4gICAgZ2V0IGlzRmluaXRlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwiZmluaXRlXCIgfHwgY2gua2luZCA9PT0gXCJpbnRcIiB8fCBjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobWluKSAmJiBOdW1iZXIuaXNGaW5pdGUobWF4KTtcbiAgICB9XG59XG5ab2ROdW1iZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdW1iZXIsXG4gICAgICAgIGNvZXJjZTogcGFyYW1zPy5jb2VyY2UgfHwgZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kQmlnSW50IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubWluID0gdGhpcy5ndGU7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5sdGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gQmlnSW50KGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRJbnZhbGlkSW5wdXQoaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYmlnaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SW52YWxpZElucHV0KGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmUgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWUgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhICUgY2hlY2sudmFsdWUgIT09IEJpZ0ludCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVPZjogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIF9nZXRJbnZhbGlkSW5wdXQoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5iaWdpbnQsXG4gICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICB9XG4gICAgZ3RlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBndCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBzZXRMaW1pdChraW5kLCB2YWx1ZSwgaW5jbHVzaXZlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5jaGVja3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCaWdJbnQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ucG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG11bHRpcGxlT2YodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibXVsdGlwbGVPZlwiLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kQmlnSW50LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQmlnSW50LFxuICAgICAgICBjb2VyY2U6IHBhcmFtcz8uY29lcmNlID8/IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZEJvb2xlYW4gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBCb29sZWFuKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYm9vbGVhbikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5ib29sZWFuLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZEJvb2xlYW4uY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kQm9vbGVhbih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQm9vbGVhbixcbiAgICAgICAgY29lcmNlOiBwYXJhbXM/LmNvZXJjZSB8fCBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2REYXRlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gbmV3IERhdGUoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5kYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmRhdGUsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGlucHV0LmRhdGEuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5nZXRUaW1lKCkgPCBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpID4gY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZShpbnB1dC5kYXRhLmdldFRpbWUoKSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkRhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluRGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4RGF0ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhEYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5EYXRlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCA/IG5ldyBEYXRlKG1pbikgOiBudWxsO1xuICAgIH1cbiAgICBnZXQgbWF4RGF0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ICE9IG51bGwgPyBuZXcgRGF0ZShtYXgpIDogbnVsbDtcbiAgICB9XG59XG5ab2REYXRlLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICBjb2VyY2U6IHBhcmFtcz8uY29lcmNlIHx8IGZhbHNlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERhdGUsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kU3ltYm9sIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3ltYm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnN5bWJvbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RTeW1ib2wuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kU3ltYm9sKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTeW1ib2wsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kVW5kZWZpbmVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RVbmRlZmluZWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5kZWZpbmVkKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmRlZmluZWQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kTnVsbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubnVsbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2ROdWxsLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bGwoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bGwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kQW55IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHRvIHByZXZlbnQgaW5zdGFuY2VzIG9mIG90aGVyIGNsYXNzZXMgZnJvbSBleHRlbmRpbmcgWm9kQW55LiB0aGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBjYXRjaGFsbCBpbiBab2RPYmplY3QuXG4gICAgICAgIHRoaXMuX2FueSA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kQW55LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFueSh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQW55LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFVua25vd24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgLy8gcmVxdWlyZWRcbiAgICAgICAgdGhpcy5fdW5rbm93biA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kVW5rbm93bi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmtub3duKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmtub3duLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZE5ldmVyIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubmV2ZXIsXG4gICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICB9XG59XG5ab2ROZXZlci5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROZXZlcih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmV2ZXIsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kVm9pZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS52b2lkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFZvaWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVm9pZCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVm9pZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RBcnJheSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCwgc3RhdHVzIH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLl9kZWY7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5hcnJheSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYuZXhhY3RMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGN0eC5kYXRhLmxlbmd0aCA+IGRlZi5leGFjdExlbmd0aC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY3R4LmRhdGEubGVuZ3RoIDwgZGVmLmV4YWN0TGVuZ3RoLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRvb0JpZyB8fCB0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0b29CaWcgPyBab2RJc3N1ZUNvZGUudG9vX2JpZyA6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06ICh0b29TbWFsbCA/IGRlZi5leGFjdExlbmd0aC52YWx1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06ICh0b29CaWcgPyBkZWYuZXhhY3RMZW5ndGgudmFsdWUgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5leGFjdExlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWluTGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEubGVuZ3RoIDwgZGVmLm1pbkxlbmd0aC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluTGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluTGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5tYXhMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPiBkZWYubWF4TGVuZ3RoLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBkZWYubWF4TGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4TGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWYudHlwZS5fcGFyc2VBc3luYyhuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKTtcbiAgICAgICAgICAgIH0pKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi50eXBlLl9wYXJzZVN5bmMobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IHsgdmFsdWU6IG1pbkxlbmd0aCwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4TGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiB7IHZhbHVlOiBtYXhMZW5ndGgsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGVuZ3RoKGxlbiwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGV4YWN0TGVuZ3RoOiB7IHZhbHVlOiBsZW4sIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgbWVzc2FnZSk7XG4gICAgfVxufVxuWm9kQXJyYXkuY3JlYXRlID0gKHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICAgIGV4YWN0TGVuZ3RoOiBudWxsLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gZGVlcFBhcnRpYWxpZnkoc2NoZW1hKSB7XG4gICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE9iamVjdCkge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuc2hhcGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gc2NoZW1hLnNoYXBlW2tleV07XG4gICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gWm9kT3B0aW9uYWwuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KGZpZWxkU2NoZW1hKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4uc2NoZW1hLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RBcnJheSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnNjaGVtYS5fZGVmLFxuICAgICAgICAgICAgdHlwZTogZGVlcFBhcnRpYWxpZnkoc2NoZW1hLmVsZW1lbnQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIFpvZE9wdGlvbmFsLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kTnVsbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZE51bGxhYmxlLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kVHVwbGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZFR1cGxlLmNyZWF0ZShzY2hlbWEuaXRlbXMubWFwKChpdGVtKSA9PiBkZWVwUGFydGlhbGlmeShpdGVtKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kT2JqZWN0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVwcmVjYXRlZCBJbiBtb3N0IGNhc2VzLCB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgLSB1bmtub3duIHByb3BlcnRpZXMgYXJlIG5vdyBzaWxlbnRseSBzdHJpcHBlZC5cbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gcGFzcyB0aHJvdWdoIHVua25vd24gcHJvcGVydGllcywgdXNlIGAucGFzc3Rocm91Z2goKWAgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubm9uc3RyaWN0ID0gdGhpcy5wYXNzdGhyb3VnaDtcbiAgICAgICAgLy8gZXh0ZW5kPFxuICAgICAgICAvLyAgIEF1Z21lbnRhdGlvbiBleHRlbmRzIFpvZFJhd1NoYXBlLFxuICAgICAgICAvLyAgIE5ld091dHB1dCBleHRlbmRzIHV0aWwuZmxhdHRlbjx7XG4gICAgICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBPdXRwdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX291dHB1dFwiXVxuICAgICAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBPdXRwdXRcbiAgICAgICAgLy8gICAgICAgPyBPdXRwdXRba11cbiAgICAgICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAgICAgLy8gICB9PixcbiAgICAgICAgLy8gICBOZXdJbnB1dCBleHRlbmRzIHV0aWwuZmxhdHRlbjx7XG4gICAgICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBJbnB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfaW5wdXRcIl1cbiAgICAgICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgSW5wdXRcbiAgICAgICAgLy8gICAgICAgPyBJbnB1dFtrXVxuICAgICAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgICAgICAvLyAgIH0+XG4gICAgICAgIC8vID4oXG4gICAgICAgIC8vICAgYXVnbWVudGF0aW9uOiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gKTogWm9kT2JqZWN0PFxuICAgICAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIEF1Z21lbnRhdGlvbj4sXG4gICAgICAgIC8vICAgVW5rbm93bktleXMsXG4gICAgICAgIC8vICAgQ2F0Y2hhbGwsXG4gICAgICAgIC8vICAgTmV3T3V0cHV0LFxuICAgICAgICAvLyAgIE5ld0lucHV0XG4gICAgICAgIC8vID4ge1xuICAgICAgICAvLyAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgLy8gICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAvLyAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgLy8gICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgICAgICAvLyAgICAgfSksXG4gICAgICAgIC8vICAgfSkgYXMgYW55O1xuICAgICAgICAvLyB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYC5leHRlbmRgIGluc3RlYWRcbiAgICAgICAgICogICovXG4gICAgICAgIHRoaXMuYXVnbWVudCA9IHRoaXMuZXh0ZW5kO1xuICAgIH1cbiAgICBfZ2V0Q2FjaGVkKCkge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVkICE9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZDtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB0aGlzLl9kZWYuc2hhcGUoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IHV0aWwub2JqZWN0S2V5cyhzaGFwZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IHsgc2hhcGUsIGtleXMgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZDtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IHsgc2hhcGUsIGtleXM6IHNoYXBlS2V5cyB9ID0gdGhpcy5fZ2V0Q2FjaGVkKCk7XG4gICAgICAgIGNvbnN0IGV4dHJhS2V5cyA9IFtdO1xuICAgICAgICBpZiAoISh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBab2ROZXZlciAmJiB0aGlzLl9kZWYudW5rbm93bktleXMgPT09IFwic3RyaXBcIikpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGN0eC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFwZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFwZUtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbGlkYXRvciA9IHNoYXBlW2tleV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICB2YWx1ZToga2V5VmFsaWRhdG9yLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBab2ROZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdW5rbm93bktleXMgPSB0aGlzLl9kZWYudW5rbm93bktleXM7XG4gICAgICAgICAgICBpZiAodW5rbm93bktleXMgPT09IFwicGFzc3Rocm91Z2hcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4dHJhS2V5cykge1xuICAgICAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBjdHguZGF0YVtrZXldIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVua25vd25LZXlzID09PSBcInN0cmljdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogZXh0cmFLZXlzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5rbm93bktleXMgPT09IFwic3RyaXBcIikge1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBab2RPYmplY3QgZXJyb3I6IGludmFsaWQgdW5rbm93bktleXMgdmFsdWUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBydW4gY2F0Y2hhbGwgdmFsaWRhdGlvblxuICAgICAgICAgICAgY29uc3QgY2F0Y2hhbGwgPSB0aGlzLl9kZWYuY2F0Y2hhbGw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHRyYUtleXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0Y2hhbGwuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIGtleSkgLy8sIGN0eC5jaGlsZChrZXkpLCB2YWx1ZSwgZ2V0UGFyc2VkVHlwZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzeW5jUGFpcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3luY1BhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IHBhaXIuYWx3YXlzU2V0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNQYWlycztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHN5bmNQYWlycykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBzeW5jUGFpcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zaGFwZSgpO1xuICAgIH1cbiAgICBzdHJpY3QobWVzc2FnZSkge1xuICAgICAgICBlcnJvclV0aWwuZXJyVG9PYmo7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICAgICAgLi4uKG1lc3NhZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcDogKGlzc3VlLCBjdHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRFcnJvciA9IHRoaXMuX2RlZi5lcnJvck1hcD8uKGlzc3VlLCBjdHgpLm1lc3NhZ2UgPz8gY3R4LmRlZmF1bHRFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcInVucmVjb2duaXplZF9rZXlzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLm1lc3NhZ2UgPz8gZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RyaXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXNzdGhyb3VnaCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwicGFzc3Rocm91Z2hcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNvbnN0IEF1Z21lbnRGYWN0b3J5ID1cbiAgICAvLyAgIDxEZWYgZXh0ZW5kcyBab2RPYmplY3REZWY+KGRlZjogRGVmKSA9PlxuICAgIC8vICAgPEF1Z21lbnRhdGlvbiBleHRlbmRzIFpvZFJhd1NoYXBlPihcbiAgICAvLyAgICAgYXVnbWVudGF0aW9uOiBBdWdtZW50YXRpb25cbiAgICAvLyAgICk6IFpvZE9iamVjdDxcbiAgICAvLyAgICAgZXh0ZW5kU2hhcGU8UmV0dXJuVHlwZTxEZWZbXCJzaGFwZVwiXT4sIEF1Z21lbnRhdGlvbj4sXG4gICAgLy8gICAgIERlZltcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgICBEZWZbXCJjYXRjaGFsbFwiXVxuICAgIC8vICAgPiA9PiB7XG4gICAgLy8gICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgICAuLi5kZWYsXG4gICAgLy8gICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgLy8gICAgICAgICAuLi5kZWYuc2hhcGUoKSxcbiAgICAvLyAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAvLyAgICAgICB9KSxcbiAgICAvLyAgICAgfSkgYXMgYW55O1xuICAgIC8vICAgfTtcbiAgICBleHRlbmQoYXVnbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJpb3IgdG8gem9kQDEuMC4xMiB0aGVyZSB3YXMgYSBidWcgaW4gdGhlXG4gICAgICogaW5mZXJyZWQgdHlwZSBvZiBtZXJnZWQgb2JqZWN0cy4gUGxlYXNlXG4gICAgICogdXBncmFkZSBpZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBpc3N1ZXMuXG4gICAgICovXG4gICAgbWVyZ2UobWVyZ2luZykge1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgICAgICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICAgICAgLi4ubWVyZ2luZy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG4gICAgLy8gbWVyZ2U8XG4gICAgLy8gICBJbmNvbWluZyBleHRlbmRzIEFueVpvZE9iamVjdCxcbiAgICAvLyAgIEF1Z21lbnRhdGlvbiBleHRlbmRzIEluY29taW5nW1wic2hhcGVcIl0sXG4gICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIE91dHB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBPdXRwdXRcbiAgICAvLyAgICAgICA/IE91dHB1dFtrXVxuICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgLy8gICB9LFxuICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIElucHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgSW5wdXRcbiAgICAvLyAgICAgICA/IElucHV0W2tdXG4gICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAvLyAgIH1cbiAgICAvLyA+KFxuICAgIC8vICAgbWVyZ2luZzogSW5jb21pbmdcbiAgICAvLyApOiBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdLFxuICAgIC8vICAgTmV3T3V0cHV0LFxuICAgIC8vICAgTmV3SW5wdXRcbiAgICAvLyA+IHtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBzZXRLZXkoa2V5LCBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXVnbWVudCh7IFtrZXldOiBzY2hlbWEgfSk7XG4gICAgfVxuICAgIC8vIG1lcmdlPEluY29taW5nIGV4dGVuZHMgQW55Wm9kT2JqZWN0PihcbiAgICAvLyAgIG1lcmdpbmc6IEluY29taW5nXG4gICAgLy8gKTogLy9ab2RPYmplY3Q8VCAmIEluY29taW5nW1wiX3NoYXBlXCJdLCBVbmtub3duS2V5cywgQ2F0Y2hhbGw+ID0gKG1lcmdpbmcpID0+IHtcbiAgICAvLyBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdXG4gICAgLy8gPiB7XG4gICAgLy8gICAvLyBjb25zdCBtZXJnZWRTaGFwZSA9IG9iamVjdFV0aWwubWVyZ2VTaGFwZXMoXG4gICAgLy8gICAvLyAgIHRoaXMuX2RlZi5zaGFwZSgpLFxuICAgIC8vICAgLy8gICBtZXJnaW5nLl9kZWYuc2hhcGUoKVxuICAgIC8vICAgLy8gKTtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBjYXRjaGFsbChpbmRleCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjYXRjaGFsbDogaW5kZXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaWNrKG1hc2spIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdXRpbC5vYmplY3RLZXlzKG1hc2spKSB7XG4gICAgICAgICAgICBpZiAobWFza1trZXldICYmIHRoaXMuc2hhcGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb21pdChtYXNrKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSkge1xuICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZGVlcFBhcnRpYWwoKSB7XG4gICAgICAgIHJldHVybiBkZWVwUGFydGlhbGlmeSh0aGlzKTtcbiAgICB9XG4gICAgcGFydGlhbChtYXNrKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWlyZWQobWFzaykge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpIHtcbiAgICAgICAgICAgIGlmIChtYXNrICYmICFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGRTY2hlbWE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG5ld0ZpZWxkIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC5fZGVmLmlubmVyVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IG5ld0ZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGtleW9mKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlWm9kRW51bSh1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpO1xuICAgIH1cbn1cblpvZE9iamVjdC5jcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LnN0cmljdENyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LmxhenljcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kVW5pb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9kZWYub3B0aW9ucztcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0cyhyZXN1bHRzKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZmlyc3QgaXNzdWUtZnJlZSB2YWxpZGF0aW9uIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgaXNzdWVzIGZyb20gZGlydHkgb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goLi4ucmVzdWx0LmN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmV0dXJuIGludmFsaWRcbiAgICAgICAgICAgIGNvbnN0IHVuaW9uRXJyb3JzID0gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gbmV3IFpvZEVycm9yKHJlc3VsdC5jdHguY29tbW9uLmlzc3VlcykpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24sXG4gICAgICAgICAgICAgICAgdW5pb25FcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwob3B0aW9ucy5tYXAoYXN5bmMgKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3R4ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LmNvbW1vbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYXdhaXQgb3B0aW9uLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGNoaWxkQ3R4LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY3R4OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkpLnRoZW4oaGFuZGxlUmVzdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgZGlydHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBpc3N1ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEN0eCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRpb24uX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIiAmJiAhZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlydHkgPSB7IHJlc3VsdCwgY3R4OiBjaGlsZEN0eCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRDdHguY29tbW9uLmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzLnB1c2goY2hpbGRDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpcnR5KSB7XG4gICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaCguLi5kaXJ0eS5jdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpcnR5LnJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVuaW9uRXJyb3JzID0gaXNzdWVzLm1hcCgoaXNzdWVzKSA9PiBuZXcgWm9kRXJyb3IoaXNzdWVzKSk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbixcbiAgICAgICAgICAgICAgICB1bmlvbkVycm9ycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG59XG5ab2RVbmlvbi5jcmVhdGUgPSAodHlwZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5pb24oe1xuICAgICAgICBvcHRpb25zOiB0eXBlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmlvbixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICBab2REaXNjcmltaW5hdGVkVW5pb24gICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5jb25zdCBnZXREaXNjcmltaW5hdG9yID0gKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZExhenkpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5zY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRWZmZWN0cykge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLmlubmVyVHlwZSgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZExpdGVyYWwpIHtcbiAgICAgICAgcmV0dXJuIFt0eXBlLnZhbHVlXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEVudW0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGUub3B0aW9ucztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE5hdGl2ZUVudW0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0VmFsdWVzKHR5cGUuZW51bSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2REZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuX2RlZi5pbm5lclR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kVW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtudWxsXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkLCAuLi5nZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE51bGxhYmxlKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgLi4uZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RCcmFuZGVkKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kUmVhZG9ubHkpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RDYXRjaCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLl9kZWYuaW5uZXJUeXBlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59O1xuZXhwb3J0IGNsYXNzIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yID0gdGhpcy5kaXNjcmltaW5hdG9yO1xuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBjdHguZGF0YVtkaXNjcmltaW5hdG9yXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zTWFwLmdldChkaXNjcmltaW5hdG9yVmFsdWUpO1xuICAgICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5mcm9tKHRoaXMub3B0aW9uc01hcC5rZXlzKCkpLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtkaXNjcmltaW5hdG9yXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRpc2NyaW1pbmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGlzY3JpbWluYXRvcjtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnNNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9uc01hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uIHNjaGVtYS4gSXRzIGJlaGF2aW91ciBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgbm9ybWFsIHoudW5pb24oKSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBIb3dldmVyLCBpdCBvbmx5IGFsbG93cyBhIHVuaW9uIG9mIG9iamVjdHMsIGFsbCBvZiB3aGljaCBuZWVkIHRvIHNoYXJlIGEgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS4gVGhpcyBwcm9wZXJ0eSBtdXN0XG4gICAgICogaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgZWFjaCBvYmplY3QgaW4gdGhlIHVuaW9uLlxuICAgICAqIEBwYXJhbSBkaXNjcmltaW5hdG9yIHRoZSBuYW1lIG9mIHRoZSBkaXNjcmltaW5hdG9yIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGVzIGFuIGFycmF5IG9mIG9iamVjdCBzY2hlbWFzXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICAgIC8vIEdldCBhbGwgdGhlIHZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWVzXG4gICAgICAgIGNvbnN0IG9wdGlvbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWVzID0gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnNoYXBlW2Rpc2NyaW1pbmF0b3JdKTtcbiAgICAgICAgICAgIGlmICghZGlzY3JpbWluYXRvclZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgZGlzY3JpbWluYXRvciB2YWx1ZSBmb3Iga2V5IFxcYCR7ZGlzY3JpbWluYXRvcn1cXGAgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGFsbCBzY2hlbWEgb3B0aW9uc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkaXNjcmltaW5hdG9yVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NyaW1pbmF0b3IgcHJvcGVydHkgJHtTdHJpbmcoZGlzY3JpbWluYXRvcil9IGhhcyBkdXBsaWNhdGUgdmFsdWUgJHtTdHJpbmcodmFsdWUpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnNldCh2YWx1ZSwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REaXNjcmltaW5hdGVkVW5pb24sXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnNNYXAsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlVmFsdWVzKGEsIGIpIHtcbiAgICBjb25zdCBhVHlwZSA9IGdldFBhcnNlZFR5cGUoYSk7XG4gICAgY29uc3QgYlR5cGUgPSBnZXRQYXJzZWRUeXBlKGIpO1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLm9iamVjdCAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgY29uc3QgYktleXMgPSB1dGlsLm9iamVjdEtleXMoYik7XG4gICAgICAgIGNvbnN0IHNoYXJlZEtleXMgPSB1dGlsLm9iamVjdEtleXMoYSkuZmlsdGVyKChrZXkpID0+IGJLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLmEsIC4uLmIgfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2hhcmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhhW2tleV0sIGJba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHNoYXJlZFZhbHVlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld09iaiB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5hcnJheSAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BID0gYVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBpdGVtQiA9IGJbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhpdGVtQSwgaXRlbUIpO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3QXJyYXkucHVzaChzaGFyZWRWYWx1ZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3QXJyYXkgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUuZGF0ZSAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5kYXRlICYmICthID09PSArYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFpvZEludGVyc2VjdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBoYW5kbGVQYXJzZWQgPSAocGFyc2VkTGVmdCwgcGFyc2VkUmlnaHQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Fib3J0ZWQocGFyc2VkTGVmdCkgfHwgaXNBYm9ydGVkKHBhcnNlZFJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VWYWx1ZXMocGFyc2VkTGVmdC52YWx1ZSwgcGFyc2VkUmlnaHQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFtZXJnZWQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGlydHkocGFyc2VkTGVmdCkgfHwgaXNEaXJ0eShwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogbWVyZ2VkLmRhdGEgfTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmLmxlZnQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKS50aGVuKChbbGVmdCwgcmlnaHRdKSA9PiBoYW5kbGVQYXJzZWQobGVmdCwgcmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVQYXJzZWQodGhpcy5fZGVmLmxlZnQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KSwgdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZSA9IChsZWZ0LCByaWdodCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RJbnRlcnNlY3Rpb24oe1xuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8gdHlwZSBab2RUdXBsZUl0ZW1zID0gW1pvZFR5cGVBbnksIC4uLlpvZFR5cGVBbnlbXV07XG5leHBvcnQgY2xhc3MgWm9kVHVwbGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA8IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgbWluaW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdCA9IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICBpZiAoIXJlc3QgJiYgY3R4LmRhdGEubGVuZ3RoID4gdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgbWF4aW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4uY3R4LmRhdGFdXG4gICAgICAgICAgICAubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuX2RlZi5pdGVtc1tpdGVtSW5kZXhdIHx8IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICAgICAgaWYgKCFzY2hlbWEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGl0ZW1JbmRleCkpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gISF4KTsgLy8gZmlsdGVyIG51bGxzXG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaXRlbXMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaXRlbXM7XG4gICAgfVxuICAgIHJlc3QocmVzdCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHJlc3QsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblpvZFR1cGxlLmNyZWF0ZSA9IChzY2hlbWFzLCBwYXJhbXMpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgcGFzcyBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHoudHVwbGUoWyAuLi4gXSlcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgWm9kVHVwbGUoe1xuICAgICAgICBpdGVtczogc2NoZW1hcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RUdXBsZSxcbiAgICAgICAgcmVzdDogbnVsbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RSZWNvcmQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBnZXQga2V5U2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgfVxuICAgIGdldCB2YWx1ZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgICAgIGNvbnN0IGtleVR5cGUgPSB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3R4LmRhdGEpIHtcbiAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleToga2V5VHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGtleSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBjdHguZGF0YVtrZXldLCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0QXN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShmaXJzdCwgc2Vjb25kLCB0aGlyZCkge1xuICAgICAgICBpZiAoc2Vjb25kIGluc3RhbmNlb2YgWm9kVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAgICAgIGtleVR5cGU6IGZpcnN0LFxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZTogc2Vjb25kLFxuICAgICAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcmQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAga2V5VHlwZTogWm9kU3RyaW5nLmNyZWF0ZSgpLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiBmaXJzdCxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhzZWNvbmQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kTWFwIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IGtleVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgIH1cbiAgICBnZXQgdmFsdWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm1hcCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5tYXAsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlUeXBlID0gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGNvbnN0IHBhaXJzID0gWy4uLmN0eC5kYXRhLmVudHJpZXMoKV0ubWFwKChba2V5LCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleToga2V5VHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGtleSwgY3R4LnBhdGgsIFtpbmRleCwgXCJrZXlcIl0pKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBbaW5kZXgsIFwidmFsdWVcIl0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbE1hcC5zZXQoa2V5LnZhbHVlLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxNYXAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsTWFwLnNldChrZXkudmFsdWUsIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxNYXAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblpvZE1hcC5jcmVhdGUgPSAoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE1hcCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RNYXAsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kU2V0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zZXQpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc2V0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmO1xuICAgICAgICBpZiAoZGVmLm1pblNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplIDwgZGVmLm1pblNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogZGVmLm1pblNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluU2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWF4U2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLnNpemUgPiBkZWYubWF4U2l6ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heFNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4U2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplU2V0KGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkU2V0LmFkZChlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcGFyc2VkU2V0IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbLi4uY3R4LmRhdGEudmFsdWVzKCldLm1hcCgoaXRlbSwgaSkgPT4gdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKSk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZWxlbWVudHMpLnRoZW4oKGVsZW1lbnRzKSA9PiBmaW5hbGl6ZVNldChlbGVtZW50cykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplU2V0KGVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtaW4obWluU2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5TaXplOiB7IHZhbHVlOiBtaW5TaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhTaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1heFNpemU6IHsgdmFsdWU6IG1heFNpemUsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2l6ZShzaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbihzaXplLCBtZXNzYWdlKS5tYXgoc2l6ZSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblpvZFNldC5jcmVhdGUgPSAodmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgbWluU2l6ZTogbnVsbCxcbiAgICAgICAgbWF4U2l6ZTogbnVsbCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTZXQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kRnVuY3Rpb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSA9IHRoaXMuaW1wbGVtZW50O1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5mdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VBcmdzSXNzdWUoYXJncywgZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSXNzdWUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3MsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXBzOiBbY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsIGN0eC5zY2hlbWFFcnJvck1hcCwgZ2V0RXJyb3JNYXAoKSwgZGVmYXVsdEVycm9yTWFwXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlUmV0dXJuc0lzc3VlKHJldHVybnMsIGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUlzc3VlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZXR1cm5zLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwczogW2N0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLCBjdHguc2NoZW1hRXJyb3JNYXAsIGdldEVycm9yTWFwKCksIGRlZmF1bHRFcnJvck1hcF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZUVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBlcnJvck1hcDogY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAgfTtcbiAgICAgICAgY29uc3QgZm4gPSBjdHguZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5yZXR1cm5zIGluc3RhbmNlb2YgWm9kUHJvbWlzZSkge1xuICAgICAgICAgICAgLy8gV291bGQgbG92ZSBhIHdheSB0byBhdm9pZCBkaXNhYmxpbmcgdGhpcyBydWxlLCBidXQgd2UgbmVlZFxuICAgICAgICAgICAgLy8gYW4gYWxpYXMgKHVzaW5nIGFuIGFycm93IGZ1bmN0aW9uIHdhcyB3aGF0IGNhdXNlZCAyNjUxKS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIE9LKGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoW10pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBhd2FpdCBtZS5fZGVmLmFyZ3MucGFyc2VBc3luYyhhcmdzLCBwYXJhbXMpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VBcmdzSXNzdWUoYXJncywgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gYXdhaXQgbWUuX2RlZi5yZXR1cm5zLl9kZWYudHlwZVxuICAgICAgICAgICAgICAgICAgICAucGFyc2VBc3luYyhyZXN1bHQsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRSZXR1cm5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBXb3VsZCBsb3ZlIGEgd2F5IHRvIGF2b2lkIGRpc2FibGluZyB0aGlzIHJ1bGUsIGJ1dCB3ZSBuZWVkXG4gICAgICAgICAgICAvLyBhbiBhbGlhcyAodXNpbmcgYW4gYXJyb3cgZnVuY3Rpb24gd2FzIHdoYXQgY2F1c2VkIDI2NTEpLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT0soZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gbWUuX2RlZi5hcmdzLnNhZmVQYXJzZShhcmdzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkQXJncy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBab2RFcnJvcihbbWFrZUFyZ3NJc3N1ZShhcmdzLCBwYXJzZWRBcmdzLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzLmRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJldHVybnMgPSBtZS5fZGVmLnJldHVybnMuc2FmZVBhcnNlKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFJldHVybnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBwYXJzZWRSZXR1cm5zLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5hcmdzO1xuICAgIH1cbiAgICByZXR1cm5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnJldHVybnM7XG4gICAgfVxuICAgIGFyZ3MoLi4uaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBhcmdzOiBab2RUdXBsZS5jcmVhdGUoaXRlbXMpLnJlc3QoWm9kVW5rbm93bi5jcmVhdGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm5zKHJldHVyblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdHJpY3RJbXBsZW1lbnQoZnVuYykge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGdW5jID0gdGhpcy5wYXJzZShmdW5jKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEZ1bmM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYXJncywgcmV0dXJucywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgYXJnczogKGFyZ3MgPyBhcmdzIDogWm9kVHVwbGUuY3JlYXRlKFtdKS5yZXN0KFpvZFVua25vd24uY3JlYXRlKCkpKSxcbiAgICAgICAgICAgIHJldHVybnM6IHJldHVybnMgfHwgWm9kVW5rbm93bi5jcmVhdGUoKSxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRnVuY3Rpb24sXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBab2RMYXp5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IHNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBsYXp5U2NoZW1hID0gdGhpcy5fZGVmLmdldHRlcigpO1xuICAgICAgICByZXR1cm4gbGF6eVNjaGVtYS5fcGFyc2UoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgIH1cbn1cblpvZExhenkuY3JlYXRlID0gKGdldHRlciwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgZ2V0dGVyOiBnZXR0ZXIsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTGF6eSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RMaXRlcmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5kYXRhICE9PSB0aGlzLl9kZWYudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB0aGlzLl9kZWYudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWU7XG4gICAgfVxufVxuWm9kTGl0ZXJhbC5jcmVhdGUgPSAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTGl0ZXJhbCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RMaXRlcmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gY3JlYXRlWm9kRW51bSh2YWx1ZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFbnVtLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY2xhc3MgWm9kRW51bSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0LmRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB1dGlsLmpvaW5WYWx1ZXMoZXhwZWN0ZWRWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZSA9IG5ldyBTZXQodGhpcy5fZGVmLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5oYXMoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG4gICAgZ2V0IGVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBnZXQgVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZ2V0IEVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBleHRyYWN0KHZhbHVlcywgbmV3RGVmID0gdGhpcy5fZGVmKSB7XG4gICAgICAgIHJldHVybiBab2RFbnVtLmNyZWF0ZSh2YWx1ZXMsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIC4uLm5ld0RlZixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4Y2x1ZGUodmFsdWVzLCBuZXdEZWYgPSB0aGlzLl9kZWYpIHtcbiAgICAgICAgcmV0dXJuIFpvZEVudW0uY3JlYXRlKHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gIXZhbHVlcy5pbmNsdWRlcyhvcHQpKSwge1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgLi4ubmV3RGVmLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5ab2RFbnVtLmNyZWF0ZSA9IGNyZWF0ZVpvZEVudW07XG5leHBvcnQgY2xhc3MgWm9kTmF0aXZlRW51bSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbnVtVmFsdWVzID0gdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXModGhpcy5fZGVmLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZyAmJiBjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdXRpbC5vYmplY3RWYWx1ZXMobmF0aXZlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdXRpbC5qb2luVmFsdWVzKGV4cGVjdGVkVmFsdWVzKSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUgPSBuZXcgU2V0KHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB1dGlsLm9iamVjdFZhbHVlcyhuYXRpdmVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBlbnVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG59XG5ab2ROYXRpdmVFbnVtLmNyZWF0ZSA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmF0aXZlRW51bSh7XG4gICAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hdGl2ZUVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kUHJvbWlzZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5wcm9taXNlICYmIGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnByb21pc2UsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNpZmllZCA9IGN0eC5wYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnByb21pc2UgPyBjdHguZGF0YSA6IFByb21pc2UucmVzb2x2ZShjdHguZGF0YSk7XG4gICAgICAgIHJldHVybiBPSyhwcm9taXNpZmllZC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGUucGFyc2VBc3luYyhkYXRhLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5ab2RQcm9taXNlLmNyZWF0ZSA9IChzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kUHJvbWlzZSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQcm9taXNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZEVmZmVjdHMgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBpbm5lclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hO1xuICAgIH1cbiAgICBzb3VyY2VUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0c1xuICAgICAgICAgICAgPyB0aGlzLl9kZWYuc2NoZW1hLnNvdXJjZVR5cGUoKVxuICAgICAgICAgICAgOiB0aGlzLl9kZWYuc2NoZW1hO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZWZmZWN0ID0gdGhpcy5fZGVmLmVmZmVjdCB8fCBudWxsO1xuICAgICAgICBjb25zdCBjaGVja0N0eCA9IHtcbiAgICAgICAgICAgIGFkZElzc3VlOiAoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCBhcmcpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcuZmF0YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXRoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY2hlY2tDdHguYWRkSXNzdWUgPSBjaGVja0N0eC5hZGRJc3N1ZS5iaW5kKGNoZWNrQ3R4KTtcbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInByZXByb2Nlc3NcIikge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkID0gZWZmZWN0LnRyYW5zZm9ybShjdHguZGF0YSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb2Nlc3NlZCkudGhlbihhc3luYyAocHJvY2Vzc2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcHJvY2Vzc2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJyZWZpbmVtZW50XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVSZWZpbmVtZW50ID0gKGFjYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC5yZWZpbmVtZW50KGFjYywgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgcmVmaW5lbWVudCBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXIgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbm5lci5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkXG4gICAgICAgICAgICAgICAgZXhlY3V0ZVJlZmluZW1lbnQoaW5uZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KS50aGVuKChpbm5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQoYmFzZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXN5bmNocm9ub3VzIHRyYW5zZm9ybSBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KS50aGVuKChiYXNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZChiYXNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpKS50aGVuKChyZXN1bHQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGVmZmVjdCk7XG4gICAgfVxufVxuWm9kRWZmZWN0cy5jcmVhdGUgPSAoc2NoZW1hLCBlZmZlY3QsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICBlZmZlY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RFZmZlY3RzLmNyZWF0ZVdpdGhQcmVwcm9jZXNzID0gKHByZXByb2Nlc3MsIHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJwcmVwcm9jZXNzXCIsIHRyYW5zZm9ybTogcHJlcHJvY2VzcyB9LFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgeyBab2RFZmZlY3RzIGFzIFpvZFRyYW5zZm9ybWVyIH07XG5leHBvcnQgY2xhc3MgWm9kT3B0aW9uYWwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBPSyh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kT3B0aW9uYWwuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT3B0aW9uYWwoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kTnVsbGFibGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2ROdWxsYWJsZS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsYWJsZSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsYWJsZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2REZWZhdWx0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBsZXQgZGF0YSA9IGN0eC5kYXRhO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGVmLmRlZmF1bHRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZURlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZERlZmF1bHQuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRGVmYXVsdCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBwYXJhbXMuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiID8gcGFyYW1zLmRlZmF1bHQgOiAoKSA9PiBwYXJhbXMuZGVmYXVsdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RDYXRjaCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgLy8gbmV3Q3R4IGlzIHVzZWQgdG8gbm90IGNvbGxlY3QgaXNzdWVzIGZyb20gaW5uZXIgdHlwZXMgaW4gY3R4XG4gICAgICAgIGNvbnN0IG5ld0N0eCA9IHtcbiAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGE6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgcGF0aDogbmV3Q3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICAgICAgICAuLi5uZXdDdHgsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogbmV3Q3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogXCJ2YWxpZFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ2F0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZENhdGNoLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICBjYXRjaFZhbHVlOiB0eXBlb2YgcGFyYW1zLmNhdGNoID09PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMuY2F0Y2ggOiAoKSA9PiBwYXJhbXMuY2F0Y2gsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kTmFOIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubmFuKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5hbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbn1cblpvZE5hTi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROYU4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hTixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCBCUkFORCA9IFN5bWJvbChcInpvZF9icmFuZFwiKTtcbmV4cG9ydCBjbGFzcyBab2RCcmFuZGVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kUGlwZWxpbmUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUFzeW5jID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluUmVzdWx0ID0gYXdhaXQgdGhpcy5fZGVmLmluLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkoaW5SZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vdXQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpblJlc3VsdCA9IHRoaXMuX2RlZi5pbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwiZGlydHlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm91dC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RQaXBlbGluZSh7XG4gICAgICAgICAgICBpbjogYSxcbiAgICAgICAgICAgIG91dDogYixcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBab2RSZWFkb25seSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIGNvbnN0IGZyZWV6ZSA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgPSBPYmplY3QuZnJlZXplKGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0FzeW5jKHJlc3VsdCkgPyByZXN1bHQudGhlbigoZGF0YSkgPT4gZnJlZXplKGRhdGEpKSA6IGZyZWV6ZShyZXN1bHQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZFJlYWRvbmx5LmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFJlYWRvbmx5KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlYWRvbmx5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgIHouY3VzdG9tICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZnVuY3Rpb24gY2xlYW5QYXJhbXMocGFyYW1zLCBkYXRhKSB7XG4gICAgY29uc3QgcCA9IHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIiA/IHBhcmFtcyhkYXRhKSA6IHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2U6IHBhcmFtcyB9IDogcGFyYW1zO1xuICAgIGNvbnN0IHAyID0gdHlwZW9mIHAgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2U6IHAgfSA6IHA7XG4gICAgcmV0dXJuIHAyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbShjaGVjaywgX3BhcmFtcyA9IHt9LCBcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqXG4gKiBQYXNzIGBmYXRhbGAgaW50byB0aGUgcGFyYW1zIG9iamVjdCBpbnN0ZWFkOlxuICpcbiAqIGBgYHRzXG4gKiB6LnN0cmluZygpLmN1c3RvbSgodmFsKSA9PiB2YWwubGVuZ3RoID4gNSwgeyBmYXRhbDogZmFsc2UgfSlcbiAqIGBgYFxuICpcbiAqL1xuZmF0YWwpIHtcbiAgICBpZiAoY2hlY2spXG4gICAgICAgIHJldHVybiBab2RBbnkuY3JlYXRlKCkuc3VwZXJSZWZpbmUoKGRhdGEsIGN0eCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgciA9IGNoZWNrKGRhdGEpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIudGhlbigocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGNsZWFuUGFyYW1zKF9wYXJhbXMsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX2ZhdGFsID0gcGFyYW1zLmZhdGFsID8/IGZhdGFsID8/IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCAuLi5wYXJhbXMsIGZhdGFsOiBfZmF0YWwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGNsZWFuUGFyYW1zKF9wYXJhbXMsIGRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9mYXRhbCA9IHBhcmFtcy5mYXRhbCA/PyBmYXRhbCA/PyB0cnVlO1xuICAgICAgICAgICAgICAgIGN0eC5hZGRJc3N1ZSh7IGNvZGU6IFwiY3VzdG9tXCIsIC4uLnBhcmFtcywgZmF0YWw6IF9mYXRhbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIFpvZEFueS5jcmVhdGUoKTtcbn1cbmV4cG9ydCB7IFpvZFR5cGUgYXMgU2NoZW1hLCBab2RUeXBlIGFzIFpvZFNjaGVtYSB9O1xuZXhwb3J0IGNvbnN0IGxhdGUgPSB7XG4gICAgb2JqZWN0OiBab2RPYmplY3QubGF6eWNyZWF0ZSxcbn07XG5leHBvcnQgdmFyIFpvZEZpcnN0UGFydHlUeXBlS2luZDtcbihmdW5jdGlvbiAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKSB7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU3RyaW5nXCJdID0gXCJab2RTdHJpbmdcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdW1iZXJcIl0gPSBcIlpvZE51bWJlclwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5hTlwiXSA9IFwiWm9kTmFOXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQmlnSW50XCJdID0gXCJab2RCaWdJbnRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCb29sZWFuXCJdID0gXCJab2RCb29sZWFuXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGF0ZVwiXSA9IFwiWm9kRGF0ZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFN5bWJvbFwiXSA9IFwiWm9kU3ltYm9sXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5kZWZpbmVkXCJdID0gXCJab2RVbmRlZmluZWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdWxsXCJdID0gXCJab2ROdWxsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQW55XCJdID0gXCJab2RBbnlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmtub3duXCJdID0gXCJab2RVbmtub3duXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmV2ZXJcIl0gPSBcIlpvZE5ldmVyXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVm9pZFwiXSA9IFwiWm9kVm9pZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEFycmF5XCJdID0gXCJab2RBcnJheVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE9iamVjdFwiXSA9IFwiWm9kT2JqZWN0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5pb25cIl0gPSBcIlpvZFVuaW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCJdID0gXCJab2REaXNjcmltaW5hdGVkVW5pb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RJbnRlcnNlY3Rpb25cIl0gPSBcIlpvZEludGVyc2VjdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFR1cGxlXCJdID0gXCJab2RUdXBsZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFJlY29yZFwiXSA9IFwiWm9kUmVjb3JkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTWFwXCJdID0gXCJab2RNYXBcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTZXRcIl0gPSBcIlpvZFNldFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEZ1bmN0aW9uXCJdID0gXCJab2RGdW5jdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZExhenlcIl0gPSBcIlpvZExhenlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RMaXRlcmFsXCJdID0gXCJab2RMaXRlcmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRW51bVwiXSA9IFwiWm9kRW51bVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEVmZmVjdHNcIl0gPSBcIlpvZEVmZmVjdHNcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROYXRpdmVFbnVtXCJdID0gXCJab2ROYXRpdmVFbnVtXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kT3B0aW9uYWxcIl0gPSBcIlpvZE9wdGlvbmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVsbGFibGVcIl0gPSBcIlpvZE51bGxhYmxlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGVmYXVsdFwiXSA9IFwiWm9kRGVmYXVsdFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZENhdGNoXCJdID0gXCJab2RDYXRjaFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFByb21pc2VcIl0gPSBcIlpvZFByb21pc2VcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCcmFuZGVkXCJdID0gXCJab2RCcmFuZGVkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUGlwZWxpbmVcIl0gPSBcIlpvZFBpcGVsaW5lXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUmVhZG9ubHlcIl0gPSBcIlpvZFJlYWRvbmx5XCI7XG59KShab2RGaXJzdFBhcnR5VHlwZUtpbmQgfHwgKFpvZEZpcnN0UGFydHlUeXBlS2luZCA9IHt9KSk7XG4vLyByZXF1aXJlcyBUUyA0LjQrXG5jbGFzcyBDbGFzcyB7XG4gICAgY29uc3RydWN0b3IoLi4uXykgeyB9XG59XG5jb25zdCBpbnN0YW5jZU9mVHlwZSA9IChcbi8vIGNvbnN0IGluc3RhbmNlT2ZUeXBlID0gPFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+KFxuY2xzLCBwYXJhbXMgPSB7XG4gICAgbWVzc2FnZTogYElucHV0IG5vdCBpbnN0YW5jZSBvZiAke2Nscy5uYW1lfWAsXG59KSA9PiBjdXN0b20oKGRhdGEpID0+IGRhdGEgaW5zdGFuY2VvZiBjbHMsIHBhcmFtcyk7XG5jb25zdCBzdHJpbmdUeXBlID0gWm9kU3RyaW5nLmNyZWF0ZTtcbmNvbnN0IG51bWJlclR5cGUgPSBab2ROdW1iZXIuY3JlYXRlO1xuY29uc3QgbmFuVHlwZSA9IFpvZE5hTi5jcmVhdGU7XG5jb25zdCBiaWdJbnRUeXBlID0gWm9kQmlnSW50LmNyZWF0ZTtcbmNvbnN0IGJvb2xlYW5UeXBlID0gWm9kQm9vbGVhbi5jcmVhdGU7XG5jb25zdCBkYXRlVHlwZSA9IFpvZERhdGUuY3JlYXRlO1xuY29uc3Qgc3ltYm9sVHlwZSA9IFpvZFN5bWJvbC5jcmVhdGU7XG5jb25zdCB1bmRlZmluZWRUeXBlID0gWm9kVW5kZWZpbmVkLmNyZWF0ZTtcbmNvbnN0IG51bGxUeXBlID0gWm9kTnVsbC5jcmVhdGU7XG5jb25zdCBhbnlUeXBlID0gWm9kQW55LmNyZWF0ZTtcbmNvbnN0IHVua25vd25UeXBlID0gWm9kVW5rbm93bi5jcmVhdGU7XG5jb25zdCBuZXZlclR5cGUgPSBab2ROZXZlci5jcmVhdGU7XG5jb25zdCB2b2lkVHlwZSA9IFpvZFZvaWQuY3JlYXRlO1xuY29uc3QgYXJyYXlUeXBlID0gWm9kQXJyYXkuY3JlYXRlO1xuY29uc3Qgb2JqZWN0VHlwZSA9IFpvZE9iamVjdC5jcmVhdGU7XG5jb25zdCBzdHJpY3RPYmplY3RUeXBlID0gWm9kT2JqZWN0LnN0cmljdENyZWF0ZTtcbmNvbnN0IHVuaW9uVHlwZSA9IFpvZFVuaW9uLmNyZWF0ZTtcbmNvbnN0IGRpc2NyaW1pbmF0ZWRVbmlvblR5cGUgPSBab2REaXNjcmltaW5hdGVkVW5pb24uY3JlYXRlO1xuY29uc3QgaW50ZXJzZWN0aW9uVHlwZSA9IFpvZEludGVyc2VjdGlvbi5jcmVhdGU7XG5jb25zdCB0dXBsZVR5cGUgPSBab2RUdXBsZS5jcmVhdGU7XG5jb25zdCByZWNvcmRUeXBlID0gWm9kUmVjb3JkLmNyZWF0ZTtcbmNvbnN0IG1hcFR5cGUgPSBab2RNYXAuY3JlYXRlO1xuY29uc3Qgc2V0VHlwZSA9IFpvZFNldC5jcmVhdGU7XG5jb25zdCBmdW5jdGlvblR5cGUgPSBab2RGdW5jdGlvbi5jcmVhdGU7XG5jb25zdCBsYXp5VHlwZSA9IFpvZExhenkuY3JlYXRlO1xuY29uc3QgbGl0ZXJhbFR5cGUgPSBab2RMaXRlcmFsLmNyZWF0ZTtcbmNvbnN0IGVudW1UeXBlID0gWm9kRW51bS5jcmVhdGU7XG5jb25zdCBuYXRpdmVFbnVtVHlwZSA9IFpvZE5hdGl2ZUVudW0uY3JlYXRlO1xuY29uc3QgcHJvbWlzZVR5cGUgPSBab2RQcm9taXNlLmNyZWF0ZTtcbmNvbnN0IGVmZmVjdHNUeXBlID0gWm9kRWZmZWN0cy5jcmVhdGU7XG5jb25zdCBvcHRpb25hbFR5cGUgPSBab2RPcHRpb25hbC5jcmVhdGU7XG5jb25zdCBudWxsYWJsZVR5cGUgPSBab2ROdWxsYWJsZS5jcmVhdGU7XG5jb25zdCBwcmVwcm9jZXNzVHlwZSA9IFpvZEVmZmVjdHMuY3JlYXRlV2l0aFByZXByb2Nlc3M7XG5jb25zdCBwaXBlbGluZVR5cGUgPSBab2RQaXBlbGluZS5jcmVhdGU7XG5jb25zdCBvc3RyaW5nID0gKCkgPT4gc3RyaW5nVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvbnVtYmVyID0gKCkgPT4gbnVtYmVyVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvYm9vbGVhbiA9ICgpID0+IGJvb2xlYW5UeXBlKCkub3B0aW9uYWwoKTtcbmV4cG9ydCBjb25zdCBjb2VyY2UgPSB7XG4gICAgc3RyaW5nOiAoKGFyZykgPT4gWm9kU3RyaW5nLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBudW1iZXI6ICgoYXJnKSA9PiBab2ROdW1iZXIuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIGJvb2xlYW46ICgoYXJnKSA9PiBab2RCb29sZWFuLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFyZyxcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgIH0pKSxcbiAgICBiaWdpbnQ6ICgoYXJnKSA9PiBab2RCaWdJbnQuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIGRhdGU6ICgoYXJnKSA9PiBab2REYXRlLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbn07XG5leHBvcnQgeyBhbnlUeXBlIGFzIGFueSwgYXJyYXlUeXBlIGFzIGFycmF5LCBiaWdJbnRUeXBlIGFzIGJpZ2ludCwgYm9vbGVhblR5cGUgYXMgYm9vbGVhbiwgZGF0ZVR5cGUgYXMgZGF0ZSwgZGlzY3JpbWluYXRlZFVuaW9uVHlwZSBhcyBkaXNjcmltaW5hdGVkVW5pb24sIGVmZmVjdHNUeXBlIGFzIGVmZmVjdCwgZW51bVR5cGUgYXMgZW51bSwgZnVuY3Rpb25UeXBlIGFzIGZ1bmN0aW9uLCBpbnN0YW5jZU9mVHlwZSBhcyBpbnN0YW5jZW9mLCBpbnRlcnNlY3Rpb25UeXBlIGFzIGludGVyc2VjdGlvbiwgbGF6eVR5cGUgYXMgbGF6eSwgbGl0ZXJhbFR5cGUgYXMgbGl0ZXJhbCwgbWFwVHlwZSBhcyBtYXAsIG5hblR5cGUgYXMgbmFuLCBuYXRpdmVFbnVtVHlwZSBhcyBuYXRpdmVFbnVtLCBuZXZlclR5cGUgYXMgbmV2ZXIsIG51bGxUeXBlIGFzIG51bGwsIG51bGxhYmxlVHlwZSBhcyBudWxsYWJsZSwgbnVtYmVyVHlwZSBhcyBudW1iZXIsIG9iamVjdFR5cGUgYXMgb2JqZWN0LCBvYm9vbGVhbiwgb251bWJlciwgb3B0aW9uYWxUeXBlIGFzIG9wdGlvbmFsLCBvc3RyaW5nLCBwaXBlbGluZVR5cGUgYXMgcGlwZWxpbmUsIHByZXByb2Nlc3NUeXBlIGFzIHByZXByb2Nlc3MsIHByb21pc2VUeXBlIGFzIHByb21pc2UsIHJlY29yZFR5cGUgYXMgcmVjb3JkLCBzZXRUeXBlIGFzIHNldCwgc3RyaWN0T2JqZWN0VHlwZSBhcyBzdHJpY3RPYmplY3QsIHN0cmluZ1R5cGUgYXMgc3RyaW5nLCBzeW1ib2xUeXBlIGFzIHN5bWJvbCwgZWZmZWN0c1R5cGUgYXMgdHJhbnNmb3JtZXIsIHR1cGxlVHlwZSBhcyB0dXBsZSwgdW5kZWZpbmVkVHlwZSBhcyB1bmRlZmluZWQsIHVuaW9uVHlwZSBhcyB1bmlvbiwgdW5rbm93blR5cGUgYXMgdW5rbm93biwgdm9pZFR5cGUgYXMgdm9pZCwgfTtcbmV4cG9ydCBjb25zdCBORVZFUiA9IElOVkFMSUQ7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiZXhwb3J0IHsgbGlzdEFnZW50cyB9IGZyb20gJy4vbGlzdC1hZ2VudHMubWpzJztcbmV4cG9ydCB7IGdldEFnZW50IH0gZnJvbSAnLi9nZXQtYWdlbnQubWpzJztcbmV4cG9ydCB7IGxpc3RQcmltaXRpdmVWZXJzaW9ucyB9IGZyb20gJy4vbGlzdC1wcmltaXRpdmUtdmVyc2lvbnMubWpzJztcbmV4cG9ydCB7IGdldERlcGxveW1lbnRTdGF0dXMgfSBmcm9tICcuL2dldC1kZXBsb3ltZW50LXN0YXR1cy5tanMnO1xuZXhwb3J0IHsgdGFpbExvZ3MgfSBmcm9tICcuL3RhaWwtbG9ncy5tanMnO1xuLy8gY2hlY2tfZHJpZnQgcmVtb3ZlZCBpbiB2MS4yNSBcdTIwMTQgdXNlIEJhc2gobHVhIHN5bmMgLS1jaGVjaykgZGlyZWN0bHkuIFRoZVxuLy8gTUNQIHNlcnZlciBpcyBsb2NhbCBhbmQgc28gaXMgdGhlIENMSTsgcmVpbXBsZW1lbnRpbmcgZHJpZnQgZGV0ZWN0aW9uXG4vLyBzZXJ2ZXItc2lkZSBvciBpbiB0aGUgTUNQIHdvdWxkIGR1cGxpY2F0ZSBsb2dpYyB0aGF0IGx1YS1jbGkgYWxyZWFkeSBvd25zLlxuIiwgIi8vIFNoYXJlZCBzdWJwcm9jZXNzIGhlbHBlciBmb3IgdG9vbHMgdGhhdCBzaGVsbCBvdXQgdG8gdGhlIGx1YS1jbGkgYmluYXJ5LlxuLy9cbi8vIFdoeSBzaGVsbCBvdXQgYXQgYWxsOiB0aGVyZSBpcyBubyBcImxpc3QgZXZlcnkgYWdlbnQgdGhpcyBjcmVkZW50aWFsIGNhblxuLy8gcmVhY2hcIiBSRVNUIHJvdXRlIFx1MjAxNCBgbHVhIGFnZW50cyAtLWpzb25gIGFscmVhZHkgZG9lcyB0aGUgY3JlZGVudGlhbC10by1cbi8vIGF1dGhvcml6YXRpb24tcHJvamVjdGlvbiByZXNvbHV0aW9uIChQUk8tMTcxMikgZm9yIGV2ZXJ5IGNyZWRlbnRpYWwgY2xhc3Ncbi8vIChBUEkga2V5LCB0eXBlZCBzY29wZWQga2V5LCByZW5ld2FibGUgc2Vzc2lvbikuIFJlaW1wbGVtZW50aW5nIHRoYXQgaW4gdGhlXG4vLyBNQ1Agd291bGQgZHVwbGljYXRlIGxvZ2ljIGx1YS1jbGkgb3ducy5cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG4vLyBgbHVhIGFnZW50c2Agd2Fsa3MgZXZlcnkgb3JnYW5pc2F0aW9uIHRoZSBjcmVkZW50aWFsIGNhbiBzZWUgYW5kLCBmb3IgYVxuLy8gc2Vzc2lvbiBsb2dpbiwgcmVmcmVzaGVzIHRoZSBzZXNzaW9uIGZpcnN0LiBNZWFzdXJlZCAyMDI2LTA5LTEyIG9uIGFcbi8vIDE0NC1vcmcgYWNjb3VudDogMThcdTIwMTMyNSBzLiBUaGUgYnVkZ2V0IG11c3QgY292ZXIgdGhhdC5cbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDYwXzAwMDtcblxuLyoqXG4gKiBSdW4gYGx1YSA8YXJncz5gIGFuZCByZXNvbHZlIHdpdGggaXRzIHN0ZG91dC5cbiAqXG4gKiBPbiBXaW5kb3dzIHRoZSBucG0gYmluIGlzIGEgYGx1YS5jbWRgIHNoaW0sIHdoaWNoIE5vZGUgKFx1MjI2NTE4LjIwIC8gXHUyMjY1MjAuMTIpXG4gKiByZWZ1c2VzIHRvIHNwYXduIHdpdGhvdXQgYSBzaGVsbDsgdGhlIGFyZ3MgYXJlIGZpeGVkIGxpdGVyYWxzIChubyB1c2VyXG4gKiBpbnB1dCksIHNvIGBzaGVsbDogdHJ1ZWAgdGhlcmUgaXMgc2FmZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzXG4gKiBAcGFyYW0ge3tzcGF3bkZuPzogdHlwZW9mIHNwYXduLCB0aW1lb3V0TXM/OiBudW1iZXIsIGxhYmVsPzogc3RyaW5nfX0gW29wdHNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuTHVhKGFyZ3MsIHsgc3Bhd25GbiA9IHNwYXduLCB0aW1lb3V0TXMgPSBERUZBVUxUX1RJTUVPVVRfTVMsIGxhYmVsID0gJ2x1YScgfSA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bkZuKCdsdWEnLCBhcmdzLCB7XG4gICAgICBzaGVsbDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyxcbiAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBMVUFfTk9fQkFOTkVSOiAnMScsIExVQV9OT19ISU5UUzogJzEnIH0sXG4gICAgfSk7XG4gICAgbGV0IHN0ZG91dCA9ICcnO1xuICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCAoZCkgPT4geyBzdGRvdXQgKz0gZC50b1N0cmluZygndXRmOCcpOyB9KTtcbiAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCAoZCkgPT4geyBzdGRlcnIgKz0gZC50b1N0cmluZygndXRmOCcpOyB9KTtcblxuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjaGlsZC5raWxsKCdTSUdURVJNJyk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfTogJ2x1YSAke2FyZ3Muam9pbignICcpfScgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCkpO1xuICAgIH0sIHRpbWVvdXRNcyk7XG5cbiAgICBjaGlsZC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHJlamVjdChuZXcgRXJyb3IoYCdsdWEgJHthcmdzLmpvaW4oJyAnKX0nIGV4aXRlZCAke2NvZGV9OiAke3N0ZGVyci50cmltKCl9YCkpO1xuICAgICAgZWxzZSByZXNvbHZlKHN0ZG91dCk7XG4gICAgfSk7XG4gICAgY2hpbGQub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGBsdWEgYWdlbnRzIC0tanNvbmAgb3V0cHV0IChsdWEtY2xpIFx1MjI2NSAzLjI4OiBhbiBhcnJheSBvZlxuICogQ3JlZGVudGlhbE9yZ2FuaXphdGlvbiByb3dzIFx1MjAxNCBgeyBvcmdJZCwgbmFtZT8sIGFyY2hpdmVkLCBkaXNjb3ZlcmVkVmlhLFxuICogYWdlbnRzOiBbeyBhZ2VudElkLCBuYW1lPywgdmlzaWJpbGl0eSwgZGlzcGxheVJvbGVzIH1dIH1gLCBzZWVcbiAqIHBhY2thZ2VzL2x1YS1jbGkvc3JjL3NlcnZpY2VzL2NyZWRlbnRpYWwtb3BlcmF0aW9uYWwtY29udGV4dC50cykgaW50byBhXG4gKiBjb21wYWN0IGFnZW50IGxpc3QuIE9sZGVyIGZsYXQgc2hhcGVzIGFyZSB0b2xlcmF0ZWQgZm9yIGZvcndhcmQtY29tcGF0LlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gcGFyc2VkXG4gKiBAcmV0dXJucyB7QXJyYXk8e2lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZ3xudWxsLCBvcmdJZDogc3RyaW5nfG51bGwsIG9yZ05hbWU6IHN0cmluZ3xudWxsLCB2aXNpYmlsaXR5OiBzdHJpbmd8bnVsbH0+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkFnZW50cyhwYXJzZWQpIHtcbiAgY29uc3Qgb2JqID0gLyoqIEB0eXBlIHthbnl9ICovIChwYXJzZWQpO1xuICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqIDogKG9iaj8uYWdlbnRzID8/IG9iaj8ub3JncyA/PyBbXSk7XG4gIGNvbnN0IGxvb2tzTGlrZU9yZ3MgPSBlbnRyaWVzLmxlbmd0aCA+IDAgJiYgZW50cmllc1swXSAmJiBBcnJheS5pc0FycmF5KGVudHJpZXNbMF0uYWdlbnRzKTtcblxuICBpZiAobG9va3NMaWtlT3Jncykge1xuICAgIHJldHVybiBlbnRyaWVzLmZsYXRNYXAoKG9yZykgPT4gKG9yZy5hZ2VudHMgPz8gW10pLm1hcCgoYSkgPT4gKHtcbiAgICAgIGlkOiBhLmFnZW50SWQgPz8gYS5pZCA/PyBhLl9pZCxcbiAgICAgIG5hbWU6IGEubmFtZSA/PyBudWxsLFxuICAgICAgb3JnSWQ6IG9yZy5vcmdJZCA/PyBvcmcuaWQgPz8gb3JnLl9pZCA/PyBudWxsLFxuICAgICAgb3JnTmFtZTogb3JnLm5hbWUgPz8gb3JnLnJlZ2lzdGVyZWROYW1lID8/IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBhLnZpc2liaWxpdHkgPz8gbnVsbCxcbiAgICB9KSkpO1xuICB9XG4gIHJldHVybiBlbnRyaWVzLm1hcCgoYSkgPT4gKHtcbiAgICBpZDogYS5hZ2VudElkID8/IGEuaWQgPz8gYS5faWQsXG4gICAgbmFtZTogYS5uYW1lID8/IG51bGwsXG4gICAgb3JnSWQ6IGEub3JnSWQgPz8gbnVsbCxcbiAgICBvcmdOYW1lOiBhLm9yZ05hbWUgPz8gbnVsbCxcbiAgICB2aXNpYmlsaXR5OiBhLnZpc2liaWxpdHkgPz8gbnVsbCxcbiAgfSkpO1xufVxuXG4vKipcbiAqIFJ1biBgbHVhIGFnZW50cyAtLWpzb24gLS1jaWAgYW5kIHJldHVybiB0aGUgZmxhdHRlbmVkIGFnZW50IGxpc3QuXG4gKlxuICogQHBhcmFtIHt7c3Bhd25Gbj86IHR5cGVvZiBzcGF3biwgbGFiZWw/OiBzdHJpbmd9fSBbb3B0c11cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RBZ2VudHNWaWFDbGkoeyBzcGF3bkZuLCBsYWJlbCA9ICdsaXN0X2FnZW50cycgfSA9IHt9KSB7XG4gIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHJ1bkx1YShbJ2FnZW50cycsICctLWpzb24nLCAnLS1jaSddLCB7IHNwYXduRm4sIGxhYmVsIH0pO1xuICBsZXQgcGFyc2VkO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2xhYmVsfTogY291bGQgbm90IHBhcnNlICdsdWEgYWdlbnRzIC0tanNvbicgb3V0cHV0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBmbGF0dGVuQWdlbnRzKHBhcnNlZCk7XG59XG4iLCAiaW1wb3J0IHsgbGlzdEFnZW50c1ZpYUNsaSB9IGZyb20gJy4uL3J1bi1sdWEubWpzJztcblxuLy8gU2hlbGxzIG91dCB0byBgbHVhIGFnZW50cyAtLWpzb24gLS1jaWAgKHNlZSBydW4tbHVhLm1qcyBmb3Igd2h5KS4gVGhlIENMSVxuLy8gZW1pdHMgb25lIHJvdyBwZXIgb3JnYW5pc2F0aW9uIHdpdGggYSBuZXN0ZWQgYGFnZW50c2AgYXJyYXk7IHdlIGZsYXR0ZW4uXG5cbmV4cG9ydCBjb25zdCBsaXN0QWdlbnRzID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ2xpc3RfYWdlbnRzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xpc3QgYWxsIEx1YSBhZ2VudHMgdGhlIGF1dGhlbnRpY2F0ZWQgY3JlZGVudGlhbCBjYW4gcmVhY2guIFJldHVybnMgYSBjb21wYWN0IGFycmF5IG9mIHtpZCwgbmFtZSwgb3JnSWQsIG9yZ05hbWUsIHZpc2liaWxpdHl9IGZsYXR0ZW5lZCBhY3Jvc3MgYWxsIG9yZ2FuaXNhdGlvbnMuIFNhbWUgZGF0YSBhcyBgbHVhIGFnZW50cyAtLWpzb25gIFx1MjAxNCBpdCByZXNvbHZlcyBldmVyeSBvcmdhbmlzYXRpb24sIHNvIG9uIGFjY291bnRzIHdpdGggbWFueSBvcmdzIHRoaXMgdGFrZXMgMjAgcyBvciBtb3JlOyBwcmVmZXIgZ2V0X2FnZW50IHdoZW4geW91IGFscmVhZHkga25vdyB0aGUgaWQuJyxcbiAgICBpbnB1dFNjaGVtYToge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIHJlcXVpcmVkOiBbXSxcbiAgICB9LFxuICB9LFxuICBhc3luYyBoYW5kbGVyKF9hcmdzLCBkZXBzID0ge30pIHtcbiAgICBjb25zdCBjb21wYWN0ID0gYXdhaXQgbGlzdEFnZW50c1ZpYUNsaSh7IHNwYXduRm46IGRlcHMuc3Bhd25GbiwgbGFiZWw6ICdsaXN0X2FnZW50cycgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkoY29tcGFjdCwgbnVsbCwgMikgfV0sXG4gICAgfTtcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgbGlzdEFnZW50c1ZpYUNsaSB9IGZyb20gJy4uL3J1bi1sdWEubWpzJztcblxuLy8gVGhlcmUgaXMgbm8gY29uc29saWRhdGVkIGBHRVQgL2RldmVsb3Blci9hZ2VudHMvOmFnZW50SWRgIHJvdXRlLCBhbmQgdGhlXG4vLyBwdWJsaWMgYC9wdWJsaWMvYWdlbnRzLzphZ2VudElkYCByb3V0ZSBpcyBvcmlnaW4tZ3VhcmRlZCAoYnJvd3NlciBvbmx5KS5cbi8vIFRoZSBhZ2VudCdzIGlkZW50aXR5IChpZCwgbmFtZSwgb3JnLCB2aXNpYmlsaXR5KSBJUyBpbiBgbHVhIGFnZW50cyAtLWpzb25gLFxuLy8gc28gd2Ugc2hlbGwgb3V0IGFuZCBmaWx0ZXIgXHUyMDE0IHNhbWUgcGF0aCBhcyBsaXN0X2FnZW50cy4gUGVyc29uYSwgbW9kZWwgYW5kXG4vLyBlbnYgbGl2ZSBiZWhpbmQgc2VwYXJhdGUgcGVyLXJlc291cmNlIHJvdXRlczsgdXNlIHRoZSBkZWRpY2F0ZWQgdG9vbHMgKG9yXG4vLyBgbHVhIHN0YXR1cyAtLWpzb25gIGluc2lkZSB0aGUgcHJvamVjdCkgZm9yIHRob3NlLlxuXG5leHBvcnQgY29uc3QgZ2V0QWdlbnQgPSB7XG4gIHNwZWM6IHtcbiAgICBuYW1lOiAnZ2V0X2FnZW50JyxcbiAgICBkZXNjcmlwdGlvbjogJ0xvb2sgdXAgb25lIEx1YSBhZ2VudCBieSBJRCBhbmQgcmV0dXJuIHtpZCwgbmFtZSwgb3JnSWQsIG9yZ05hbWUsIHZpc2liaWxpdHl9LiBGb3Igd2hhdCBpcyBsaXZlIHVzZSBnZXRfZGVwbG95bWVudF9zdGF0dXMgLyBsaXN0X3ByaW1pdGl2ZV92ZXJzaW9uczsgZm9yIGxvZ3MgdXNlIHRhaWxfbG9ncy4nLFxuICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWdlbnRJZDogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdBZ2VudCBJRCAodGhlIGBpZGAgZmllbGQgZnJvbSBsaXN0X2FnZW50czsgYWxzbyBgYWdlbnQuYWdlbnRJZGAgaW4gbHVhLnNraWxsLnlhbWwpJyB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbJ2FnZW50SWQnXSxcbiAgICB9LFxuICB9LFxuICBhc3luYyBoYW5kbGVyKHsgYWdlbnRJZCB9LCBkZXBzID0ge30pIHtcbiAgICBpZiAoIWFnZW50SWQpIHRocm93IG5ldyBFcnJvcignYWdlbnRJZCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IGxpc3RBZ2VudHNWaWFDbGkoeyBzcGF3bkZuOiBkZXBzLnNwYXduRm4sIGxhYmVsOiAnZ2V0X2FnZW50JyB9KTtcbiAgICBjb25zdCBtYXRjaCA9IGFnZW50cy5maW5kKChhKSA9PiBhLmlkID09PSBhZ2VudElkKSA/PyBudWxsO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRfYWdlbnQ6IG5vIGFnZW50IHdpdGggaWQgXCIke2FnZW50SWR9XCIgZm91bmQgaW4gdGhlIGF1dGhlbnRpY2F0ZWQgY3JlZGVudGlhbCdzIGFjY2Vzc2libGUgb3Jncy4gUnVuIGxpc3RfYWdlbnRzIHRvIHNlZSBhdmFpbGFibGUgYWdlbnRzLmApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IEpTT04uc3RyaW5naWZ5KG1hdGNoLCBudWxsLCAyKSB9XSxcbiAgICB9O1xuICB9LFxufTtcbiIsICIvLyBDcmVkZW50aWFsIHJlc29sdXRpb24gZm9yIHRoZSBNQ1Agc2VydmVyLiBSZXNvbHZlZCBvbiBFVkVSWSBjYWxsLCBub3QgYXRcbi8vIHNlcnZlciBzdGFydHVwIFx1MjAxNCBzdXBwb3J0cyB0aGUgZmxvdyB3aGVyZSBhIHVzZXIgcmUtcnVucyBgbHVhIGF1dGggY29uZmlndXJlYFxuLy8gbWlkLXNlc3Npb24uXG4vL1xuLy8gVGhlIGNoYWluIE1VU1QgbWF0Y2ggbHVhLWNsaSdzIGByZXNvbHZlUmVxdWVzdENyZWRlbnRpYWwoKWBcbi8vIChwYWNrYWdlcy9sdWEtY2xpL3NyYy9zZXJ2aWNlcy9yZXF1ZXN0LWNyZWRlbnRpYWwudHMsIGx1YS1jbGkgMy4zMy4wKTpcbi8vXG4vLyAgIDEuIExVQV9BUElfS0VZIGluIHRoZSBwcm9jZXNzIGVudmlyb25tZW50LiBsdWEtY2xpIGxvYWRzIGAuLy5lbnZgIGludG9cbi8vICAgICAgcHJvY2Vzcy5lbnYgZmlyc3QgKGBpbXBvcnQgJ2RvdGVudi9jb25maWcnYCksIHNvIGEgYC5lbnZgIHZhbHVlIGluIHRoZVxuLy8gICAgICB3b3JraW5nIGRpcmVjdG9yeSBpcyBwYXJ0IG9mIHRoaXMgdGllciBcdTIwMTQgaXQgYmVhdHMgYSBzdG9yZWQgc2Vzc2lvbi5cbi8vICAgMi4gVGhlIHJlbmV3YWJsZSBmaXJzdC1wYXJ0eSBzZXNzaW9uIGBsdWEgYXV0aCBjb25maWd1cmVgIChlbWFpbCArIE9UUClcbi8vICAgICAgd3JpdGVzIHRvIH4vLmx1YS1jbGkvc2Vzc2lvbnMvPGVudi1oYXNoPi5qc29uLiBUaGlzIGlzIHRoZSBERUZBVUxUXG4vLyAgICAgIGxvZ2luIHNpbmNlIGx1YS1jbGkgMy4yOSBhbmQgaXQgREVMRVRFUyB+Ly5sdWEtY2xpL2NyZWRlbnRpYWxzLCBzbyBhblxuLy8gICAgICBNQ1Agc2VydmVyIHRoYXQgb25seSByZWFkIHRoZSBjcmVkZW50aWFscyBmaWxlIGZhaWxlZCBmb3IgZXZlcnlcbi8vICAgICAgc2Vzc2lvbiB1c2VyLiBUaGUgZmlsZSBob2xkcyBhIEZpcmViYXNlIHJlZnJlc2ggdG9rZW47IHRoZSBiZWFyZXIgaXNcbi8vICAgICAgYSBzaG9ydC1saXZlZCBJRCB0b2tlbiBvYnRhaW5lZCBmcm9tIEdvb2dsZSdzIHNlY3VyZXRva2VuIGVuZHBvaW50LlxuLy8gICAzLiB+Ly5sdWEtY2xpL2NyZWRlbnRpYWxzIFx1MjAxNCBhIHBsYWluLXRleHQgQVBJIGtleSAodHlwZWQgYGFwaV88dXVpZD4uPDQzPmBcbi8vICAgICAgb3IgbGVnYWN5KSwgd3JpdHRlbiB3aGVuIHRoZSB1c2VyIHBpY2tzIHRoZSBBUEkta2V5IG9wdGlvbiBvZlxuLy8gICAgICBgbHVhIGF1dGggY29uZmlndXJlYC5cbi8vXG4vLyBUaGlzIGZpbGUgZGVsaWJlcmF0ZWx5IGR1cGxpY2F0ZXMgbGliL2NyZWRlbnRpYWxzLm1qcyBiZWNhdXNlIHRoZSBNQ1Bcbi8vIHNlcnZlciBpcyBhIHNlcGFyYXRlIG5wbSBwYWNrYWdlIGFuZCBjYW4ndCByZWFjaCBpbnRvIHRoZSBwbHVnaW4ncyBsaWIvLlxuXG5pbXBvcnQgeyByZWFkRmlsZSwgcmVhZGRpciwgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5cbmNvbnN0IERFRkFVTFRfQVBJX1VSTCA9ICdodHRwczovL2FwaS5oZXlsdWEuYWknO1xuY29uc3QgRklSRUJBU0VfUkVGUkVTSF9VUkwgPSAnaHR0cHM6Ly9zZWN1cmV0b2tlbi5nb29nbGVhcGlzLmNvbS92MS90b2tlbic7XG5jb25zdCBSRUZSRVNIX1RJTUVPVVRfTVMgPSAxNV8wMDA7XG5jb25zdCBSRUZSRVNIX1NLRVdfTVMgPSA2MF8wMDA7XG5cbi8vIEdvb2dsZSdzIHZlcmRpY3RzIHRoYXQgdGhlIHN0b3JlZCByZWZyZXNoIHRva2VuIGNhbiBuZXZlciB3b3JrIGFnYWluLlxuLy8gTWlycm9ycyBsdWEtY2xpJ3MgUkVKRUNURURfUkVGUkVTSF9SRUFTT05TIChzZXJ2aWNlcy9maXJlYmFzZS1zZXNzaW9uLnRzKS5cbmNvbnN0IFJFSkVDVEVEX1JFRlJFU0hfUkVBU09OUyA9IFtcbiAgJ1RPS0VOX0VYUElSRUQnLFxuICAnVVNFUl9ESVNBQkxFRCcsXG4gICdVU0VSX05PVF9GT1VORCcsXG4gICdJTlZBTElEX1JFRlJFU0hfVE9LRU4nLFxuICAnSU5WQUxJRF9HUkFOVF9UWVBFJyxcbiAgJ01JU1NJTkdfUkVGUkVTSF9UT0tFTicsXG5dO1xuXG4vLyBJbi1wcm9jZXNzIGNhY2hlIG9mIHJlZnJlc2hlZCBJRCB0b2tlbnMsIGtleWVkIGJ5IHNlc3Npb24gZmlsZSBwYXRoLlxuY29uc3QgdG9rZW5DYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqIEV4cG9ydGVkIGZvciB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRva2VuQ2FjaGUoKSB7XG4gIHRva2VuQ2FjaGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGRvdGVudi1zdHlsZSBmaWxlIGZvciBMVUFfQVBJX0tFWSB0aGUgd2F5IGRvdGVudiBkb2VzOiBvcHRpb25hbFxuICogYGV4cG9ydCBgIHByZWZpeCwgc3Vycm91bmRpbmcgc2luZ2xlL2RvdWJsZSBxdW90ZXMgc3RyaXBwZWQsIGEgdHJhaWxpbmdcbiAqIGAgIyBjb21tZW50YCBkcm9wcGVkIGZyb20gdW5xdW90ZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURvdGVudkFwaUtleShjb250ZW50KSB7XG4gIGZvciAoY29uc3QgcmF3TGluZSBvZiBjb250ZW50LnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICBjb25zdCBtID0gcmF3TGluZS5tYXRjaCgvXlxccyooPzpleHBvcnRcXHMrKT9MVUFfQVBJX0tFWVxccyo9XFxzKiguKikkLyk7XG4gICAgaWYgKCFtKSBjb250aW51ZTtcbiAgICBsZXQgdmFsdWUgPSBtWzFdLnRyaW0oKTtcbiAgICBjb25zdCBxdW90ZWQgPSB2YWx1ZS5tYXRjaCgvXihbJ1wiYF0pKC4qPylcXDEoPzpcXHMrIy4qKT9cXHMqJC8pO1xuICAgIGlmIChxdW90ZWQpIHZhbHVlID0gcXVvdGVkWzJdO1xuICAgIGVsc2UgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXHMrIy4qJC8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIHZhbHVlIHx8IG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTG9jYXRlIHRoZSBsdWEtY2xpIHNlc3Npb24gZmlsZSBmb3IgdGhlIEFQSSBiYXNlIFVSTCBpbiB1c2UuIGx1YS1jbGkgbmFtZXNcbiAqIHRoZSBmaWxlIGJ5IGEgaGFzaCBvZiAoYXBpVXJsLCBhdXRoVXJsLCBmaXJlYmFzZVdlYkFwaUtleSk7IHJhdGhlciB0aGFuXG4gKiByZWNvbXB1dGUgaXQgd2Ugc2NhbiB0aGUgZGlyZWN0b3J5IGZvciBhIGBmaXJlYmFzZS1zZXNzaW9uYCByZWNvcmQgd2hvc2VcbiAqIGBhcGlVcmxgIG1hdGNoZXMsIG5ld2VzdCBmaXJzdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7cGF0aDogc3RyaW5nLCBzZXNzaW9uOiBvYmplY3R9fG51bGw+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFNlc3Npb25GaWxlKHsgc2Vzc2lvbnNEaXIsIGFwaVVybCB9KSB7XG4gIGxldCBuYW1lcztcbiAgdHJ5IHtcbiAgICBuYW1lcyA9IGF3YWl0IHJlYWRkaXIoc2Vzc2lvbnNEaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG4gIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgIGlmICghbmFtZS5lbmRzV2l0aCgnLmpzb24nKSB8fCBuYW1lLnN0YXJ0c1dpdGgoJy4nKSkgY29udGludWU7XG4gICAgY29uc3QgcGF0aCA9IGpvaW4oc2Vzc2lvbnNEaXIsIG5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCAndXRmOCcpKTtcbiAgICAgIGlmIChzZXNzaW9uPy5raW5kICE9PSAnZmlyZWJhc2Utc2Vzc2lvbicgfHwgc2Vzc2lvbj8udmVyc2lvbiAhPT0gMSkgY29udGludWU7XG4gICAgICBpZiAodHlwZW9mIHNlc3Npb24ucmVmcmVzaFRva2VuICE9PSAnc3RyaW5nJyB8fCAhc2Vzc2lvbi5yZWZyZXNoVG9rZW4pIGNvbnRpbnVlO1xuICAgICAgaWYgKHR5cGVvZiBzZXNzaW9uLmZpcmViYXNlV2ViQXBpS2V5ICE9PSAnc3RyaW5nJyB8fCAhc2Vzc2lvbi5maXJlYmFzZVdlYkFwaUtleSkgY29udGludWU7XG4gICAgICBpZiAoc2Vzc2lvbi5hcGlVcmwgIT09IGFwaVVybCkgY29udGludWU7XG4gICAgICBjb25zdCB7IG10aW1lTXMgfSA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgICBjYW5kaWRhdGVzLnB1c2goeyBwYXRoLCBzZXNzaW9uLCBtdGltZU1zIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdW5yZWFkYWJsZSAvIG1hbGZvcm1lZCBcdTIwMTQgc2tpcCwgbHVhLWNsaSB3aWxsIGNvbXBsYWluIG9uIGl0cyBvd25cbiAgICB9XG4gIH1cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY2FuZGlkYXRlcy5zb3J0KChhLCBiKSA9PiBiLm10aW1lTXMgLSBhLm10aW1lTXMpO1xuICByZXR1cm4geyBwYXRoOiBjYW5kaWRhdGVzWzBdLnBhdGgsIHNlc3Npb246IGNhbmRpZGF0ZXNbMF0uc2Vzc2lvbiB9O1xufVxuXG4vKipcbiAqIEV4Y2hhbmdlIHRoZSBzdG9yZWQgcmVmcmVzaCB0b2tlbiBmb3IgYSBGaXJlYmFzZSBJRCB0b2tlbiAodGhlIGJlYXJlclxuICogbHVhLWFwaSBhY2NlcHRzKS4gQ2FjaGVkIGluLXByb2Nlc3MgdW50aWwgNjAgcyBiZWZvcmUgZXhwaXJ5LiBUaGUgc2Vzc2lvblxuICogZmlsZSBpcyBuZXZlciB3cml0dGVuOiBsdWEtY2xpIG93bnMgaXQuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gYmVhcmVyIHRva2VuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoU2Vzc2lvbkJlYXJlcih7IHBhdGgsIHNlc3Npb24sIGZldGNoRm4gPSBnbG9iYWxUaGlzLmZldGNoLCBub3cgPSBEYXRlLm5vdyB9KSB7XG4gIGNvbnN0IGNhY2hlZCA9IHRva2VuQ2FjaGUuZ2V0KHBhdGgpO1xuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5leHBpcmVzQXQgLSBub3coKSA+IFJFRlJFU0hfU0tFV19NUykgcmV0dXJuIGNhY2hlZC5pZFRva2VuO1xuXG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFRlJFU0hfVElNRU9VVF9NUyk7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZmV0Y2hGbihgJHtGSVJFQkFTRV9SRUZSRVNIX1VSTH0/a2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb24uZmlyZWJhc2VXZWJBcGlLZXkpfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsIHJlZnJlc2hfdG9rZW46IHNlc3Npb24ucmVmcmVzaFRva2VuIH0pLnRvU3RyaW5nKCksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTUNQX0FVVEhfVU5BVkFJTEFCTEU6IGNvdWxkIG5vdCByZWZyZXNoIHRoZSBsdWEtY2xpIHNlc3Npb24gKCR7ZXJyPy5uYW1lID09PSAnQWJvcnRFcnJvcicgPyAndGltZWQgb3V0JyA6IGVyci5tZXNzYWdlfSkuIGAgK1xuICAgICAgJ0NoZWNrIHlvdXIgbmV0d29yaywgb3Igc2V0IExVQV9BUElfS0VZIHRvIGJ5cGFzcyB0aGUgc2Vzc2lvbi4nXG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9XG5cbiAgaWYgKCFyZXMub2spIHtcbiAgICBsZXQgcmVhc29uID0gcmVzLnN0YXR1c1RleHQgPz8gU3RyaW5nKHJlcy5zdGF0dXMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBib2R5Py5lcnJvcj8ubWVzc2FnZTtcbiAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZSkgcmVhc29uID0gbWVzc2FnZS5zcGxpdCgnOicpWzBdLnRyaW0oKTtcbiAgICB9IGNhdGNoIHsgLyoga2VlcCBzdGF0dXNUZXh0ICovIH1cbiAgICBjb25zdCByZWplY3RlZCA9IHJlcy5zdGF0dXMgPCA1MDAgJiYgUkVKRUNURURfUkVGUkVTSF9SRUFTT05TLmZpbmQoKHIpID0+IHJlYXNvbi50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHIpKTtcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1DUF9BVVRIX1NUQUxFOiB5b3VyIGx1YS1jbGkgc2Vzc2lvbiB3YXMgc2lnbmVkIG91dCAoJHtyZWplY3RlZH0pLiBgICtcbiAgICAgICAgJ1NpZ25pbmcgb3V0IG9mIHRoZSBMdWEgZGFzaGJvYXJkLCBkZXNrdG9wIG9yIG1vYmlsZSBhcHAgYWxzbyBlbmRzIENMSSBzZXNzaW9ucy4gJyArXG4gICAgICAgICdSdW4gYGx1YSBhdXRoIGNvbmZpZ3VyZWAgaW4gYSB0ZXJtaW5hbCB0byBzaWduIGluIGFnYWluLidcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgTUNQX0FVVEhfVU5BVkFJTEFCTEU6IGx1YS1jbGkgc2Vzc2lvbiByZWZyZXNoIGZhaWxlZCAoJHtyZXMuc3RhdHVzfSAke3JlYXNvbn0pLiBSZXRyeSBpbiBhIG1vbWVudC5gKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpO1xuICBjb25zdCBpZFRva2VuID0gYm9keT8uaWRfdG9rZW47XG4gIGNvbnN0IGV4cGlyZXNJbiA9IE51bWJlcihib2R5Py5leHBpcmVzX2luKTtcbiAgaWYgKHR5cGVvZiBpZFRva2VuICE9PSAnc3RyaW5nJyB8fCAhaWRUb2tlbiB8fCAhTnVtYmVyLmlzRmluaXRlKGV4cGlyZXNJbikgfHwgZXhwaXJlc0luIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01DUF9BVVRIX1VOQVZBSUxBQkxFOiB0aGUgc2Vzc2lvbiByZWZyZXNoIHJldHVybmVkIGFuIGludmFsaWQgdG9rZW4uIFJ1biBgbHVhIGF1dGggY29uZmlndXJlYCBhZ2Fpbi4nKTtcbiAgfVxuICB0b2tlbkNhY2hlLnNldChwYXRoLCB7IGlkVG9rZW4sIGV4cGlyZXNBdDogbm93KCkgKyBleHBpcmVzSW4gKiAxMDAwIH0pO1xuICByZXR1cm4gaWRUb2tlbjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBiZWFyZXIgdG9rZW4gZXZlcnkgbHVhLWFwaSByZXF1ZXN0IHNob3VsZCBjYXJyeS5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICogQHRocm93cyB7RXJyb3J9IE1DUF9BVVRIX1NUQUxFIHdoZW4gbm8gY3JlZGVudGlhbCByZXNvbHZlcyBmcm9tIGFueSB0aWVyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpS2V5KHtcbiAgZW52ID0gcHJvY2Vzcy5lbnYsXG4gIGNyZWRlbnRpYWxzUGF0aCA9IGVudi5MVUFfQ1JFREVOVElBTFNfUEFUSCA/PyBqb2luKGhvbWVkaXIoKSwgJy5sdWEtY2xpJywgJ2NyZWRlbnRpYWxzJyksXG4gIHNlc3Npb25zRGlyID0gZW52LkxVQV9TRVNTSU9OU19ESVIgPz8gam9pbihkaXJuYW1lKGNyZWRlbnRpYWxzUGF0aCksICdzZXNzaW9ucycpLFxuICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuICBhcGlVcmwgPSBlbnYuTFVBX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMLFxuICBmZXRjaEZuID0gZ2xvYmFsVGhpcy5mZXRjaCxcbiAgbm93ID0gRGF0ZS5ub3csXG59ID0ge30pIHtcbiAgLy8gVGllciAxYTogcHJvY2VzcyBlbnZpcm9ubWVudFxuICBpZiAoZW52LkxVQV9BUElfS0VZICYmIGVudi5MVUFfQVBJX0tFWS50cmltKCkpIHJldHVybiBlbnYuTFVBX0FQSV9LRVkudHJpbSgpO1xuXG4gIC8vIFRpZXIgMWI6IC5lbnYgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChsdWEtY2xpIGxvYWRzIGl0IGludG8gcHJvY2Vzcy5lbnZcbiAgLy8gYmVmb3JlIHJlYWRpbmcgTFVBX0FQSV9LRVksIHNvIGl0IHJhbmtzIGFib3ZlIHRoZSBzdG9yZWQgc2Vzc2lvbilcbiAgdHJ5IHtcbiAgICBjb25zdCBmcm9tRG90ZW52ID0gcGFyc2VEb3RlbnZBcGlLZXkoYXdhaXQgcmVhZEZpbGUoam9pbihjd2QsICcuZW52JyksICd1dGY4JykpO1xuICAgIGlmIChmcm9tRG90ZW52KSByZXR1cm4gZnJvbURvdGVudjtcbiAgfSBjYXRjaCB7IC8qIG5vIC5lbnYgXHUyMDE0IGZhbGwgdGhyb3VnaCAqLyB9XG5cbiAgLy8gVGllciAyOiByZW5ld2FibGUgZmlyc3QtcGFydHkgc2Vzc2lvblxuICBjb25zdCBmb3VuZCA9IGF3YWl0IGZpbmRTZXNzaW9uRmlsZSh7IHNlc3Npb25zRGlyLCBhcGlVcmwgfSk7XG4gIGlmIChmb3VuZCkgcmV0dXJuIHJlZnJlc2hTZXNzaW9uQmVhcmVyKHsgLi4uZm91bmQsIGZldGNoRm4sIG5vdyB9KTtcblxuICAvLyBUaWVyIDM6IH4vLmx1YS1jbGkvY3JlZGVudGlhbHMgKHBsYWluIHRleHQgQVBJIGtleSlcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSAoYXdhaXQgcmVhZEZpbGUoY3JlZGVudGlhbHNQYXRoLCAndXRmOCcpKS50cmltKCk7XG4gICAgaWYgKHJhdykge1xuICAgICAgaWYgKHJhdy5zdGFydHNXaXRoKCd7JykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICAgICAgaWYgKHBhcnNlZD8uYXBpS2V5KSByZXR1cm4gcGFyc2VkLmFwaUtleTtcbiAgICAgICAgfSBjYXRjaCB7IC8qIG5vdCBKU09OIGRlc3BpdGUgbGVhZGluZyBicmFjZSAqLyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgfSBjYXRjaCB7IC8qIG1pc3NpbmcgLyB1bnJlYWRhYmxlIFx1MjAxNCBmYWxsIHRocm91Z2ggKi8gfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnTUNQX0FVVEhfU1RBTEU6IE5vIGx1YS1jbGkgY3JlZGVudGlhbHMgZm91bmQgaW4gTFVBX0FQSV9LRVksIC5lbnYsIH4vLmx1YS1jbGkvc2Vzc2lvbnMsIG9yIH4vLmx1YS1jbGkvY3JlZGVudGlhbHMuICcgK1xuICAgICdSdW4gYGx1YSBhdXRoIGNvbmZpZ3VyZWAgaW4gYSB0ZXJtaW5hbCAob3IgL2x1YS1hdXRoIGluIENsYXVkZSBDb2RlKS4nXG4gICk7XG59XG4iLCAiLy8gVGhpbiBIVFRQIHdyYXBwZXIgYXJvdW5kIGx1YS1hcGkuIFBlciB0ZWNoIHNwZWMgXHUwMEE3OC5cbi8vXG4vLyBXZSBkbyBOT1QgaW1wb3J0IGx1YS1jbGkncyBIdHRwQ2xpZW50IGNsYXNzZXMgYXQgcnVudGltZSAod291bGQgZm9yY2Vcbi8vIHRoZSBlbnRpcmUgbHVhLWNsaSBwYWNrYWdlIHRvIGJlIGJ1bmRsZWQpLiBJbnN0ZWFkLCB0aGlzIG1pbmltYWwgY2xpZW50XG4vLyBoaXRzIHRoZSBzYW1lIFJFU1QgZW5kcG9pbnRzIGx1YS1jbGkgZG9lcy4gRXZlcnkgcm91dGUsIHF1ZXJ5IHBhcmFtZXRlclxuLy8gYW5kIGVudmVsb3BlIHVzZWQgYnkgdGhlIHRvb2xzIGlzIHZlcmlmaWVkIGFnYWluc3QgcGFja2FnZXMvbHVhLWFwaVxuLy8gKGNvbnRyb2xsZXJzL2RldmVsb3Blci8qKiwgZHRvLyoqKSBcdTIwMTQgc2VlIHJlc3BvbnNlLXNoYXBlcy5tanMuXG5cbmltcG9ydCB7IHJlc29sdmVBcGlLZXkgfSBmcm9tICcuL2F1dGgubWpzJztcblxuY29uc3QgREVGQVVMVF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5oZXlsdWEuYWknO1xuY29uc3QgREVGQVVMVF9USU1FT1VUX01TID0gMTBfMDAwO1xuXG4vLyBTY29wZSBlYWNoIHJvdXRlIGZhbWlseSB0aGUgdG9vbHMgY2FsbCBhY3R1YWxseSByZXF1aXJlcyBcdTIwMTQgcmVhZCBmcm9tIHRoZVxuLy8gYEBSZXF1aXJlU2NvcGUoLi4uKWAgZGVjb3JhdG9yIG9uIGV2ZXJ5IEdFVCB0aGUgdG9vbHMgaGl0LCB1bmRlclxuLy8gbHVhLWNvcmUtc2VydmljZXMgcGFja2FnZXMvbHVhLWFwaS9zcmMvY29udHJvbGxlcnMvZGV2ZWxvcGVyLzpcbi8vICAgc2tpbGxzL2Jhc2UuY29udHJvbGxlci50cywgd2ViaG9va3MvYmFzZS5jb250cm9sbGVyLnRzLFxuLy8gICBqb2JzL2Jhc2UuY29udHJvbGxlci50cywgdHJpZ2dlcnMvYmFzZS5jb250cm9sbGVyLnRzLFxuLy8gICBwcmVwcm9jZXNzb3JzL2Jhc2UuY29udHJvbGxlci50cywgcG9zdHByb2Nlc3NvcnMvYmFzZS5jb250cm9sbGVyLnRzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgJ2F1dG9tYXRpb25zOnJlYWQnIChsaXN0ICsgOmlkL3ZlcnNpb25zKVxuLy8gICB3b3JrZmxvd3MvYmFzZS5jb250cm9sbGVyLnRzICAgXHUyMTkyICd3b3JrZmxvd3M6cmVhZCcgICAoR0VUIDphZ2VudElkLCBHRVQgOmFnZW50SWQvOndvcmtmbG93SWQvdmVyc2lvbnMpXG4vLyAgIHBlcnNvbmEvYmFzZS5jb250cm9sbGVyLnRzICAgICBcdTIxOTIgJ2FnZW50czpyZWFkJyAgICAgIChHRVQgOmFnZW50SWQvcGVyc29uYS92ZXJzaW9ucylcbi8vICAgYmFzZS5jb250cm9sbGVyLnRzICAgICAgICAgICAgIFx1MjE5MiAna25vd2xlZGdlOnJlYWQnICAgKEdFVCBhZ2VudHMvOmFnZW50SWQvbG9ncylcbi8vIFdvcmtmbG93cyBhcmUgTk9UIHVuZGVyIGF1dG9tYXRpb25zOnJlYWQgXHUyMDE0IHRoZXkgaGF2ZSB0aGVpciBvd24gc2NvcGUgcGFpclxuLy8gKHdvcmtmbG93czpyZWFkIC8gd29ya2Zsb3dzOndyaXRlKS5cbmV4cG9ydCBjb25zdCBST1VURV9TQ09QRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgc2tpbGxzOiAnYXV0b21hdGlvbnM6cmVhZCcsXG4gIHdlYmhvb2tzOiAnYXV0b21hdGlvbnM6cmVhZCcsXG4gIGpvYnM6ICdhdXRvbWF0aW9uczpyZWFkJyxcbiAgdHJpZ2dlcnM6ICdhdXRvbWF0aW9uczpyZWFkJyxcbiAgcHJlcHJvY2Vzc29yczogJ2F1dG9tYXRpb25zOnJlYWQnLFxuICBwb3N0cHJvY2Vzc29yczogJ2F1dG9tYXRpb25zOnJlYWQnLFxuICB3b3JrZmxvd3M6ICd3b3JrZmxvd3M6cmVhZCcsXG4gIHBlcnNvbmE6ICdhZ2VudHM6cmVhZCcsXG4gIGxvZ3M6ICdrbm93bGVkZ2U6cmVhZCcsXG59KTtcblxuY29uc3QgUk9VVEVfU0NPUEVfU1VNTUFSWSA9XG4gICdza2lsbHMvd2ViaG9va3Mvam9icy90cmlnZ2Vycy9wcmVwcm9jZXNzb3JzL3Bvc3Rwcm9jZXNzb3JzIG5lZWQgYXV0b21hdGlvbnM6cmVhZCwgd29ya2Zsb3dzIG5lZWQgJyArXG4gICd3b3JrZmxvd3M6cmVhZCwgcGVyc29uYSBuZWVkcyBhZ2VudHM6cmVhZCwgbG9ncyBuZWVkIGtub3dsZWRnZTpyZWFkJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEFQSSBwYXRoICh3aXRoIGxlYWRpbmcgc2xhc2gpXG4gKiBAcGFyYW0ge3ttZXRob2Q/OiBzdHJpbmcsIGJvZHk/OiBvYmplY3QsIHF1ZXJ5PzogUmVjb3JkPHN0cmluZyxzdHJpbmd8bnVtYmVyPiwgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaCwgYmFzZVVybD86IHN0cmluZywgdGltZW91dE1zPzogbnVtYmVyfX0gW29wdHNdXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlSZXF1ZXN0KHBhdGgsIHtcbiAgbWV0aG9kID0gJ0dFVCcsXG4gIGJvZHksXG4gIHF1ZXJ5LFxuICBmZXRjaEZuID0gZ2xvYmFsVGhpcy5mZXRjaCxcbiAgYmFzZVVybCA9IHByb2Nlc3MuZW52LkxVQV9BUElfVVJMIHx8IERFRkFVTFRfQkFTRV9VUkwsXG4gIHRpbWVvdXRNcyA9IERFRkFVTFRfVElNRU9VVF9NUyxcbn0gPSB7fSkge1xuICBjb25zdCBhcGlLZXkgPSBhd2FpdCByZXNvbHZlQXBpS2V5KCk7XG4gIC8vIEpvaW4gYnkgc3RyaW5nIGNvbmNhdGVuYXRpb24sIE5PVCBgbmV3IFVSTChwYXRoLCBiYXNlVXJsKWA6IHRoZSBXSEFUV0dcbiAgLy8gcmVzb2x2ZXIgdHJlYXRzIGEgbGVhZGluZy1zbGFzaCBwYXRoIGFzIGhvc3QtYWJzb2x1dGUgYW5kIHdvdWxkIGRyb3AgYW55XG4gIC8vIHBhdGggcHJlZml4IG9uIExVQV9BUElfVVJMIChodHRwczovL2hvc3QvYXBpICsgL2RldmVsb3Blci94IFx1MjE5MlxuICAvLyBodHRwczovL2hvc3QvZGV2ZWxvcGVyL3gpLiBgcGF0aGAgYWx3YXlzIHN0YXJ0cyB3aXRoICcvJywgc28gc3RyaXAgb25lXG4gIC8vIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGJhc2UgYW5kIGNvbmNhdGVuYXRlLlxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGJhc2VVcmwucmVwbGFjZSgvXFwvJC8sICcnKSArIHBhdGgpO1xuICBpZiAocXVlcnkpIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KSkgdXJsLnNlYXJjaFBhcmFtcy5zZXQoaywgU3RyaW5nKHYpKTtcblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0TXMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hGbih1cmwudG9TdHJpbmcoKSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1gtTHVhLUNsaWVudCc6ICdjbGF1ZGUtcGx1Z2luLzEuMTIuMCcsXG4gICAgICB9LFxuICAgICAgYm9keTogYm9keSA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogdW5kZWZpbmVkLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ01DUF9BVVRIX1NUQUxFOiBsdWEtYXBpIHJldHVybmVkIDQwMS4gVGhlIGNyZWRlbnRpYWwgaXMgbWlzc2luZywgZXhwaXJlZCwgb3IgdGhlIHNlc3Npb24gd2FzIHNpZ25lZCBvdXQgJyArXG4gICAgICAgICcoc2lnbmluZyBvdXQgb2YgdGhlIEx1YSBkYXNoYm9hcmQgb3IgYXBwcyBhbHNvIGVuZHMgQ0xJIHNlc3Npb25zKS4gUnVuIGBsdWEgYXV0aCBjb25maWd1cmVgIGluIGEgdGVybWluYWwsICcgK1xuICAgICAgICAnb3IgcmUtcnVuIC9sdWEtZG9jdG9yLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1DUF9GT1JCSURERU46IGx1YS1hcGkgcmV0dXJuZWQgNDAzIGZvciAke3BhdGh9LiBUaGUgY3JlZGVudGlhbCBjYW5ub3QgYWNjZXNzIHRoaXMgYWdlbnQgb3Igb3JnLCBvciBpdCBsYWNrcyBgICtcbiAgICAgICAgYHRoZSByb3V0ZSBzY29wZSAoJHtST1VURV9TQ09QRV9TVU1NQVJZfSBcdTIwMTQgdHlwZWQga2V5cyBhcmUgc2NvcGVkIHRvIHRoZSBhZ2VudHMgYW5kIHJvbGUgY2hvc2VuIGF0IGAgK1xuICAgICAgICAnYGx1YSBhdXRoIGNvbmZpZ3VyZWApLiBSZS1ydW4gL2x1YS1kb2N0b3Igb3IgY2hlY2sgdGhlIExVQV9BUElfS0VZIGVudiB2YXIuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIC8vIFRyeSB0byBwYXJzZSBsdWEtYXBpJ3Mgc3RydWN0dXJlZCBlcnJvciBlbnZlbG9wZTpcbiAgICAgIC8vICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IHsgbWVzc2FnZSwgc3RhdHVzQ29kZSwgY29kZT8sIC4uLiB9IH1cbiAgICAgIC8vIEZhbGxzIGJhY2sgdG8gcmF3IHRleHQgb24gcGFyc2UgZmFpbHVyZSAoZS5nLiBwcm94eSA1MDIgd2l0aCBIVE1MIGJvZHkpLlxuICAgICAgY29uc3QgcmF3ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgIGxldCBmcmllbmRseU1zZyA9IHJhdztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgZnJpZW5kbHlNc2cgPSBwYXJzZWQ/LmVycm9yPy5tZXNzYWdlID8/IHBhcnNlZD8ubWVzc2FnZSA/PyByYXc7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBwYXJzZWQ/LmVycm9yPy5jb2RlO1xuICAgICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUgJiYgIVN0cmluZyhmcmllbmRseU1zZykuaW5jbHVkZXMoY29kZSkpIGZyaWVuZGx5TXNnID0gYCR7Y29kZX06ICR7ZnJpZW5kbHlNc2d9YDtcbiAgICAgIH0gY2F0Y2ggeyAvKiBub3QgSlNPTjsgcmF3IGlzIGZpbmUgKi8gfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsdWEtYXBpICR7cmVzLnN0YXR1c306ICR7ZnJpZW5kbHlNc2d9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB0aHJvdyBuZXcgRXJyb3IoYE1DUF9USU1FT1VUOiAke3BhdGh9IGRpZCBub3QgcmVzcG9uZCBpbiAke3RpbWVvdXRNc31tc2ApO1xuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9XG59XG4iLCAiLy8gUGVyLXR5cGUgcmVzcG9uc2Utc2hhcGUgZXh0cmFjdG9ycy5cbi8vXG4vLyBsdWEtYXBpJ3MgZGV2ZWxvcGVyIGVuZHBvaW50cyBoYXZlIElOQ09OU0lTVEVOVCByZXNwb25zZSBzaGFwZXMgYWNyb3NzXG4vLyBwcmltaXRpdmUgdHlwZXMuIFZlcmlmaWVkIGFnYWluc3QgcGFja2FnZXMvbHVhLWFwaS9zcmMvZHRvLyouZHRvLnRzIGFuZFxuLy8gcGFja2FnZXMvbHVhLWFwaS9zcmMvY29udHJvbGxlcnMvZGV2ZWxvcGVyLyoqL2Jhc2UuY29udHJvbGxlci50cywgcGx1c1xuLy8gcGFja2FnZXMvbHVhLWNsaS9zcmMvaW50ZXJmYWNlcy93b3JrZmxvd3MudHMgKGx1YS1jbGkgMy4zMy4wKTpcbi8vXG4vLyAgIFNraWxscyAgICAgICAgIEdFVCAvZGV2ZWxvcGVyL3NraWxscy86YWdlbnRJZCAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBza2lsbHM6IFNraWxsRHRvW10gfVxuLy8gICAgICAgICAgICAgICAgICBHRVQgL2RldmVsb3Blci9za2lsbHMvOmFnZW50SWQvOnNraWxsSWQvdmVyc2lvbnMgICAgXHUyMTkyIHsgdmVyc2lvbnM6IFt7IHZlcnNpb24sIGNyZWF0ZWREYXRlLCBpc0N1cnJlbnQsIC4uLiB9XSB9XG4vLyAgIFdlYmhvb2tzICAgICAgIEdFVCAvZGV2ZWxvcGVyL3dlYmhvb2tzLzphZ2VudElkICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiB7IHdlYmhvb2tzIH0gfVxuLy8gICAgICAgICAgICAgICAgICBHRVQgLi4uLzp3ZWJob29rSWQvdmVyc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgc3VjY2VzcywgZGF0YTogeyB2ZXJzaW9uczogW3sgdmVyc2lvbiwgd2ViaG9va0lkLCBjcmVhdGVkQXQsIGlzQWN0aXZlIH1dLCBhY3RpdmVWZXJzaW9uSWQ/IH0gfVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VydmljZXMvZGV2ZWxvcGVyLndlYmhvb2suc2VydmljZS50cyBzZXRzIGB3ZWJob29rSWQ6IHYuaWRgIFx1MjAxNCB0aGVcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gUk9XIGlkIHVuZGVyIGEgbWlzbmFtZWQga2V5OyB0aGVyZSBpcyBubyB2ZXJzaW9uSWQvaWQsIHNvXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSWQoKSBpcyBudWxsIGFuZCB0aGUgZW52ZWxvcGUncyBhY3RpdmVWZXJzaW9uSWQgaXMgdGhlIG9ubHkgaWQpXG4vLyAgIEpvYnMgICAgICAgICAgIEdFVCAvZGV2ZWxvcGVyL2pvYnMvOmFnZW50SWQgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiB7IGpvYnMgfSB9XG4vLyAgICAgICAgICAgICAgICAgIEdFVCAuLi4vOmpvYklkL3ZlcnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiBKb2JWZXJzaW9uRHRvW10gfSAgIFx1MjE5MCBhcnJheSB1bmRlciBkYXRhOyBgYWN0aXZlYFxuLy8gICBUcmlnZ2VycyAgICAgICBHRVQgL2RldmVsb3Blci90cmlnZ2Vycy86YWdlbnRJZCAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgc3VjY2VzcywgZGF0YTogeyB0cmlnZ2VycyB9IH1cbi8vICAgICAgICAgICAgICAgICAgR0VUIC4uLi86dHJpZ2dlcklkL3ZlcnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgdmVyc2lvbnM6IFt7IHZlcnNpb24sIHZlcnNpb25JZCwgY3JlYXRlZEF0LCBpc0FjdGl2ZSB9XSwgYWN0aXZlVmVyc2lvbklkPyB9IH1cbi8vICAgUHJlcHJvY2Vzc29ycyAgR0VUIC9kZXZlbG9wZXIvcHJlcHJvY2Vzc29ycy86YWdlbnRJZCAgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgcHJlcHJvY2Vzc29ycyB9IH1cbi8vICAgICAgICAgICAgICAgICAgR0VUIC4uLi86cHJlcHJvY2Vzc29ySWQvdmVyc2lvbnMgICAgICAgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgdmVyc2lvbnM6IFt7IHZlcnNpb25JZCwgdmVyc2lvbiwgaXNBY3RpdmUsIGNyZWF0ZWRBdCB9XSwgYWN0aXZlVmVyc2lvbklkPyB9IH1cbi8vICAgUG9zdHByb2Nlc3NvcnMgR0VUIC9kZXZlbG9wZXIvcG9zdHByb2Nlc3NvcnMvOmFnZW50SWQgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgcG9zdHByb2Nlc3NvcnMgfSB9XG4vLyAgICAgICAgICAgICAgICAgIEdFVCAuLi4vOnBvc3Rwcm9jZXNzb3JJZC92ZXJzaW9ucyAgICAgICAgICAgICAgICAgICBcdTIxOTIgc2FtZSBmYW1pbHkgYXMgcHJlcHJvY2Vzc29yc1xuLy8gICBXb3JrZmxvd3MgICAgICBHRVQgL2RldmVsb3Blci93b3JrZmxvd3MvOmFnZW50SWQgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgc3VjY2VzcywgZGF0YTogeyB3b3JrZmxvd3MgfSB9ICAgKGNvZGUvc2NyaXB0IHByb2plY3RlZCBvdXQpXG4vLyAgICAgICAgICAgICAgICAgIEdFVCAuLi4vOndvcmtmbG93SWQvdmVyc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiBXb3JrZmxvd1ZlcnNpb25bXSB9ICAgXHUyMTkwIGFycmF5IHVuZGVyIGRhdGE7IGBhY3RpdmVgXG4vLyAgIFBlcnNvbmEgICAgICAgIEdFVCAvZGV2ZWxvcGVyL2FnZW50cy86YWdlbnRJZC9wZXJzb25hL3ZlcnNpb25zICAgICBcdTIxOTIgeyBzdGF0dXMsIG1lc3NhZ2UsIHZlcnNpb25zOiBbeyB2ZXJzaW9uOiBudW1iZXIsIGNyZWF0ZWREYXRlOiBudW1iZXIsIGlzQ3VycmVudCwgcGVyc29uYSB9XSB9XG4vL1xuLy8gTm8gdmVyc2lvbiBEVE8gY2FycmllcyBgZGVwbG95ZWRBdGAgb3IgYHNvdXJjZUhhc2hgLiBUaGUgXCJsaXZlXCIgZmxhZyBpc1xuLy8gYGlzQ3VycmVudGAgKHNraWxsLCBwZXJzb25hKSwgYGFjdGl2ZWAgKGpvYiwgd29ya2Zsb3cpIG9yIGBpc0FjdGl2ZWAgL1xuLy8gYGFjdGl2ZVZlcnNpb25JZGAgKHdlYmhvb2ssIHRyaWdnZXIsIHByZS9wb3N0cHJvY2Vzc29yKS4gQ3JlYXRpb24gdGltZSBpc1xuLy8gYGNyZWF0ZWRBdGAgKElTTyBzdHJpbmcpIGV2ZXJ5d2hlcmUgZXhjZXB0IHNraWxsL3BlcnNvbmEgKGBjcmVhdGVkRGF0ZWA7XG4vLyBwZXJzb25hJ3MgaXMgYW4gZXBvY2gtbXMgbnVtYmVyKS5cblxuY29uc3QgTElTVF9FWFRSQUNUT1JTID0ge1xuICBza2lsbDogICAgICAgICAocikgPT4gcj8uc2tpbGxzID8/IFtdLFxuICB3ZWJob29rOiAgICAgICAocikgPT4gcj8uZGF0YT8ud2ViaG9va3MgPz8gW10sXG4gIGpvYjogICAgICAgICAgIChyKSA9PiByPy5kYXRhPy5qb2JzID8/IFtdLFxuICB0cmlnZ2VyOiAgICAgICAocikgPT4gcj8uZGF0YT8udHJpZ2dlcnMgPz8gW10sXG4gIHByZXByb2Nlc3NvcjogIChyKSA9PiByPy5kYXRhPy5wcmVwcm9jZXNzb3JzID8/IFtdLFxuICBwb3N0cHJvY2Vzc29yOiAocikgPT4gcj8uZGF0YT8ucG9zdHByb2Nlc3NvcnMgPz8gW10sXG4gIHdvcmtmbG93OiAgICAgIChyKSA9PiByPy5kYXRhPy53b3JrZmxvd3MgPz8gW10sXG59O1xuXG5jb25zdCBWRVJTSU9OU19FWFRSQUNUT1JTID0ge1xuICBza2lsbDogICAgICAgICAocikgPT4gcj8udmVyc2lvbnMgPz8gW10sXG4gIHdlYmhvb2s6ICAgICAgIChyKSA9PiByPy5kYXRhPy52ZXJzaW9ucyA/PyBbXSxcbiAgam9iOiAgICAgICAgICAgKHIpID0+IChBcnJheS5pc0FycmF5KHI/LmRhdGEpID8gci5kYXRhIDogW10pLFxuICB0cmlnZ2VyOiAgICAgICAocikgPT4gcj8uZGF0YT8udmVyc2lvbnMgPz8gW10sXG4gIHByZXByb2Nlc3NvcjogIChyKSA9PiByPy5kYXRhPy52ZXJzaW9ucyA/PyBbXSxcbiAgcG9zdHByb2Nlc3NvcjogKHIpID0+IHI/LmRhdGE/LnZlcnNpb25zID8/IFtdLFxuICB3b3JrZmxvdzogICAgICAocikgPT4gKEFycmF5LmlzQXJyYXkocj8uZGF0YSkgPyByLmRhdGEgOiBbXSksXG4gIHBlcnNvbmE6ICAgICAgIChyKSA9PiByPy52ZXJzaW9ucyA/PyBbXSxcbn07XG5cbi8qKiBVUkwgcGF0aCBzZWdtZW50IHVuZGVyIC9kZXZlbG9wZXIvIGZvciBlYWNoIGxpc3RhYmxlIHR5cGUuICovXG5leHBvcnQgY29uc3QgTElTVF9QQVRIUyA9IHtcbiAgc2tpbGw6ICdza2lsbHMnLFxuICB3ZWJob29rOiAnd2ViaG9va3MnLFxuICBqb2I6ICdqb2JzJyxcbiAgdHJpZ2dlcjogJ3RyaWdnZXJzJyxcbiAgcHJlcHJvY2Vzc29yOiAncHJlcHJvY2Vzc29ycycsXG4gIHBvc3Rwcm9jZXNzb3I6ICdwb3N0cHJvY2Vzc29ycycsXG4gIHdvcmtmbG93OiAnd29ya2Zsb3dzJyxcbn07XG5cbi8qKlxuICogRXh0cmFjdCBhIGxpc3Qgb2YgcHJpbWl0aXZlcyBmcm9tIGEgbGlzdC1lbmRwb2ludCByZXNwb25zZS5cbiAqIEB0aHJvd3MgaWYgdGhlIHR5cGUgaXMgdW5rbm93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMaXN0KHR5cGUsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGZuID0gTElTVF9FWFRSQUNUT1JTW3R5cGVdO1xuICBpZiAoIWZuKSB0aHJvdyBuZXcgRXJyb3IoYGV4dHJhY3RMaXN0OiB1bmtub3duIHByaW1pdGl2ZSB0eXBlIFwiJHt0eXBlfVwiLiBWYWxpZDogJHtPYmplY3Qua2V5cyhMSVNUX0VYVFJBQ1RPUlMpLmpvaW4oJywgJyl9YCk7XG4gIHJldHVybiBmbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIGxpc3Qgb2YgdmVyc2lvbnMgZnJvbSBhIHZlcnNpb25zLWVuZHBvaW50IHJlc3BvbnNlLlxuICogQHRocm93cyBpZiB0aGUgdHlwZSBpcyB1bmtub3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFZlcnNpb25zKHR5cGUsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGZuID0gVkVSU0lPTlNfRVhUUkFDVE9SU1t0eXBlXTtcbiAgaWYgKCFmbikgdGhyb3cgbmV3IEVycm9yKGBleHRyYWN0VmVyc2lvbnM6IHVua25vd24gcHJpbWl0aXZlIHR5cGUgXCIke3R5cGV9XCIuIFZhbGlkOiAke09iamVjdC5rZXlzKFZFUlNJT05TX0VYVFJBQ1RPUlMpLmpvaW4oJywgJyl9YCk7XG4gIHJldHVybiBmbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogVGhlIGBhY3RpdmVWZXJzaW9uSWRgIGEgdmVyc2lvbnMgZW52ZWxvcGUgbWF5IGNhcnJ5IGJlc2lkZSBpdHMgYXJyYXlcbiAqICh3ZWJob29rLCB0cmlnZ2VyLCBwcmUvcG9zdHByb2Nlc3NvcikuIE51bGwgZm9yIHRoZSBvdGhlciBmYW1pbGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBY3RpdmVWZXJzaW9uSWQocmVzcG9uc2UpIHtcbiAgY29uc3QgaWQgPSByZXNwb25zZT8uZGF0YT8uYWN0aXZlVmVyc2lvbklkO1xuICByZXR1cm4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyAmJiBpZCA/IGlkIDogbnVsbDtcbn1cblxuLyoqXG4gKiBJcyB0aGlzIHZlcnNpb24gdGhlIG9uZSB0aGF0IGlzIGxpdmU/IEVhY2ggZmFtaWx5IHNwZWxscyBpdCBkaWZmZXJlbnRseS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZlcnNpb24gLSBvbmUgZWxlbWVudCBvZiBleHRyYWN0VmVyc2lvbnMoKVxuICogQHBhcmFtIHtvYmplY3R9IFtyZXNwb25zZV0gLSB0aGUgdmVyc2lvbnMgZW52ZWxvcGUgKGZvciBhY3RpdmVWZXJzaW9uSWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGl2ZVZlcnNpb24odHlwZSwgdmVyc2lvbiwgcmVzcG9uc2UpIHtcbiAgaWYgKCF2ZXJzaW9uIHx8IHR5cGVvZiB2ZXJzaW9uICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdza2lsbCc6XG4gICAgY2FzZSAncGVyc29uYSc6XG4gICAgICByZXR1cm4gdmVyc2lvbi5pc0N1cnJlbnQgPT09IHRydWU7XG4gICAgY2FzZSAnam9iJzpcbiAgICBjYXNlICd3b3JrZmxvdyc6XG4gICAgICByZXR1cm4gdmVyc2lvbi5hY3RpdmUgPT09IHRydWU7XG4gICAgY2FzZSAnd2ViaG9vayc6XG4gICAgY2FzZSAndHJpZ2dlcic6XG4gICAgY2FzZSAncHJlcHJvY2Vzc29yJzpcbiAgICBjYXNlICdwb3N0cHJvY2Vzc29yJzoge1xuICAgICAgaWYgKHZlcnNpb24uaXNBY3RpdmUgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgYWN0aXZlSWQgPSBleHRyYWN0QWN0aXZlVmVyc2lvbklkKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IG93bklkID0gdmVyc2lvbi52ZXJzaW9uSWQgPz8gdmVyc2lvbi5pZCA/PyBudWxsO1xuICAgICAgcmV0dXJuICEhYWN0aXZlSWQgJiYgb3duSWQgPT09IGFjdGl2ZUlkO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogSVNPLTg2MDEgY3JlYXRpb24gdGltZSBvZiBhIHZlcnNpb24sIG9yIG51bGwuIE5vcm1hbGlzZXMgc2tpbGwvcGVyc29uYSdzXG4gKiBgY3JlYXRlZERhdGVgIChwZXJzb25hOiBlcG9jaCBtcykgb250byB0aGUgYGNyZWF0ZWRBdGAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25DcmVhdGVkQXQodmVyc2lvbikge1xuICBpZiAoIXZlcnNpb24gfHwgdHlwZW9mIHZlcnNpb24gIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmF3ID0gdmVyc2lvbi5jcmVhdGVkQXQgPz8gdmVyc2lvbi5jcmVhdGVkRGF0ZSA/PyBudWxsO1xuICBpZiAocmF3ID09IG51bGwpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJhdyA9PT0gJ251bWJlcicpIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocmF3KSA/IG5ldyBEYXRlKHJhdykudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gIHJldHVybiBTdHJpbmcocmF3KTtcbn1cblxuLyoqIElkZW50aWZpZXIgb2YgYSB2ZXJzaW9uIHJvdyAodGhlIHNsb3QgbHVhLWFwaSBrZXlzIGBhY3RpdmVWZXJzaW9uSWRgIG9uKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uSWQodmVyc2lvbikge1xuICBpZiAoIXZlcnNpb24gfHwgdHlwZW9mIHZlcnNpb24gIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHZlcnNpb24udmVyc2lvbklkID8/IHZlcnNpb24uaWQgPz8gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9MSVNUX1RZUEVTID0gT2JqZWN0LmtleXMoTElTVF9FWFRSQUNUT1JTKTtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfVkVSU0lPTl9UWVBFUyA9IE9iamVjdC5rZXlzKFZFUlNJT05TX0VYVFJBQ1RPUlMpO1xuIiwgImltcG9ydCB7IGFwaVJlcXVlc3QgfSBmcm9tICcuLi9hcGktY2xpZW50Lm1qcyc7XG5pbXBvcnQge1xuICBleHRyYWN0TGlzdCxcbiAgZXh0cmFjdFZlcnNpb25zLFxuICBleHRyYWN0QWN0aXZlVmVyc2lvbklkLFxuICBpc0FjdGl2ZVZlcnNpb24sXG4gIHZlcnNpb25DcmVhdGVkQXQsXG4gIHZlcnNpb25JZCxcbiAgTElTVF9QQVRIUyxcbiAgU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMsXG59IGZyb20gJy4uL3Jlc3BvbnNlLXNoYXBlcy5tanMnO1xuXG5jb25zdCBWQUxJRF9UWVBFUyA9IG5ldyBTZXQoU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMpO1xuXG5leHBvcnQgY29uc3QgbGlzdFByaW1pdGl2ZVZlcnNpb25zID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ2xpc3RfcHJpbWl0aXZlX3ZlcnNpb25zJyxcbiAgICAvLyBXaGljaCBmYW1pbGllcyBjYXJyeSBhIHBlci1lbnRyeSBpZCBcdTIwMTQgdmVyaWZpZWQgaW4gbHVhLWFwaSdzIHNlcnZpY2VcbiAgICAvLyBtYXBwZXJzIChwYWNrYWdlcy9sdWEtYXBpL3NyYy9zZXJ2aWNlcy8pOlxuICAgIC8vICAgZGV2ZWxvcGVyLnRyaWdnZXIuc2VydmljZS50cyBnZXRUcmlnZ2VyVmVyc2lvbnMgICAgICAgICAgICBcdTIxOTIgeyB2ZXJzaW9uLCB2ZXJzaW9uSWQ6IHYuaWQsIGNyZWF0ZWRBdCwgaXNBY3RpdmUgfVxuICAgIC8vICAgZGV2ZWxvcGVyLnByZXByb2Nlc3Nvci5zZXJ2aWNlLnRzIGdldFByZVByb2Nlc3NvclZlcnNpb25zICBcdTIxOTIgeyB2ZXJzaW9uSWQ6IHYuaWQsIHZlcnNpb24sIGlzQWN0aXZlLCBjcmVhdGVkQXQgfVxuICAgIC8vICAgZGV2ZWxvcGVyLnBvc3Rwcm9jZXNzb3Iuc2VydmljZS50cyBnZXRQb3N0UHJvY2Vzc29yVmVyc2lvbnNcdTIxOTIgc2FtZSBhcyBwcmVwcm9jZXNzb3JcbiAgICAvLyAgIGRldmVsb3Blci53b3JrZmxvdy5zZXJ2aWNlLnRzIHRvVmVyc2lvbkR0byAgICAgICAgICAgICAgICAgXHUyMTkyIHsgaWQsIHZlcnNpb24sIGFjdGl2ZSwgLi4uIH1cbiAgICAvLyAgIGR0by9qb2IuZHRvLnRzIEpvYlZlcnNpb25EdG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgaWQsIHZlcnNpb24sIGFjdGl2ZSwgLi4uIH1cbiAgICAvLyAgIGRldmVsb3Blci53ZWJob29rLnNlcnZpY2UudHMgZ2V0V2ViaG9va1ZlcnNpb25zICAgICAgICAgICAgXHUyMTkyIHsgdmVyc2lvbiwgd2ViaG9va0lkOiB2LmlkLCBjcmVhdGVkQXQsIGlzQWN0aXZlIH1cbiAgICAvLyAgICAgICAoTk8gdmVyc2lvbklkL2lkIGtleSBcdTIwMTQgdGhlIHJvdyBpZCBpcyBzdGFzaGVkIHVuZGVyIHRoZSBtaXNuYW1lZFxuICAgIC8vICAgICAgICBgd2ViaG9va0lkYCwgd2hpY2ggd2UgZGVsaWJlcmF0ZWx5IGRvIG5vdCByZWFkIGFzIGEgdmVyc2lvbiBpZClcbiAgICAvLyAgIGR0by9za2lsbC5kdG8udHMgU2tpbGxWZXJzaW9uRHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgdmVyc2lvbiwgY3JlYXRlZERhdGUsIGNyZWF0ZWRCeSwgaXNDdXJyZW50IH0gKG5vIGlkKVxuICAgIC8vICAgcGVyc29uYS9iYXNlLmNvbnRyb2xsZXIudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyB2ZXJzaW9uOiBudW1iZXIsIGNyZWF0ZWREYXRlLCBpc0N1cnJlbnQsIHBlcnNvbmEgfSAobm8gaWQpXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IHRoZSBzZXJ2ZXItc2lkZSB2ZXJzaW9ucyBvZiBvbmUgcHJpbWl0aXZlIChza2lsbCwgd2ViaG9vaywgam9iLCB0cmlnZ2VyLCBwcmVwcm9jZXNzb3IsIHBvc3Rwcm9jZXNzb3IsIHdvcmtmbG93KSBvciB0aGUgYWdlbnQgcGVyc29uYS4gUmV0dXJucyB7IGFjdGl2ZVZlcnNpb25JZCwgdmVyc2lvbnM6IFt7dmVyc2lvbiwgdmVyc2lvbklkLCBhY3RpdmUsIGNyZWF0ZWRBdH1dIH0gXHUyMDE0IGBhY3RpdmVgIGlzIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBsaXZlLiBgdmVyc2lvbklkYCBpcyBudWxsIGZvciB0eXBlcyB3aG9zZSB2ZXJzaW9ucyByb3V0ZSBjYXJyaWVzIG5vIHBlci1lbnRyeSBpZDogc2tpbGwsIHBlcnNvbmEgYW5kIHdlYmhvb2sgKHRoZSB3ZWJob29rIHJvdXRlIGV4cG9zZXMgdGhlIHJvdyBpZCBvbmx5IHVuZGVyIGEgbWlzbmFtZWQgYHdlYmhvb2tJZGAga2V5KS4gRm9yIHRob3NlLCBpZGVudGlmeSBhIHZlcnNpb24gYnkgYHZlcnNpb25gOyBmb3Igd2ViaG9va3MgdGhlIGxpdmUgcm93IGlkIGlzIHRoZSB0b3AtbGV2ZWwgYGFjdGl2ZVZlcnNpb25JZGAuIGBhY3RpdmVWZXJzaW9uSWRgIGlzIHBvcHVsYXRlZCBvbmx5IGZvciB3ZWJob29rLCB0cmlnZ2VyLCBwcmVwcm9jZXNzb3IgYW5kIHBvc3Rwcm9jZXNzb3IgZW52ZWxvcGVzIGFuZCBpcyBudWxsIGZvciBza2lsbCwgam9iLCB3b3JrZmxvdyBhbmQgcGVyc29uYS4nLFxuICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWdlbnRJZDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB0eXBlOiB7IHR5cGU6ICdzdHJpbmcnLCBlbnVtOiBbLi4uVkFMSURfVFlQRVNdIH0sXG4gICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnUHJpbWl0aXZlIG5hbWUgYXMgd3JpdHRlbiBpbiBsdWEuc2tpbGwueWFtbCAob21pdCBmb3IgcGVyc29uYSBcdTIwMTQgYW4gYWdlbnQgaGFzIG9ubHkgb25lKScgfSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogWydhZ2VudElkJywgJ3R5cGUnXSxcbiAgICB9LFxuICB9LFxuICBhc3luYyBoYW5kbGVyKHsgYWdlbnRJZCwgdHlwZSwgbmFtZSB9LCBkZXBzID0ge30pIHtcbiAgICBpZiAoIWFnZW50SWQgfHwgIXR5cGUpIHRocm93IG5ldyBFcnJvcignYWdlbnRJZCBhbmQgdHlwZSBhcmUgcmVxdWlyZWQnKTtcbiAgICBpZiAoIVZBTElEX1RZUEVTLmhhcyh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGU6ICR7dHlwZX0uIFZhbGlkOiAke1suLi5WQUxJRF9UWVBFU10uam9pbignLCAnKX1gKTtcbiAgICBpZiAodHlwZSAhPT0gJ3BlcnNvbmEnICYmICFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoJ25hbWUgaXMgcmVxdWlyZWQgZm9yIGFsbCB0eXBlcyBleGNlcHQgcGVyc29uYScpO1xuXG4gICAgLy8gVmVyc2lvbnMgbGl2ZSB1bmRlciAvZGV2ZWxvcGVyLzxwbHVyYWw+LzphZ2VudElkLzppZC92ZXJzaW9ucywgRVhDRVBUXG4gICAgLy8gcGVyc29uYSB3aGljaCBsaXZlcyB1bmRlciAvZGV2ZWxvcGVyL2FnZW50cy86YWdlbnRJZC9wZXJzb25hL3ZlcnNpb25zXG4gICAgLy8gKG5vIDppZCkuIFRoZSA6aWQgc2xvdCBpcyB0aGUgc2VydmVyIGlkIChza2lsbElkIC8gd2ViaG9va0lkIC8gLi4uKSxcbiAgICAvLyBuZXZlciB0aGUgbmFtZSBcdTIwMTQgc28gcmVzb2x2ZSBuYW1lIFx1MjE5MiBpZCBieSBsaXN0aW5nIGZpcnN0LlxuICAgIGxldCBwYXRoO1xuICAgIGlmICh0eXBlID09PSAncGVyc29uYScpIHtcbiAgICAgIHBhdGggPSBgL2RldmVsb3Blci9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L3BlcnNvbmEvdmVyc2lvbnNgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHJlc29sdmVOYW1lVG9JZCh7IGFnZW50SWQsIHR5cGUsIG5hbWUsIGZldGNoRm46IGRlcHMuZmV0Y2hGbiB9KTtcbiAgICAgIHBhdGggPSBgL2RldmVsb3Blci8ke0xJU1RfUEFUSFNbdHlwZV19LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFnZW50SWQpfS8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9L3ZlcnNpb25zYDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgYXBpUmVxdWVzdChwYXRoLCB7IGZldGNoRm46IGRlcHMuZmV0Y2hGbiB9KTtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IGV4dHJhY3RWZXJzaW9ucyh0eXBlLCBkYXRhKTtcbiAgICBjb25zdCBjb21wYWN0ID0gdmVyc2lvbnMubWFwKCh2KSA9PiAoe1xuICAgICAgdmVyc2lvbjogdi52ZXJzaW9uLFxuICAgICAgdmVyc2lvbklkOiB2ZXJzaW9uSWQodiksXG4gICAgICBhY3RpdmU6IGlzQWN0aXZlVmVyc2lvbih0eXBlLCB2LCBkYXRhKSxcbiAgICAgIGNyZWF0ZWRBdDogdmVyc2lvbkNyZWF0ZWRBdCh2KSxcbiAgICB9KSk7XG4gICAgY29uc3QgcmVzdWx0ID0geyBhZ2VudElkLCB0eXBlLCBuYW1lOiB0eXBlID09PSAncGVyc29uYScgPyBudWxsIDogbmFtZSwgYWN0aXZlVmVyc2lvbklkOiBleHRyYWN0QWN0aXZlVmVyc2lvbklkKGRhdGEpLCB2ZXJzaW9uczogY29tcGFjdCB9O1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSB9XSB9O1xuICB9LFxufTtcblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU5hbWVUb0lkKHsgYWdlbnRJZCwgdHlwZSwgbmFtZSwgZmV0Y2hGbiB9KSB7XG4gIGNvbnN0IGxpc3RQYXRoID0gYC9kZXZlbG9wZXIvJHtMSVNUX1BBVEhTW3R5cGVdfS8ke2VuY29kZVVSSUNvbXBvbmVudChhZ2VudElkKX1gO1xuICBjb25zdCBsaXN0UmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0KGxpc3RQYXRoLCB7IGZldGNoRm4gfSk7XG4gIGNvbnN0IGl0ZW1zID0gZXh0cmFjdExpc3QodHlwZSwgbGlzdFJlc3BvbnNlKTtcbiAgY29uc3QgbWF0Y2ggPSBpdGVtcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gaXRlbXMubWFwKChwKSA9PiBwLm5hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpIHx8ICcobm9uZSknO1xuICAgIHRocm93IG5ldyBFcnJvcihgbGlzdF9wcmltaXRpdmVfdmVyc2lvbnM6IG5vICR7dHlwZX0gbmFtZWQgXCIke25hbWV9XCIgb24gYWdlbnQgJHthZ2VudElkfS4gQXZhaWxhYmxlOiAke2F2YWlsYWJsZX1gKTtcbiAgfVxuICBjb25zdCBpZCA9IG1hdGNoLmlkID8/IG1hdGNoLl9pZDtcbiAgaWYgKCFpZCkgdGhyb3cgbmV3IEVycm9yKGBsaXN0X3ByaW1pdGl2ZV92ZXJzaW9uczogJHt0eXBlfSBcIiR7bmFtZX1cIiBleGlzdHMgYnV0IGhhcyBubyBpZCBmaWVsZGApO1xuICByZXR1cm4gaWQ7XG59XG4iLCAiaW1wb3J0IHsgYXBpUmVxdWVzdCB9IGZyb20gJy4uL2FwaS1jbGllbnQubWpzJztcbmltcG9ydCB7XG4gIGV4dHJhY3RMaXN0LFxuICBleHRyYWN0VmVyc2lvbnMsXG4gIGV4dHJhY3RBY3RpdmVWZXJzaW9uSWQsXG4gIGlzQWN0aXZlVmVyc2lvbixcbiAgdmVyc2lvbkNyZWF0ZWRBdCxcbiAgdmVyc2lvbklkLFxuICBMSVNUX1BBVEhTLFxufSBmcm9tICcuLi9yZXNwb25zZS1zaGFwZXMubWpzJztcblxuLy8gQ29tcG9zZXMgXCJ3aGF0IGlzIGxpdmVcIiBmcm9tIHRoZSBwZXItdHlwZSBsdWEtYXBpIGxpc3QgKyB2ZXJzaW9ucyByb3V0ZXMuXG4vLyBUaGVyZSBpcyBubyBzaW5nbGUgYC9hZ2VudHMvOmlkL3Byb2R1Y3Rpb25gIHJvdXRlOyBgbHVhIHN0YXR1cyAtLWpzb25gXG4vLyBnaXZlcyB0aGUgc2FtZSBwaWN0dXJlIGZvciB0aGUgQ1VSUkVOVCBwcm9qZWN0IChsb2NhbCB2cyBkZXBsb3llZCkgYW5kIGlzXG4vLyB0aGUgYmV0dGVyIHRvb2wgd2hlbiBhIGx1YS5za2lsbC55YW1sIGlzIGF0IGhhbmQuIFRoaXMgdG9vbCB3b3JrcyBmb3IgYW55XG4vLyBhZ2VudCB0aGUgY3JlZGVudGlhbCBjYW4gcmVhY2gsIHByb2plY3Qgb3Igbm90LlxuLy9cbi8vIFBlci10eXBlIGVudmVsb3BlIGhhbmRsaW5nIGxpdmVzIGluIHJlc3BvbnNlLXNoYXBlcy5tanMuXG4vL1xuLy8gUmVxdWVzdCBmYW4tb3V0ICgxICsgNyArIE4gdmVyc2lvbiBsb29rdXBzKSBpcyBwYXJhbGxlbGlzZWQgaW4gdHdvIHBoYXNlczpcbi8vICAgMS4gdGhlIHBlcnNvbmEgY2FsbCBhbmQgdGhlIHNldmVuIGxpc3QgY2FsbHMgcnVuIHRvZ2V0aGVyO1xuLy8gICAyLiBwZXIgdHlwZSwgaXRlbSB2ZXJzaW9uIGxvb2t1cHMgcnVuIGluIGNodW5rcyBvZiBWRVJTSU9OU19DSFVOS19TSVpFLlxuLy8gT3V0cHV0IG9yZGVyIGlzIGRldGVybWluaXN0aWMgcmVnYXJkbGVzcyBvZiBjb21wbGV0aW9uIG9yZGVyOiB0eXBlcyBpblxuLy8gUFJJTUlUSVZFX1RZUEVTIG9yZGVyLCBpdGVtcyBpbiB0aGUgb3JkZXIgdGhlIGxpc3Qgcm91dGUgcmV0dXJuZWQgdGhlbS5cbi8vIEEgd2FsbC1jbG9jayBidWRnZXQgKEJVREdFVF9NUywgaW5qZWN0YWJsZSBhcyBkZXBzLmJ1ZGdldE1zKSBzdG9wcyBORVdcbi8vIHJlcXVlc3RzIG9uY2UgZXhjZWVkZWQ7IGFscmVhZHktaXNzdWVkIHJlcXVlc3RzIHN0aWxsIGNvbXBsZXRlLiBJdGVtcyB0aGF0XG4vLyBjb3VsZCBub3QgYmUgbG9va2VkIHVwIGFyZSBzdGlsbCBsaXN0ZWQsIHdpdGggYGVycm9yOiBcInNraXBwZWQ6IFx1MjAyNlwiYCwgYW5kXG4vLyB0aGUgcmVzdWx0IGNhcnJpZXMgYHBhcnRpYWw6IHRydWVgICsgYHBhcnRpYWxSZWFzb25gLlxuXG5jb25zdCBQUklNSVRJVkVfVFlQRVMgPSBbJ3NraWxsJywgJ3dlYmhvb2snLCAnam9iJywgJ3RyaWdnZXInLCAncHJlcHJvY2Vzc29yJywgJ3Bvc3Rwcm9jZXNzb3InLCAnd29ya2Zsb3cnXTtcbmNvbnN0IFZFUlNJT05TX0NIVU5LX1NJWkUgPSA1O1xuY29uc3QgREVGQVVMVF9CVURHRVRfTVMgPSA0NV8wMDA7XG5cbmV4cG9ydCBjb25zdCBnZXREZXBsb3ltZW50U3RhdHVzID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ2dldF9kZXBsb3ltZW50X3N0YXR1cycsXG4gICAgZGVzY3JpcHRpb246ICdXaGF0IGlzIGxpdmUgcmlnaHQgbm93IGZvciBhbiBhZ2VudDogZm9yIGV2ZXJ5IHNraWxsLCB3ZWJob29rLCBqb2IsIHRyaWdnZXIsIHByZXByb2Nlc3NvciwgcG9zdHByb2Nlc3NvciBhbmQgd29ya2Zsb3cgdGhlIGFjdGl2ZSAoZGVwbG95ZWQpIHZlcnNpb24sIHBsdXMgdGhlIGFjdGl2ZSBwZXJzb25hIHZlcnNpb24uIENvbXBvc2VkIGZyb20gdGhlIHBlci10eXBlIGx1YS1hcGkgdmVyc2lvbiByb3V0ZXMgKGxpc3QgY2FsbHMgaW4gcGFyYWxsZWwsIHRoZW4gcGVyLWl0ZW0gdmVyc2lvbiBsb29rdXBzIGluIGNodW5rcyBvZiA1KS4gQm91bmRlZCBieSBhIDQ1IHMgd2FsbC1jbG9jayBidWRnZXQ6IGlmIGV4Y2VlZGVkLCByZW1haW5pbmcgaXRlbXMgYXJlIGxpc3RlZCB3aXRoIGBlcnJvcjogXCJza2lwcGVkOiBcdTIwMjZcImAgYW5kIHRoZSByZXN1bHQgY2FycmllcyBgcGFydGlhbDogdHJ1ZWAgKyBgcGFydGlhbFJlYXNvbmAuIEluc2lkZSBhIHByb2plY3QsIGBsdWEgc3RhdHVzIC0tanNvbmAgYWRkaXRpb25hbGx5IGNvbXBhcmVzIGxvY2FsIHZzIGRlcGxveWVkLicsXG4gICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhZ2VudElkOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFsnYWdlbnRJZCddLFxuICAgIH0sXG4gIH0sXG4gIGFzeW5jIGhhbmRsZXIoeyBhZ2VudElkIH0sIGRlcHMgPSB7fSkge1xuICAgIGlmICghYWdlbnRJZCkgdGhyb3cgbmV3IEVycm9yKCdhZ2VudElkIGlzIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgaWQgPSBlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCk7XG4gICAgY29uc3QgYnVkZ2V0TXMgPSBOdW1iZXIuaXNGaW5pdGUoZGVwcy5idWRnZXRNcykgPyBkZXBzLmJ1ZGdldE1zIDogREVGQVVMVF9CVURHRVRfTVM7XG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvdmVyQnVkZ2V0ID0gKCkgPT4gRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA+IGJ1ZGdldE1zO1xuICAgIGNvbnN0IGdldCA9IChwYXRoKSA9PiBhcGlSZXF1ZXN0KHBhdGgsIHsgZmV0Y2hGbjogZGVwcy5mZXRjaEZuIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0geyBhZ2VudElkLCBwZXJzb25hOiBudWxsLCBwcmltaXRpdmVzOiB7fSB9O1xuICAgIC8vIFNlZWQga2V5cyB1cCBmcm9udCBzbyB0aGUgb3V0cHV0IGtleSBvcmRlciBuZXZlciBkZXBlbmRzIG9uIHRpbWluZy5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgUFJJTUlUSVZFX1RZUEVTKSByZXN1bHQucHJpbWl0aXZlc1t0eXBlXSA9IFtdO1xuXG4gICAgLy8gUGhhc2UgMTogcGVyc29uYSArIGV2ZXJ5IGxpc3Qgcm91dGUsIGFsbCBpbiBmbGlnaHQgYXQgb25jZS5cbiAgICAvLyBQZXJzb25hOiBvbmUgcGVyIGFnZW50LCB2ZXJzaW9ucyB1bmRlciAvZGV2ZWxvcGVyL2FnZW50cy86YWdlbnRJZC9wZXJzb25hL3ZlcnNpb25zLlxuICAgIGNvbnN0IFtwZXJzb25hT3V0Y29tZSwgLi4ubGlzdE91dGNvbWVzXSA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICBnZXQoYC9kZXZlbG9wZXIvYWdlbnRzLyR7aWR9L3BlcnNvbmEvdmVyc2lvbnNgKSxcbiAgICAgIC4uLlBSSU1JVElWRV9UWVBFUy5tYXAoKHR5cGUpID0+IGdldChgL2RldmVsb3Blci8ke0xJU1RfUEFUSFNbdHlwZV19LyR7aWR9YCkpLFxuICAgIF0pO1xuXG4gICAgaWYgKHBlcnNvbmFPdXRjb21lLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IHBlcnNvbmFSZXNwb25zZSA9IHBlcnNvbmFPdXRjb21lLnZhbHVlO1xuICAgICAgY29uc3QgdmVyc2lvbnMgPSBleHRyYWN0VmVyc2lvbnMoJ3BlcnNvbmEnLCBwZXJzb25hUmVzcG9uc2UpO1xuICAgICAgY29uc3QgYWN0aXZlID0gdmVyc2lvbnMuZmluZCgodikgPT4gaXNBY3RpdmVWZXJzaW9uKCdwZXJzb25hJywgdiwgcGVyc29uYVJlc3BvbnNlKSkgPz8gbnVsbDtcbiAgICAgIHJlc3VsdC5wZXJzb25hID0ge1xuICAgICAgICBhY3RpdmVWZXJzaW9uOiBhY3RpdmU/LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgYWN0aXZlVmVyc2lvbkNyZWF0ZWRBdDogdmVyc2lvbkNyZWF0ZWRBdChhY3RpdmUpLFxuICAgICAgICB2ZXJzaW9uQ291bnQ6IHZlcnNpb25zLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wZXJzb25hID0geyBlcnJvcjogcGVyc29uYU91dGNvbWUucmVhc29uPy5tZXNzYWdlID8/IFN0cmluZyhwZXJzb25hT3V0Y29tZS5yZWFzb24pIH07XG4gICAgfVxuXG4gICAgLy8gUGhhc2UgMjogcGVyIHR5cGUsIHJlc29sdmUgZWFjaCBpdGVtJ3MgdmVyc2lvbnMgaW4gY2h1bmtzLiBUeXBlcyBhcmVcbiAgICAvLyB2aXNpdGVkIHNlcXVlbnRpYWxseSAoY2Fub25pY2FsIG9yZGVyKTsgd2l0aGluIGEgdHlwZSB1cCB0b1xuICAgIC8vIFZFUlNJT05TX0NIVU5LX1NJWkUgbG9va3VwcyBhcmUgaW4gZmxpZ2h0IHRvZ2V0aGVyLlxuICAgIGxldCBidWRnZXRFeGhhdXN0ZWQgPSBmYWxzZTtcbiAgICBsZXQgc2tpcHBlZCA9IDA7XG4gICAgbGV0IHRvdGFsID0gMDtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgUFJJTUlUSVZFX1RZUEVTLmxlbmd0aDsgdCsrKSB7XG4gICAgICBjb25zdCB0eXBlID0gUFJJTUlUSVZFX1RZUEVTW3RdO1xuICAgICAgY29uc3QgcGF0aCA9IExJU1RfUEFUSFNbdHlwZV07XG4gICAgICBjb25zdCBvdXRjb21lID0gbGlzdE91dGNvbWVzW3RdO1xuICAgICAgaWYgKG91dGNvbWUuc3RhdHVzICE9PSAnZnVsZmlsbGVkJykge1xuICAgICAgICByZXN1bHQucHJpbWl0aXZlc1t0eXBlXSA9IHsgZXJyb3I6IG91dGNvbWUucmVhc29uPy5tZXNzYWdlID8/IFN0cmluZyhvdXRjb21lLnJlYXNvbikgfTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBVUkwgc2xvdCBpcyB0aGUgc2VydmVyIGlkICg6c2tpbGxJZCAvIDp3ZWJob29rSWQgLyAuLi4pLCBuZXZlclxuICAgICAgLy8gdGhlIG5hbWUuIEl0ZW1zIHdpdGhvdXQgYW4gaWQgYXJlIGRyb3BwZWQsIGFzIGJlZm9yZS5cbiAgICAgIGNvbnN0IHRhcmdldHMgPSBleHRyYWN0TGlzdCh0eXBlLCBvdXRjb21lLnZhbHVlKVxuICAgICAgICAubWFwKChwKSA9PiAoeyBwLCBwcmltSWQ6IHAuaWQgPz8gcC5faWQsIG5hbWU6IHAubmFtZSA/PyBwLmlkID8/IHAuX2lkIH0pKVxuICAgICAgICAuZmlsdGVyKCh0Z3QpID0+IHRndC5wcmltSWQpO1xuICAgICAgdG90YWwgKz0gdGFyZ2V0cy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkgKz0gVkVSU0lPTlNfQ0hVTktfU0laRSkge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRhcmdldHMuc2xpY2UoaSwgaSArIFZFUlNJT05TX0NIVU5LX1NJWkUpO1xuXG4gICAgICAgIGlmIChidWRnZXRFeGhhdXN0ZWQgfHwgb3ZlckJ1ZGdldCgpKSB7XG4gICAgICAgICAgYnVkZ2V0RXhoYXVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICBza2lwcGVkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgcHJpbUlkIH0gb2YgY2h1bmspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wcmltaXRpdmVzW3R5cGVdLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lLCBpZDogcHJpbUlkLFxuICAgICAgICAgICAgICBlcnJvcjogYHNraXBwZWQ6IHdhbGwtY2xvY2sgYnVkZ2V0IG9mICR7YnVkZ2V0TXN9bXMgZXhoYXVzdGVkIGJlZm9yZSB0aGlzIHZlcnNpb24gbG9va3VwIHdhcyBpc3N1ZWRgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3V0Y29tZXMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgY2h1bmsubWFwKCh7IHByaW1JZCB9KSA9PiBnZXQoYC9kZXZlbG9wZXIvJHtwYXRofS8ke2lkfS8ke2VuY29kZVVSSUNvbXBvbmVudChwcmltSWQpfS92ZXJzaW9uc2ApKVxuICAgICAgICApO1xuXG4gICAgICAgIG91dGNvbWVzLmZvckVhY2goKHZvLCBqKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBwLCBwcmltSWQsIG5hbWUgfSA9IGNodW5rW2pdO1xuICAgICAgICAgIGlmICh2by5zdGF0dXMgIT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgICAgICByZXN1bHQucHJpbWl0aXZlc1t0eXBlXS5wdXNoKHsgbmFtZSwgaWQ6IHByaW1JZCwgZXJyb3I6IHZvLnJlYXNvbj8ubWVzc2FnZSA/PyBTdHJpbmcodm8ucmVhc29uKSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmVyc2lvbnNSZXNwb25zZSA9IHZvLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IHZlcnNpb25zID0gZXh0cmFjdFZlcnNpb25zKHR5cGUsIHZlcnNpb25zUmVzcG9uc2UpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHZlcnNpb25zLmZpbmQoKHYpID0+IGlzQWN0aXZlVmVyc2lvbih0eXBlLCB2LCB2ZXJzaW9uc1Jlc3BvbnNlKSkgPz8gbnVsbDtcblxuICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGlkOiBwcmltSWQsXG4gICAgICAgICAgICBhY3RpdmVWZXJzaW9uOiBhY3RpdmU/LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgICAgIGFjdGl2ZVZlcnNpb25JZDogdmVyc2lvbklkKGFjdGl2ZSkgPz8gZXh0cmFjdEFjdGl2ZVZlcnNpb25JZCh2ZXJzaW9uc1Jlc3BvbnNlKSxcbiAgICAgICAgICAgIGFjdGl2ZVZlcnNpb25DcmVhdGVkQXQ6IHZlcnNpb25DcmVhdGVkQXQoYWN0aXZlKSxcbiAgICAgICAgICAgIHZlcnNpb25Db3VudDogdmVyc2lvbnMubGVuZ3RoLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gUmVjb3JkcyB0aGF0IGNhcnJ5IHRoZWlyIG93biBlbmFibGVkL2Rpc2FibGVkIHN3aXRjaC5cbiAgICAgICAgICBpZiAodHlwZW9mIHAuYWN0aXZlID09PSAnYm9vbGVhbicpIGVudHJ5LmVuYWJsZWQgPSBwLmFjdGl2ZTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ3dvcmtmbG93JyAmJiB0eXBlb2YgcC5keW5hbWljID09PSAnYm9vbGVhbicpIGVudHJ5LmR5bmFtaWMgPSBwLmR5bmFtaWM7XG4gICAgICAgICAgcmVzdWx0LnByaW1pdGl2ZXNbdHlwZV0ucHVzaChlbnRyeSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChza2lwcGVkID4gMCkge1xuICAgICAgcmVzdWx0LnBhcnRpYWwgPSB0cnVlO1xuICAgICAgcmVzdWx0LnBhcnRpYWxSZWFzb24gPVxuICAgICAgICBgV2FsbC1jbG9jayBidWRnZXQgb2YgJHtidWRnZXRNc31tcyBleGNlZWRlZCBhZnRlciAke0RhdGUubm93KCkgLSBzdGFydGVkQXR9bXM7IGAgK1xuICAgICAgICBgJHtza2lwcGVkfSBvZiAke3RvdGFsfSB2ZXJzaW9uIGxvb2t1cHMgd2VyZSBub3QgaXNzdWVkIChlbnRyaWVzIGNhcnJ5IGVycm9yOiBcInNraXBwZWQ6IFx1MjAyNlwiKS5gO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikgfV0sXG4gICAgfTtcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgYXBpUmVxdWVzdCB9IGZyb20gJy4uL2FwaS1jbGllbnQubWpzJztcblxuLy8gVGhlIGBsb2dTb3VyY2VgIGVudW0gbHVhLWFwaSBhY2NlcHRzIFx1MjAxNCBBR0VOVF9MT0dfU09VUkNFUyBpblxuLy8gcGFja2FnZXMvc2hhcmVkLXR5cGVzL3NyYy92bS1leGVjdXRpb24tbG9nLnR5cGVzLnRzICh0aGUgc2luZ2xlIHNvdXJjZSBvZlxuLy8gdHJ1dGggZXZlcnkgc2VydmljZSBpbXBvcnRzKS4gYGFsbGAgaXMgdGhlIE1DUC1zaWRlIHNlbnRpbmVsIGZvciBcIm5vXG4vLyBmaWx0ZXJcIi4gTm90ZTogYGx1YSBsb2dzIC0tdHlwZWAgYWNjZXB0cyBhIG5hcnJvd2VyIGxpc3QgYW5kIG5vIGBtYXN0cmFgLlxuZXhwb3J0IGNvbnN0IExPR19TT1VSQ0VTID0gW1xuICAnc2tpbGwnLCAnam9iJywgJ3dlYmhvb2snLCAndHJpZ2dlcicsICdwcmVwcm9jZXNzb3InLCAncG9zdHByb2Nlc3NvcicsXG4gICd1c2VyX21lc3NhZ2UnLCAnYWdlbnRfcmVzcG9uc2UnLCAnYWdlbnRfZXJyb3InLCAncnVudGltZScsICdtY3AnLCAncmFnJyxcbiAgJ2RldmljZScsICdkZXZpY2UtdHJpZ2dlcicsICdtb2RlbC1yZXNvbHZlcicsXG4gICd3b3JrZmxvdy1zdGVwJywgJ3dvcmtmbG93LXNjcmlwdCcsICd3b3JrZmxvdycsXG5dO1xuXG4vLyBUaGUgYGxvZ1R5cGVgIHF1ZXJ5IHBhcmFtIFx1MjAxNCBHRVQgL2RldmVsb3Blci9hZ2VudHMvOmFnZW50SWQvbG9ncyByZWFkcyBpdFxuLy8gKGNvbnRyb2xsZXJzL2RldmVsb3Blci9iYXNlLmNvbnRyb2xsZXIudHMpIGFuZCBkZXZlbG9wZXIuc2VydmljZS50c1xuLy8gZ2V0QWdlbnRMb2dzIGFwcGxpZXMgaXQgdmVyYmF0aW0gYXMgYGZpbHRlci5zdWJUeXBlID0gbG9nVHlwZWAuIFRoZVxuLy8gYWNjZXB0ZWQgdmFsdWVzIGFyZSB0aGVyZWZvcmUgdGhlIFZtRXhlY3V0aW9uTG9nIGBzdWJUeXBlYCBlbnVtIGluXG4vLyBwYWNrYWdlcy9zaGFyZWQtc2NoZW1hcy9zcmMvdm1FeGVjdXRpb25Mb2dzLnNjaGVtYS50czpcbi8vICAgZW51bTogWydzdGFydCcsICdjb21wbGV0ZScsICdlcnJvcicsICdkZWJ1ZycsICd3YXJuJywgJ2luZm8nXVxuLy8gKG1pcnJvcmVkIGJ5IGx1YS1jbGkncyBMb2dFbnRyeS5zdWJUeXBlIGluIHNyYy9pbnRlcmZhY2VzL2xvZ3MudHMpLiBBbnlcbi8vIG90aGVyIHN0cmluZyBpcyBub3QgcmVqZWN0ZWQgc2VydmVyLXNpZGUgXHUyMDE0IGl0IHNpbXBseSBtYXRjaGVzIG5vdGhpbmcuXG5leHBvcnQgY29uc3QgTE9HX1RZUEVTID0gWydlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnLCAnc3RhcnQnLCAnY29tcGxldGUnXTtcblxuY29uc3QgVkFMSURfVFlQRVMgPSBuZXcgU2V0KFsnYWxsJywgLi4uTE9HX1NPVVJDRVNdKTtcbmNvbnN0IFZBTElEX0xPR19UWVBFUyA9IG5ldyBTZXQoTE9HX1RZUEVTKTtcblxuZXhwb3J0IGNvbnN0IHRhaWxMb2dzID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ3RhaWxfbG9ncycsXG4gICAgZGVzY3JpcHRpb246ICdGZXRjaCByZWNlbnQgZXhlY3V0aW9uIGxvZ3MgZm9yIGFuIGFnZW50IChzYW1lIGRhdGEgYXMgYGx1YSBsb2dzIC0tanNvbmApLiBSZXR1cm5zIHsgbG9nczogTG9nRW50cnlbXSwgcGFnaW5hdGlvbiB9LiBFYWNoIExvZ0VudHJ5IGhhcyBgc3ViVHlwZWAgKGVycm9yIHwgd2FybiB8IGluZm8gfCBkZWJ1ZyB8IHN0YXJ0IHwgY29tcGxldGUpLCBgbWVzc2FnZWAsIGB0aW1lc3RhbXBgLCBhbmQgYG1ldGFkYXRhLmxvZ1NvdXJjZWAgLyBgbWV0YWRhdGEucHJpbWl0aXZlTmFtZWAgXHUyMDE0IHRoZXJlIGlzIE5PIGBsZXZlbGAgZmllbGQuIEZpbHRlciBieSBzb3VyY2UgKGB0eXBlYCksIHByaW1pdGl2ZSAoYG5hbWVgKSBhbmQvb3Igc2V2ZXJpdHkgKGBsb2dUeXBlYCwgd2hpY2ggZmlsdGVycyBvbiBgc3ViVHlwZWApLicsXG4gICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhZ2VudElkOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBlbnVtOiBbLi4uVkFMSURfVFlQRVNdLFxuICAgICAgICAgIGRlZmF1bHQ6ICdhbGwnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTG9nIHNvdXJjZSBmaWx0ZXIgKG1hcHMgdG8gbHVhLWFwaSBgbG9nU291cmNlYCkuIGBhbGxgID0gbm8gZmlsdGVyLicsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGJ5IHByaW1pdGl2ZSBuYW1lIChvcHRpb25hbDsgbWFwcyB0byBgcHJpbWl0aXZlTmFtZWApJyB9LFxuICAgICAgICBsb2dUeXBlOiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgZW51bTogTE9HX1RZUEVTLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGJ5IExvZ0VudHJ5IGBzdWJUeXBlYCAob3B0aW9uYWw7IG1hcHMgdG8gbHVhLWFwaSBgbG9nVHlwZWApLiBPbWl0IGZvciBldmVyeSBzZXZlcml0eS4gZS5nLiBgZXJyb3JgIHRvIHNlZSBvbmx5IGZhaWx1cmVzLicsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGx1YS1hcGkgY2FwcyBsaW1pdCBhdCAxMDAgc2VydmVyLXNpZGUgKE1hdGgubWluKDEwMCwgLi4uKSBpblxuICAgICAgICAvLyBjb250cm9sbGVycy9kZXZlbG9wZXIvYmFzZS5jb250cm9sbGVyLnRzKS4gTWF0Y2ggdGhlIHNlcnZlciBjYXAgc29cbiAgICAgICAgLy8gdGhlIHRvb2wncyBjb250cmFjdCBpcyBob25lc3QuXG4gICAgICAgIGxpbWl0OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiA1MCwgbWluaW11bTogMSwgbWF4aW11bTogMTAwIH0sXG4gICAgICAgIHBhZ2U6IHsgdHlwZTogJ251bWJlcicsIG1pbmltdW06IDEsIGRlc2NyaXB0aW9uOiAnUGFnZSBudW1iZXIgZm9yIHBhZ2luYXRpb24gKG9wdGlvbmFsKScgfSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogWydhZ2VudElkJ10sXG4gICAgfSxcbiAgfSxcbiAgYXN5bmMgaGFuZGxlcih7IGFnZW50SWQsIHR5cGUgPSAnYWxsJywgbmFtZSwgbG9nVHlwZSwgbGltaXQgPSA1MCwgcGFnZSB9LCBkZXBzID0ge30pIHtcbiAgICBpZiAoIWFnZW50SWQpIHRocm93IG5ldyBFcnJvcignYWdlbnRJZCBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghVkFMSURfVFlQRVMuaGFzKHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZTogJHt0eXBlfS4gVmFsaWQ6ICR7Wy4uLlZBTElEX1RZUEVTXS5qb2luKCcsICcpfWApO1xuICAgIGlmIChsb2dUeXBlICE9PSB1bmRlZmluZWQgJiYgIVZBTElEX0xPR19UWVBFUy5oYXMobG9nVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsb2dUeXBlOiAke2xvZ1R5cGV9LiBWYWxpZDogJHtMT0dfVFlQRVMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgLy8gRGVmZW5zaXZlIGNhcCBtYXRjaGluZyB0aGUgc2VydmVyLXNpZGUgbGltaXQ7IHJlamVjdHMgbG91ZCByYXRoZXJcbiAgICAvLyB0aGFuIHNpbGVudGx5IHRydW5jYXRpbmcuXG4gICAgaWYgKGxpbWl0ID4gMTAwKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGltaXQ6ICR7bGltaXR9LiBsdWEtYXBpIGNhcHMgbG9ncyBhdCAxMDAgZW50cmllcyBwZXIgY2FsbC5gKTtcbiAgICAvLyBSb3V0ZTogR0VUIC9kZXZlbG9wZXIvYWdlbnRzLzphZ2VudElkL2xvZ3MgKGNvbnRyb2xsZXJzL2RldmVsb3Blci9iYXNlLmNvbnRyb2xsZXIudHMpLlxuICAgIC8vIFF1ZXJ5IHBhcmFtcyB0aGUgc2VydmVyIHJlYWRzOiBwYWdlLCBsaW1pdCwgc29ydEJ5LCBzb3J0T3JkZXIsIGxvZ1NvdXJjZSxcbiAgICAvLyBwcmltaXRpdmVJZCwgcHJpbWl0aXZlTmFtZSwgdG9vbElkLCB0b29sTmFtZSwgbG9nVHlwZSwgdXNlcklkLiBUaGVcbiAgICAvLyB0eXBlIGZpbHRlciBpcyBgbG9nU291cmNlYCBcdTIwMTQgYSBgcHJpbWl0aXZlVHlwZWAgcGFyYW0gaXMgc2lsZW50bHkgaWdub3JlZC5cbiAgICBjb25zdCBxdWVyeSA9IHsgbGltaXQgfTtcbiAgICBpZiAodHlwZSAhPT0gJ2FsbCcpIHF1ZXJ5LmxvZ1NvdXJjZSA9IHR5cGU7XG4gICAgaWYgKG5hbWUpIHF1ZXJ5LnByaW1pdGl2ZU5hbWUgPSBuYW1lO1xuICAgIGlmIChsb2dUeXBlKSBxdWVyeS5sb2dUeXBlID0gbG9nVHlwZTtcbiAgICBpZiAocGFnZSkgcXVlcnkucGFnZSA9IHBhZ2U7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwaVJlcXVlc3QoXG4gICAgICBgL2RldmVsb3Blci9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L2xvZ3NgLFxuICAgICAgeyBxdWVyeSwgZmV0Y2hGbjogZGVwcy5mZXRjaEZuIH1cbiAgICApO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikgfV0gfTtcbiAgfSxcbn07XG4iLCAiLy8gTUNQIHN0ZGlvIHNlcnZlciBib290c3RyYXAuIFBlciB0ZWNoIHNwZWMgXHUwMEE3OC4xLlxuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzJztcbmltcG9ydCB7XG4gIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcbn0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qcyc7XG5pbXBvcnQgKiBhcyB0b29scyBmcm9tICcuL3Rvb2xzL2luZGV4Lm1qcyc7XG5cbmNvbnN0IFRPT0xfUkVHSVNUUlkgPSBPYmplY3QudmFsdWVzKHRvb2xzKTtcblxuY29uc3Qgc2VydmVyID0gbmV3IFNlcnZlcihcbiAgeyBuYW1lOiAnbHVhLXBsYXRmb3JtJywgdmVyc2lvbjogJzEuMTIuMCcgfSxcbiAgeyBjYXBhYmlsaXRpZXM6IHsgdG9vbHM6IHt9IH0gfVxuKTtcblxuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+ICh7XG4gIHRvb2xzOiBUT09MX1JFR0lTVFJZLm1hcCgodCkgPT4gdC5zcGVjKSxcbn0pKTtcblxuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKENhbGxUb29sUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcSkgPT4ge1xuICBjb25zdCB0b29sID0gVE9PTF9SRUdJU1RSWS5maW5kKCh0KSA9PiB0LnNwZWMubmFtZSA9PT0gcmVxLnBhcmFtcy5uYW1lKTtcbiAgaWYgKCF0b29sKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdG9vbDogJHtyZXEucGFyYW1zLm5hbWV9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRvb2wuaGFuZGxlcihyZXEucGFyYW1zLmFyZ3VtZW50cyA/PyB7fSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBFcnJvcjogJHtlcnIubWVzc2FnZX1gIH1dLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG59KTtcblxuLy8gXHUwMEE3MTkuNiBjcmFzaCByZXBvcnRpbmcgXHUyMDE0IG11c3QgbGFuZCBCRUZPUkUgcHJvY2VzcyBleGl0IHNvIHRoZSBldmVudCByZWFjaGVzXG4vLyB0ZWxlbWV0cnkuIFdpbmRvd3MgY2FuIGRyb3AgdGhlIGxhc3Qgc3RkZXJyIHdyaXRlIGlmIHByb2Nlc3MuZXhpdCBmaXJlc1xuLy8gc3luY2hyb25vdXNseSBhZnRlciBpdDsgc2FtZSBidWcgY2xhc3MgYXMgbGliL2hvb2stcnVudGltZS5tanMncyBleGl0KCkuXG4vLyBFeGl0IG9ubHkgaW5zaWRlIHRoZSB3cml0ZSBjYWxsYmFjayBzbyB0aGUgZmx1c2ggY29tcGxldGVzLlxuZnVuY3Rpb24gcmVwb3J0Q3Jhc2hBbmRFeGl0KHBheWxvYWQpIHtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkgKyAnXFxuJywgKCkgPT4gcHJvY2Vzcy5leGl0KDEpKTtcbn1cblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyKSA9PiB7XG4gIHJlcG9ydENyYXNoQW5kRXhpdCh7XG4gICAgZXZlbnQ6ICdtY3Bfc2VydmVyX2NyYXNoJyxcbiAgICBraW5kOiAndW5jYXVnaHRFeGNlcHRpb24nLFxuICAgIG1lc3NhZ2U6IGVycj8ubWVzc2FnZSxcbiAgICBzdGFjazogZXJyPy5zdGFjayxcbiAgICBwbHVnaW5fdmVyc2lvbjogJzEuMTIuMCcsXG4gICAgbHVhX2NsaV92ZXJzaW9uOiBwcm9jZXNzLmVudi5MVUFfQ0xJX1ZFUlNJT04gPz8gbnVsbCxcbiAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICB0czogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9KTtcbn0pO1xuXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uKSA9PiB7XG4gIHJlcG9ydENyYXNoQW5kRXhpdCh7XG4gICAgZXZlbnQ6ICdtY3Bfc2VydmVyX2NyYXNoJyxcbiAgICBraW5kOiAndW5oYW5kbGVkUmVqZWN0aW9uJyxcbiAgICByZWFzb246IFN0cmluZyhyZWFzb24pLFxuICAgIHN0YWNrOiAvKiogQHR5cGUge2FueX0gKi8gKHJlYXNvbik/LnN0YWNrLFxuICAgIHBsdWdpbl92ZXJzaW9uOiAnMS4xMi4wJyxcbiAgICBsdWFfY2xpX3ZlcnNpb246IHByb2Nlc3MuZW52LkxVQV9DTElfVkVSU0lPTiA/PyBudWxsLFxuICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgIHRzOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH0pO1xufSk7XG5cbmF3YWl0IHNlcnZlci5jb25uZWN0KG5ldyBTdGRpb1NlcnZlclRyYW5zcG9ydCgpKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7NkZBQUEsSUFBQUEsRUFBQSxHQUFBQyxHQUFBRCxFQUFBLFdBQUFFLEdBQUEsVUFBQUMsRUFBQSxlQUFBQyxHQUFBLFlBQUFDLEVBQUEsVUFBQUMsR0FBQSxPQUFBQyxFQUFBLGdCQUFBQyxFQUFBLFdBQUFDLEVBQUEsV0FBQUMsRUFBQSxhQUFBQyxFQUFBLGNBQUFDLEdBQUEsZUFBQUMsR0FBQSxlQUFBQyxHQUFBLGFBQUFDLEdBQUEsWUFBQUMsR0FBQSxlQUFBQyxHQUFBLDBCQUFBQyxHQUFBLGVBQUFDLEVBQUEsWUFBQUMsR0FBQSxhQUFBQyxFQUFBLDBCQUFBQyxFQUFBLGdCQUFBQyxHQUFBLG9CQUFBQyxHQUFBLGlCQUFBQyxFQUFBLFlBQUFDLEdBQUEsZUFBQUMsR0FBQSxXQUFBQyxHQUFBLFdBQUFDLEdBQUEsa0JBQUFDLEdBQUEsYUFBQUMsRUFBQSxZQUFBQyxHQUFBLGdCQUFBQyxFQUFBLGNBQUFDLEdBQUEsY0FBQUMsRUFBQSxnQkFBQUMsRUFBQSxrQkFBQUMsRUFBQSxnQkFBQUMsR0FBQSxlQUFBQyxFQUFBLGdCQUFBQyxHQUFBLGNBQUFDLEdBQUEsY0FBQWhDLEVBQUEsV0FBQWlDLEdBQUEsY0FBQUMsRUFBQSxjQUFBQyxHQUFBLG1CQUFBekIsRUFBQSxhQUFBMEIsRUFBQSxZQUFBcEMsRUFBQSxpQkFBQXFDLEdBQUEsYUFBQUMsR0FBQSxlQUFBQyxFQUFBLFlBQUFDLEdBQUEsc0JBQUFDLEVBQUEsUUFBQUMsR0FBQSxVQUFBQyxHQUFBLFdBQUFDLEdBQUEsWUFBQUMsR0FBQSxXQUFBQyxHQUFBLFdBQUFDLEdBQUEsU0FBQUMsR0FBQSxrQkFBQUMsR0FBQSxvQkFBQUMsRUFBQSx1QkFBQUMsR0FBQSxXQUFBQyxHQUFBLFNBQUFDLEdBQUEsYUFBQUMsR0FBQSxnQkFBQUMsR0FBQSxrQkFBQUMsRUFBQSxlQUFBQyxHQUFBLGlCQUFBQyxHQUFBLGNBQUFDLEdBQUEsWUFBQUMsR0FBQSxZQUFBQyxHQUFBLFlBQUFDLEVBQUEsU0FBQUMsR0FBQSxTQUFBQyxHQUFBLFlBQUFDLEdBQUEsY0FBQUMsR0FBQSxRQUFBQyxHQUFBLFFBQUFDLEdBQUEsZUFBQUMsR0FBQSxVQUFBQyxHQUFBLFNBQUFDLEdBQUEsYUFBQUMsR0FBQSxXQUFBQyxHQUFBLFdBQUFDLEdBQUEsZUFBQUMsR0FBQSxhQUFBQyxHQUFBLFlBQUFDLEdBQUEsYUFBQUMsR0FBQSxZQUFBQyxHQUFBLGFBQUFDLEdBQUEsZUFBQUMsR0FBQSxZQUFBQyxHQUFBLGtCQUFBQyxHQUFBLFdBQUFDLEdBQUEsUUFBQUMsR0FBQSxnQkFBQUMsR0FBQSxpQkFBQUMsR0FBQSxXQUFBQyxHQUFBLFdBQUFDLEdBQUEsZ0JBQUFyQyxHQUFBLFVBQUFzQyxHQUFBLGNBQUFDLEdBQUEsVUFBQUMsR0FBQSxZQUFBQyxHQUFBLFNBQUFDLEVBQUEsU0FBQUMsS0NBTyxJQUFJQyxHQUNWLFNBQVVBLEVBQU0sQ0FDYkEsRUFBSyxZQUFlQyxHQUFNLENBQUUsRUFDNUIsU0FBU0MsRUFBU0MsRUFBTSxDQUFFLENBQzFCSCxFQUFLLFNBQVdFLEVBQ2hCLFNBQVNFLEVBQVlDLEVBQUksQ0FDckIsTUFBTSxJQUFJLEtBQ2QsQ0FDQUwsRUFBSyxZQUFjSSxFQUNuQkosRUFBSyxZQUFlTSxHQUFVLENBQzFCLElBQU1DLEVBQU0sQ0FBQyxFQUNiLFFBQVdDLEtBQVFGLEVBQ2ZDLEVBQUlDLENBQUksRUFBSUEsRUFFaEIsT0FBT0QsQ0FDWCxFQUNBUCxFQUFLLG1CQUFzQk8sR0FBUSxDQUMvQixJQUFNRSxFQUFZVCxFQUFLLFdBQVdPLENBQUcsRUFBRSxPQUFRRyxHQUFNLE9BQU9ILEVBQUlBLEVBQUlHLENBQUMsQ0FBQyxHQUFNLFFBQVEsRUFDOUVDLEVBQVcsQ0FBQyxFQUNsQixRQUFXRCxLQUFLRCxFQUNaRSxFQUFTRCxDQUFDLEVBQUlILEVBQUlHLENBQUMsRUFFdkIsT0FBT1YsRUFBSyxhQUFhVyxDQUFRLENBQ3JDLEVBQ0FYLEVBQUssYUFBZ0JPLEdBQ1ZQLEVBQUssV0FBV08sQ0FBRyxFQUFFLElBQUksU0FBVUssRUFBRyxDQUN6QyxPQUFPTCxFQUFJSyxDQUFDLENBQ2hCLENBQUMsRUFFTFosRUFBSyxXQUFhLE9BQU8sT0FBTyxNQUFTLFdBQ2xDTyxHQUFRLE9BQU8sS0FBS0EsQ0FBRyxFQUN2Qk0sR0FBVyxDQUNWLElBQU1DLEVBQU8sQ0FBQyxFQUNkLFFBQVdDLEtBQU9GLEVBQ1YsT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBUUUsQ0FBRyxHQUNoREQsRUFBSyxLQUFLQyxDQUFHLEVBR3JCLE9BQU9ELENBQ1gsRUFDSmQsRUFBSyxLQUFPLENBQUNnQixFQUFLQyxJQUFZLENBQzFCLFFBQVdULEtBQVFRLEVBQ2YsR0FBSUMsRUFBUVQsQ0FBSSxFQUNaLE9BQU9BLENBR25CLEVBQ0FSLEVBQUssVUFBWSxPQUFPLE9BQU8sV0FBYyxXQUN0Q2tCLEdBQVEsT0FBTyxVQUFVQSxDQUFHLEVBQzVCQSxHQUFRLE9BQU9BLEdBQVEsVUFBWSxPQUFPLFNBQVNBLENBQUcsR0FBSyxLQUFLLE1BQU1BLENBQUcsSUFBTUEsRUFDdEYsU0FBU0MsRUFBV0MsRUFBT0MsRUFBWSxNQUFPLENBQzFDLE9BQU9ELEVBQU0sSUFBS0YsR0FBUyxPQUFPQSxHQUFRLFNBQVcsSUFBSUEsQ0FBRyxJQUFNQSxDQUFJLEVBQUUsS0FBS0csQ0FBUyxDQUMxRixDQUNBckIsRUFBSyxXQUFhbUIsRUFDbEJuQixFQUFLLHNCQUF3QixDQUFDQyxFQUFHcUIsSUFDekIsT0FBT0EsR0FBVSxTQUNWQSxFQUFNLFNBQVMsRUFFbkJBLENBRWYsR0FBR3RCLElBQVNBLEVBQU8sQ0FBQyxFQUFFLEVBQ2YsSUFBSXVCLElBQ1YsU0FBVUEsRUFBWSxDQUNuQkEsRUFBVyxZQUFjLENBQUNDLEVBQU9DLEtBQ3RCLENBQ0gsR0FBR0QsRUFDSCxHQUFHQyxDQUNQLEVBRVIsR0FBR0YsS0FBZUEsR0FBYSxDQUFDLEVBQUUsRUFDM0IsSUFBTUcsRUFBZ0IxQixFQUFLLFlBQVksQ0FDMUMsU0FDQSxNQUNBLFNBQ0EsVUFDQSxRQUNBLFVBQ0EsT0FDQSxTQUNBLFNBQ0EsV0FDQSxZQUNBLE9BQ0EsUUFDQSxTQUNBLFVBQ0EsVUFDQSxPQUNBLFFBQ0EsTUFDQSxLQUNKLENBQUMsRUFDWTJCLEVBQWlCQyxHQUFTLENBRW5DLE9BRFUsT0FBT0EsRUFDTixDQUNQLElBQUssWUFDRCxPQUFPRixFQUFjLFVBQ3pCLElBQUssU0FDRCxPQUFPQSxFQUFjLE9BQ3pCLElBQUssU0FDRCxPQUFPLE9BQU8sTUFBTUUsQ0FBSSxFQUFJRixFQUFjLElBQU1BLEVBQWMsT0FDbEUsSUFBSyxVQUNELE9BQU9BLEVBQWMsUUFDekIsSUFBSyxXQUNELE9BQU9BLEVBQWMsU0FDekIsSUFBSyxTQUNELE9BQU9BLEVBQWMsT0FDekIsSUFBSyxTQUNELE9BQU9BLEVBQWMsT0FDekIsSUFBSyxTQUNELE9BQUksTUFBTSxRQUFRRSxDQUFJLEVBQ1hGLEVBQWMsTUFFckJFLElBQVMsS0FDRkYsRUFBYyxLQUVyQkUsRUFBSyxNQUFRLE9BQU9BLEVBQUssTUFBUyxZQUFjQSxFQUFLLE9BQVMsT0FBT0EsRUFBSyxPQUFVLFdBQzdFRixFQUFjLFFBRXJCLE9BQU8sSUFBUSxLQUFlRSxhQUFnQixJQUN2Q0YsRUFBYyxJQUVyQixPQUFPLElBQVEsS0FBZUUsYUFBZ0IsSUFDdkNGLEVBQWMsSUFFckIsT0FBTyxLQUFTLEtBQWVFLGFBQWdCLEtBQ3hDRixFQUFjLEtBRWxCQSxFQUFjLE9BQ3pCLFFBQ0ksT0FBT0EsRUFBYyxPQUM3QixDQUNKLEVDbklPLElBQU1HLEVBQWVDLEVBQUssWUFBWSxDQUN6QyxlQUNBLGtCQUNBLFNBQ0EsZ0JBQ0EsOEJBQ0EscUJBQ0Esb0JBQ0Esb0JBQ0Esc0JBQ0EsZUFDQSxpQkFDQSxZQUNBLFVBQ0EsNkJBQ0Esa0JBQ0EsWUFDSixDQUFDLEVBQ1lDLEdBQWlCQyxHQUNiLEtBQUssVUFBVUEsRUFBSyxLQUFNLENBQUMsRUFDNUIsUUFBUSxjQUFlLEtBQUssRUFFL0JDLEVBQU4sTUFBTUMsVUFBaUIsS0FBTSxDQUNoQyxJQUFJLFFBQVMsQ0FDVCxPQUFPLEtBQUssTUFDaEIsQ0FDQSxZQUFZQyxFQUFRLENBQ2hCLE1BQU0sRUFDTixLQUFLLE9BQVMsQ0FBQyxFQUNmLEtBQUssU0FBWUMsR0FBUSxDQUNyQixLQUFLLE9BQVMsQ0FBQyxHQUFHLEtBQUssT0FBUUEsQ0FBRyxDQUN0QyxFQUNBLEtBQUssVUFBWSxDQUFDQyxFQUFPLENBQUMsSUFBTSxDQUM1QixLQUFLLE9BQVMsQ0FBQyxHQUFHLEtBQUssT0FBUSxHQUFHQSxDQUFJLENBQzFDLEVBQ0EsSUFBTUMsRUFBYyxXQUFXLFVBQzNCLE9BQU8sZUFFUCxPQUFPLGVBQWUsS0FBTUEsQ0FBVyxFQUd2QyxLQUFLLFVBQVlBLEVBRXJCLEtBQUssS0FBTyxXQUNaLEtBQUssT0FBU0gsQ0FDbEIsQ0FDQSxPQUFPSSxFQUFTLENBQ1osSUFBTUMsRUFBU0QsR0FDWCxTQUFVRSxFQUFPLENBQ2IsT0FBT0EsRUFBTSxPQUNqQixFQUNFQyxFQUFjLENBQUUsUUFBUyxDQUFDLENBQUUsRUFDNUJDLEVBQWdCQyxHQUFVLENBQzVCLFFBQVdILEtBQVNHLEVBQU0sT0FDdEIsR0FBSUgsRUFBTSxPQUFTLGdCQUNmQSxFQUFNLFlBQVksSUFBSUUsQ0FBWSxVQUU3QkYsRUFBTSxPQUFTLHNCQUNwQkUsRUFBYUYsRUFBTSxlQUFlLFVBRTdCQSxFQUFNLE9BQVMsb0JBQ3BCRSxFQUFhRixFQUFNLGNBQWMsVUFFNUJBLEVBQU0sS0FBSyxTQUFXLEVBQzNCQyxFQUFZLFFBQVEsS0FBS0YsRUFBT0MsQ0FBSyxDQUFDLE1BRXJDLENBQ0QsSUFBSUksRUFBT0gsRUFDUEksRUFBSSxFQUNSLEtBQU9BLEVBQUlMLEVBQU0sS0FBSyxRQUFRLENBQzFCLElBQU1NLEVBQUtOLEVBQU0sS0FBS0ssQ0FBQyxFQUNOQSxJQUFNTCxFQUFNLEtBQUssT0FBUyxHQVl2Q0ksRUFBS0UsQ0FBRSxFQUFJRixFQUFLRSxDQUFFLEdBQUssQ0FBRSxRQUFTLENBQUMsQ0FBRSxFQUNyQ0YsRUFBS0UsQ0FBRSxFQUFFLFFBQVEsS0FBS1AsRUFBT0MsQ0FBSyxDQUFDLEdBWG5DSSxFQUFLRSxDQUFFLEVBQUlGLEVBQUtFLENBQUUsR0FBSyxDQUFFLFFBQVMsQ0FBQyxDQUFFLEVBYXpDRixFQUFPQSxFQUFLRSxDQUFFLEVBQ2RELEdBQ0osQ0FDSixDQUVSLEVBQ0EsT0FBQUgsRUFBYSxJQUFJLEVBQ1ZELENBQ1gsQ0FDQSxPQUFPLE9BQU9NLEVBQU8sQ0FDakIsR0FBSSxFQUFFQSxhQUFpQmQsR0FDbkIsTUFBTSxJQUFJLE1BQU0sbUJBQW1CYyxDQUFLLEVBQUUsQ0FFbEQsQ0FDQSxVQUFXLENBQ1AsT0FBTyxLQUFLLE9BQ2hCLENBQ0EsSUFBSSxTQUFVLENBQ1YsT0FBTyxLQUFLLFVBQVUsS0FBSyxPQUFRbEIsRUFBSyxzQkFBdUIsQ0FBQyxDQUNwRSxDQUNBLElBQUksU0FBVSxDQUNWLE9BQU8sS0FBSyxPQUFPLFNBQVcsQ0FDbEMsQ0FDQSxRQUFRVSxFQUFVQyxHQUFVQSxFQUFNLFFBQVMsQ0FDdkMsSUFBTUMsRUFBYyxDQUFDLEVBQ2ZPLEVBQWEsQ0FBQyxFQUNwQixRQUFXYixLQUFPLEtBQUssT0FDbkIsR0FBSUEsRUFBSSxLQUFLLE9BQVMsRUFBRyxDQUNyQixJQUFNYyxFQUFVZCxFQUFJLEtBQUssQ0FBQyxFQUMxQk0sRUFBWVEsQ0FBTyxFQUFJUixFQUFZUSxDQUFPLEdBQUssQ0FBQyxFQUNoRFIsRUFBWVEsQ0FBTyxFQUFFLEtBQUtWLEVBQU9KLENBQUcsQ0FBQyxDQUN6QyxNQUVJYSxFQUFXLEtBQUtULEVBQU9KLENBQUcsQ0FBQyxFQUduQyxNQUFPLENBQUUsV0FBQWEsRUFBWSxZQUFBUCxDQUFZLENBQ3JDLENBQ0EsSUFBSSxZQUFhLENBQ2IsT0FBTyxLQUFLLFFBQVEsQ0FDeEIsQ0FDSixFQUNBVCxFQUFTLE9BQVVFLEdBQ0QsSUFBSUYsRUFBU0UsQ0FBTSxFQ2hJckMsSUFBTWdCLEdBQVcsQ0FBQ0MsRUFBT0MsSUFBUyxDQUM5QixJQUFJQyxFQUNKLE9BQVFGLEVBQU0sS0FBTSxDQUNoQixLQUFLRyxFQUFhLGFBQ1ZILEVBQU0sV0FBYUksRUFBYyxVQUNqQ0YsRUFBVSxXQUdWQSxFQUFVLFlBQVlGLEVBQU0sUUFBUSxjQUFjQSxFQUFNLFFBQVEsR0FFcEUsTUFDSixLQUFLRyxFQUFhLGdCQUNkRCxFQUFVLG1DQUFtQyxLQUFLLFVBQVVGLEVBQU0sU0FBVUssRUFBSyxxQkFBcUIsQ0FBQyxHQUN2RyxNQUNKLEtBQUtGLEVBQWEsa0JBQ2RELEVBQVUsa0NBQWtDRyxFQUFLLFdBQVdMLEVBQU0sS0FBTSxJQUFJLENBQUMsR0FDN0UsTUFDSixLQUFLRyxFQUFhLGNBQ2RELEVBQVUsZ0JBQ1YsTUFDSixLQUFLQyxFQUFhLDRCQUNkRCxFQUFVLHlDQUF5Q0csRUFBSyxXQUFXTCxFQUFNLE9BQU8sQ0FBQyxHQUNqRixNQUNKLEtBQUtHLEVBQWEsbUJBQ2RELEVBQVUsZ0NBQWdDRyxFQUFLLFdBQVdMLEVBQU0sT0FBTyxDQUFDLGVBQWVBLEVBQU0sUUFBUSxJQUNyRyxNQUNKLEtBQUtHLEVBQWEsa0JBQ2RELEVBQVUsNkJBQ1YsTUFDSixLQUFLQyxFQUFhLG9CQUNkRCxFQUFVLCtCQUNWLE1BQ0osS0FBS0MsRUFBYSxhQUNkRCxFQUFVLGVBQ1YsTUFDSixLQUFLQyxFQUFhLGVBQ1YsT0FBT0gsRUFBTSxZQUFlLFNBQ3hCLGFBQWNBLEVBQU0sWUFDcEJFLEVBQVUsZ0NBQWdDRixFQUFNLFdBQVcsUUFBUSxJQUMvRCxPQUFPQSxFQUFNLFdBQVcsVUFBYSxXQUNyQ0UsRUFBVSxHQUFHQSxDQUFPLHNEQUFzREYsRUFBTSxXQUFXLFFBQVEsS0FHbEcsZUFBZ0JBLEVBQU0sV0FDM0JFLEVBQVUsbUNBQW1DRixFQUFNLFdBQVcsVUFBVSxJQUVuRSxhQUFjQSxFQUFNLFdBQ3pCRSxFQUFVLGlDQUFpQ0YsRUFBTSxXQUFXLFFBQVEsSUFHcEVLLEVBQUssWUFBWUwsRUFBTSxVQUFVLEVBR2hDQSxFQUFNLGFBQWUsUUFDMUJFLEVBQVUsV0FBV0YsRUFBTSxVQUFVLEdBR3JDRSxFQUFVLFVBRWQsTUFDSixLQUFLQyxFQUFhLFVBQ1ZILEVBQU0sT0FBUyxRQUNmRSxFQUFVLHNCQUFzQkYsRUFBTSxNQUFRLFVBQVlBLEVBQU0sVUFBWSxXQUFhLFdBQVcsSUFBSUEsRUFBTSxPQUFPLGNBQ2hIQSxFQUFNLE9BQVMsU0FDcEJFLEVBQVUsdUJBQXVCRixFQUFNLE1BQVEsVUFBWUEsRUFBTSxVQUFZLFdBQWEsTUFBTSxJQUFJQSxFQUFNLE9BQU8sZ0JBQzVHQSxFQUFNLE9BQVMsU0FDcEJFLEVBQVUsa0JBQWtCRixFQUFNLE1BQVEsb0JBQXNCQSxFQUFNLFVBQVksNEJBQThCLGVBQWUsR0FBR0EsRUFBTSxPQUFPLEdBQzFJQSxFQUFNLE9BQVMsU0FDcEJFLEVBQVUsa0JBQWtCRixFQUFNLE1BQVEsb0JBQXNCQSxFQUFNLFVBQVksNEJBQThCLGVBQWUsR0FBR0EsRUFBTSxPQUFPLEdBQzFJQSxFQUFNLE9BQVMsT0FDcEJFLEVBQVUsZ0JBQWdCRixFQUFNLE1BQVEsb0JBQXNCQSxFQUFNLFVBQVksNEJBQThCLGVBQWUsR0FBRyxJQUFJLEtBQUssT0FBT0EsRUFBTSxPQUFPLENBQUMsQ0FBQyxHQUUvSkUsRUFBVSxnQkFDZCxNQUNKLEtBQUtDLEVBQWEsUUFDVkgsRUFBTSxPQUFTLFFBQ2ZFLEVBQVUsc0JBQXNCRixFQUFNLE1BQVEsVUFBWUEsRUFBTSxVQUFZLFVBQVksV0FBVyxJQUFJQSxFQUFNLE9BQU8sY0FDL0dBLEVBQU0sT0FBUyxTQUNwQkUsRUFBVSx1QkFBdUJGLEVBQU0sTUFBUSxVQUFZQSxFQUFNLFVBQVksVUFBWSxPQUFPLElBQUlBLEVBQU0sT0FBTyxnQkFDNUdBLEVBQU0sT0FBUyxTQUNwQkUsRUFBVSxrQkFBa0JGLEVBQU0sTUFBUSxVQUFZQSxFQUFNLFVBQVksd0JBQTBCLFdBQVcsSUFBSUEsRUFBTSxPQUFPLEdBQ3pIQSxFQUFNLE9BQVMsU0FDcEJFLEVBQVUsa0JBQWtCRixFQUFNLE1BQVEsVUFBWUEsRUFBTSxVQUFZLHdCQUEwQixXQUFXLElBQUlBLEVBQU0sT0FBTyxHQUN6SEEsRUFBTSxPQUFTLE9BQ3BCRSxFQUFVLGdCQUFnQkYsRUFBTSxNQUFRLFVBQVlBLEVBQU0sVUFBWSwyQkFBNkIsY0FBYyxJQUFJLElBQUksS0FBSyxPQUFPQSxFQUFNLE9BQU8sQ0FBQyxDQUFDLEdBRXBKRSxFQUFVLGdCQUNkLE1BQ0osS0FBS0MsRUFBYSxPQUNkRCxFQUFVLGdCQUNWLE1BQ0osS0FBS0MsRUFBYSwyQkFDZEQsRUFBVSwyQ0FDVixNQUNKLEtBQUtDLEVBQWEsZ0JBQ2RELEVBQVUsZ0NBQWdDRixFQUFNLFVBQVUsR0FDMUQsTUFDSixLQUFLRyxFQUFhLFdBQ2RELEVBQVUsd0JBQ1YsTUFDSixRQUNJQSxFQUFVRCxFQUFLLGFBQ2ZJLEVBQUssWUFBWUwsQ0FBSyxDQUM5QixDQUNBLE1BQU8sQ0FBRSxRQUFBRSxDQUFRLENBQ3JCLEVBQ09JLEVBQVFQLEdDM0dmLElBQUlRLEdBQW1CQyxFQUVoQixTQUFTQyxHQUFZQyxFQUFLLENBQzdCQyxHQUFtQkQsQ0FDdkIsQ0FDTyxTQUFTRSxJQUFjLENBQzFCLE9BQU9ELEVBQ1gsQ0NOTyxJQUFNRSxHQUFhQyxHQUFXLENBQ2pDLEdBQU0sQ0FBRSxLQUFBQyxFQUFNLEtBQUFDLEVBQU0sVUFBQUMsRUFBVyxVQUFBQyxDQUFVLEVBQUlKLEVBQ3ZDSyxFQUFXLENBQUMsR0FBR0gsRUFBTSxHQUFJRSxFQUFVLE1BQVEsQ0FBQyxDQUFFLEVBQzlDRSxFQUFZLENBQ2QsR0FBR0YsRUFDSCxLQUFNQyxDQUNWLEVBQ0EsR0FBSUQsRUFBVSxVQUFZLE9BQ3RCLE1BQU8sQ0FDSCxHQUFHQSxFQUNILEtBQU1DLEVBQ04sUUFBU0QsRUFBVSxPQUN2QixFQUVKLElBQUlHLEVBQWUsR0FDYkMsRUFBT0wsRUFDUixPQUFRTSxHQUFNLENBQUMsQ0FBQ0EsQ0FBQyxFQUNqQixNQUFNLEVBQ04sUUFBUSxFQUNiLFFBQVdDLEtBQU9GLEVBQ2RELEVBQWVHLEVBQUlKLEVBQVcsQ0FBRSxLQUFBTCxFQUFNLGFBQWNNLENBQWEsQ0FBQyxFQUFFLFFBRXhFLE1BQU8sQ0FDSCxHQUFHSCxFQUNILEtBQU1DLEVBQ04sUUFBU0UsQ0FDYixDQUNKLEVBQ2FJLEdBQWEsQ0FBQyxFQUNwQixTQUFTQyxFQUFrQkMsRUFBS1QsRUFBVyxDQUM5QyxJQUFNVSxFQUFjQyxHQUFZLEVBQzFCQyxFQUFRakIsR0FBVSxDQUNwQixVQUFXSyxFQUNYLEtBQU1TLEVBQUksS0FDVixLQUFNQSxFQUFJLEtBQ1YsVUFBVyxDQUNQQSxFQUFJLE9BQU8sbUJBQ1hBLEVBQUksZUFDSkMsRUFDQUEsSUFBZ0JHLEVBQWtCLE9BQVlBLENBQ2xELEVBQUUsT0FBUUMsR0FBTSxDQUFDLENBQUNBLENBQUMsQ0FDdkIsQ0FBQyxFQUNETCxFQUFJLE9BQU8sT0FBTyxLQUFLRyxDQUFLLENBQ2hDLENBQ08sSUFBTUcsRUFBTixNQUFNQyxDQUFZLENBQ3JCLGFBQWMsQ0FDVixLQUFLLE1BQVEsT0FDakIsQ0FDQSxPQUFRLENBQ0EsS0FBSyxRQUFVLFVBQ2YsS0FBSyxNQUFRLFFBQ3JCLENBQ0EsT0FBUSxDQUNBLEtBQUssUUFBVSxZQUNmLEtBQUssTUFBUSxVQUNyQixDQUNBLE9BQU8sV0FBV0MsRUFBUUMsRUFBUyxDQUMvQixJQUFNQyxFQUFhLENBQUMsRUFDcEIsUUFBV0MsS0FBS0YsRUFBUyxDQUNyQixHQUFJRSxFQUFFLFNBQVcsVUFDYixPQUFPQyxFQUNQRCxFQUFFLFNBQVcsU0FDYkgsRUFBTyxNQUFNLEVBQ2pCRSxFQUFXLEtBQUtDLEVBQUUsS0FBSyxDQUMzQixDQUNBLE1BQU8sQ0FBRSxPQUFRSCxFQUFPLE1BQU8sTUFBT0UsQ0FBVyxDQUNyRCxDQUNBLGFBQWEsaUJBQWlCRixFQUFRSyxFQUFPLENBQ3pDLElBQU1DLEVBQVksQ0FBQyxFQUNuQixRQUFXQyxLQUFRRixFQUFPLENBQ3RCLElBQU1HLEVBQU0sTUFBTUQsRUFBSyxJQUNqQkUsRUFBUSxNQUFNRixFQUFLLE1BQ3pCRCxFQUFVLEtBQUssQ0FDWCxJQUFBRSxFQUNBLE1BQUFDLENBQ0osQ0FBQyxDQUNMLENBQ0EsT0FBT1YsRUFBWSxnQkFBZ0JDLEVBQVFNLENBQVMsQ0FDeEQsQ0FDQSxPQUFPLGdCQUFnQk4sRUFBUUssRUFBTyxDQUNsQyxJQUFNSyxFQUFjLENBQUMsRUFDckIsUUFBV0gsS0FBUUYsRUFBTyxDQUN0QixHQUFNLENBQUUsSUFBQUcsRUFBSyxNQUFBQyxDQUFNLEVBQUlGLEVBR3ZCLEdBRklDLEVBQUksU0FBVyxXQUVmQyxFQUFNLFNBQVcsVUFDakIsT0FBT0wsRUFDUEksRUFBSSxTQUFXLFNBQ2ZSLEVBQU8sTUFBTSxFQUNiUyxFQUFNLFNBQVcsU0FDakJULEVBQU8sTUFBTSxFQUNiUSxFQUFJLFFBQVUsY0FBZ0IsT0FBT0MsRUFBTSxNQUFVLEtBQWVGLEVBQUssYUFDekVHLEVBQVlGLEVBQUksS0FBSyxFQUFJQyxFQUFNLE1BRXZDLENBQ0EsTUFBTyxDQUFFLE9BQVFULEVBQU8sTUFBTyxNQUFPVSxDQUFZLENBQ3RELENBQ0osRUFDYU4sRUFBVSxPQUFPLE9BQU8sQ0FDakMsT0FBUSxTQUNaLENBQUMsRUFDWU8sRUFBU0YsSUFBVyxDQUFFLE9BQVEsUUFBUyxNQUFBQSxDQUFNLEdBQzdDRyxFQUFNSCxJQUFXLENBQUUsT0FBUSxRQUFTLE1BQUFBLENBQU0sR0FDMUNJLEdBQWFoQixHQUFNQSxFQUFFLFNBQVcsVUFDaENpQixHQUFXakIsR0FBTUEsRUFBRSxTQUFXLFFBQzlCa0IsRUFBV2xCLEdBQU1BLEVBQUUsU0FBVyxRQUM5Qm1CLEdBQVduQixHQUFNLE9BQU8sUUFBWSxLQUFlQSxhQUFhLFFDNUd0RSxJQUFJb0IsR0FDVixTQUFVQSxFQUFXLENBQ2xCQSxFQUFVLFNBQVlDLEdBQVksT0FBT0EsR0FBWSxTQUFXLENBQUUsUUFBQUEsQ0FBUSxFQUFJQSxHQUFXLENBQUMsRUFFMUZELEVBQVUsU0FBWUMsR0FBWSxPQUFPQSxHQUFZLFNBQVdBLEVBQVVBLEdBQVMsT0FDdkYsR0FBR0QsSUFBY0EsRUFBWSxDQUFDLEVBQUUsRUNBaEMsSUFBTUUsRUFBTixLQUF5QixDQUNyQixZQUFZQyxFQUFRQyxFQUFPQyxFQUFNQyxFQUFLLENBQ2xDLEtBQUssWUFBYyxDQUFDLEVBQ3BCLEtBQUssT0FBU0gsRUFDZCxLQUFLLEtBQU9DLEVBQ1osS0FBSyxNQUFRQyxFQUNiLEtBQUssS0FBT0MsQ0FDaEIsQ0FDQSxJQUFJLE1BQU8sQ0FDUCxPQUFLLEtBQUssWUFBWSxTQUNkLE1BQU0sUUFBUSxLQUFLLElBQUksRUFDdkIsS0FBSyxZQUFZLEtBQUssR0FBRyxLQUFLLE1BQU8sR0FBRyxLQUFLLElBQUksRUFHakQsS0FBSyxZQUFZLEtBQUssR0FBRyxLQUFLLE1BQU8sS0FBSyxJQUFJLEdBRy9DLEtBQUssV0FDaEIsQ0FDSixFQUNNQyxHQUFlLENBQUNDLEVBQUtDLElBQVcsQ0FDbEMsR0FBSUMsRUFBUUQsQ0FBTSxFQUNkLE1BQU8sQ0FBRSxRQUFTLEdBQU0sS0FBTUEsRUFBTyxLQUFNLEVBRzNDLEdBQUksQ0FBQ0QsRUFBSSxPQUFPLE9BQU8sT0FDbkIsTUFBTSxJQUFJLE1BQU0sMkNBQTJDLEVBRS9ELE1BQU8sQ0FDSCxRQUFTLEdBQ1QsSUFBSSxPQUFRLENBQ1IsR0FBSSxLQUFLLE9BQ0wsT0FBTyxLQUFLLE9BQ2hCLElBQU1HLEVBQVEsSUFBSUMsRUFBU0osRUFBSSxPQUFPLE1BQU0sRUFDNUMsWUFBSyxPQUFTRyxFQUNQLEtBQUssTUFDaEIsQ0FDSixDQUVSLEVBQ0EsU0FBU0UsRUFBb0JDLEVBQVEsQ0FDakMsR0FBSSxDQUFDQSxFQUNELE1BQU8sQ0FBQyxFQUNaLEdBQU0sQ0FBRSxTQUFBQyxFQUFVLG1CQUFBQyxFQUFvQixlQUFBQyxFQUFnQixZQUFBQyxDQUFZLEVBQUlKLEVBQ3RFLEdBQUlDLElBQWFDLEdBQXNCQyxHQUNuQyxNQUFNLElBQUksTUFBTSwwRkFBMEYsRUFFOUcsT0FBSUYsRUFDTyxDQUFFLFNBQVVBLEVBQVUsWUFBQUcsQ0FBWSxFQWF0QyxDQUFFLFNBWlMsQ0FBQ0MsRUFBS1gsSUFBUSxDQUM1QixHQUFNLENBQUUsUUFBQVksQ0FBUSxFQUFJTixFQUNwQixPQUFJSyxFQUFJLE9BQVMscUJBQ04sQ0FBRSxRQUFTQyxHQUFXWixFQUFJLFlBQWEsRUFFOUMsT0FBT0EsRUFBSSxLQUFTLElBQ2IsQ0FBRSxRQUFTWSxHQUFXSCxHQUFrQlQsRUFBSSxZQUFhLEVBRWhFVyxFQUFJLE9BQVMsZUFDTixDQUFFLFFBQVNYLEVBQUksWUFBYSxFQUNoQyxDQUFFLFFBQVNZLEdBQVdKLEdBQXNCUixFQUFJLFlBQWEsQ0FDeEUsRUFDOEIsWUFBQVUsQ0FBWSxDQUM5QyxDQUNPLElBQU1HLEVBQU4sS0FBYyxDQUNqQixJQUFJLGFBQWMsQ0FDZCxPQUFPLEtBQUssS0FBSyxXQUNyQixDQUNBLFNBQVNDLEVBQU8sQ0FDWixPQUFPQyxFQUFjRCxFQUFNLElBQUksQ0FDbkMsQ0FDQSxnQkFBZ0JBLEVBQU9kLEVBQUssQ0FDeEIsT0FBUUEsR0FBTyxDQUNYLE9BQVFjLEVBQU0sT0FBTyxPQUNyQixLQUFNQSxFQUFNLEtBQ1osV0FBWUMsRUFBY0QsRUFBTSxJQUFJLEVBQ3BDLGVBQWdCLEtBQUssS0FBSyxTQUMxQixLQUFNQSxFQUFNLEtBQ1osT0FBUUEsRUFBTSxNQUNsQixDQUNKLENBQ0Esb0JBQW9CQSxFQUFPLENBQ3ZCLE1BQU8sQ0FDSCxPQUFRLElBQUlFLEVBQ1osSUFBSyxDQUNELE9BQVFGLEVBQU0sT0FBTyxPQUNyQixLQUFNQSxFQUFNLEtBQ1osV0FBWUMsRUFBY0QsRUFBTSxJQUFJLEVBQ3BDLGVBQWdCLEtBQUssS0FBSyxTQUMxQixLQUFNQSxFQUFNLEtBQ1osT0FBUUEsRUFBTSxNQUNsQixDQUNKLENBQ0osQ0FDQSxXQUFXQSxFQUFPLENBQ2QsSUFBTWIsRUFBUyxLQUFLLE9BQU9hLENBQUssRUFDaEMsR0FBSUcsR0FBUWhCLENBQU0sRUFDZCxNQUFNLElBQUksTUFBTSx3Q0FBd0MsRUFFNUQsT0FBT0EsQ0FDWCxDQUNBLFlBQVlhLEVBQU8sQ0FDZixJQUFNYixFQUFTLEtBQUssT0FBT2EsQ0FBSyxFQUNoQyxPQUFPLFFBQVEsUUFBUWIsQ0FBTSxDQUNqQyxDQUNBLE1BQU1pQixFQUFNWixFQUFRLENBQ2hCLElBQU1MLEVBQVMsS0FBSyxVQUFVaUIsRUFBTVosQ0FBTSxFQUMxQyxHQUFJTCxFQUFPLFFBQ1AsT0FBT0EsRUFBTyxLQUNsQixNQUFNQSxFQUFPLEtBQ2pCLENBQ0EsVUFBVWlCLEVBQU1aLEVBQVEsQ0FDcEIsSUFBTU4sRUFBTSxDQUNSLE9BQVEsQ0FDSixPQUFRLENBQUMsRUFDVCxNQUFPTSxHQUFRLE9BQVMsR0FDeEIsbUJBQW9CQSxHQUFRLFFBQ2hDLEVBQ0EsS0FBTUEsR0FBUSxNQUFRLENBQUMsRUFDdkIsZUFBZ0IsS0FBSyxLQUFLLFNBQzFCLE9BQVEsS0FDUixLQUFBWSxFQUNBLFdBQVlILEVBQWNHLENBQUksQ0FDbEMsRUFDTWpCLEVBQVMsS0FBSyxXQUFXLENBQUUsS0FBQWlCLEVBQU0sS0FBTWxCLEVBQUksS0FBTSxPQUFRQSxDQUFJLENBQUMsRUFDcEUsT0FBT0QsR0FBYUMsRUFBS0MsQ0FBTSxDQUNuQyxDQUNBLFlBQVlpQixFQUFNLENBQ2QsSUFBTWxCLEVBQU0sQ0FDUixPQUFRLENBQ0osT0FBUSxDQUFDLEVBQ1QsTUFBTyxDQUFDLENBQUMsS0FBSyxXQUFXLEVBQUUsS0FDL0IsRUFDQSxLQUFNLENBQUMsRUFDUCxlQUFnQixLQUFLLEtBQUssU0FDMUIsT0FBUSxLQUNSLEtBQUFrQixFQUNBLFdBQVlILEVBQWNHLENBQUksQ0FDbEMsRUFDQSxHQUFJLENBQUMsS0FBSyxXQUFXLEVBQUUsTUFDbkIsR0FBSSxDQUNBLElBQU1qQixFQUFTLEtBQUssV0FBVyxDQUFFLEtBQUFpQixFQUFNLEtBQU0sQ0FBQyxFQUFHLE9BQVFsQixDQUFJLENBQUMsRUFDOUQsT0FBT0UsRUFBUUQsQ0FBTSxFQUNmLENBQ0UsTUFBT0EsRUFBTyxLQUNsQixFQUNFLENBQ0UsT0FBUUQsRUFBSSxPQUFPLE1BQ3ZCLENBQ1IsT0FDT21CLEVBQUssQ0FDSkEsR0FBSyxTQUFTLFlBQVksR0FBRyxTQUFTLGFBQWEsSUFDbkQsS0FBSyxXQUFXLEVBQUUsTUFBUSxJQUU5Qm5CLEVBQUksT0FBUyxDQUNULE9BQVEsQ0FBQyxFQUNULE1BQU8sRUFDWCxDQUNKLENBRUosT0FBTyxLQUFLLFlBQVksQ0FBRSxLQUFBa0IsRUFBTSxLQUFNLENBQUMsRUFBRyxPQUFRbEIsQ0FBSSxDQUFDLEVBQUUsS0FBTUMsR0FBV0MsRUFBUUQsQ0FBTSxFQUNsRixDQUNFLE1BQU9BLEVBQU8sS0FDbEIsRUFDRSxDQUNFLE9BQVFELEVBQUksT0FBTyxNQUN2QixDQUFDLENBQ1QsQ0FDQSxNQUFNLFdBQVdrQixFQUFNWixFQUFRLENBQzNCLElBQU1MLEVBQVMsTUFBTSxLQUFLLGVBQWVpQixFQUFNWixDQUFNLEVBQ3JELEdBQUlMLEVBQU8sUUFDUCxPQUFPQSxFQUFPLEtBQ2xCLE1BQU1BLEVBQU8sS0FDakIsQ0FDQSxNQUFNLGVBQWVpQixFQUFNWixFQUFRLENBQy9CLElBQU1OLEVBQU0sQ0FDUixPQUFRLENBQ0osT0FBUSxDQUFDLEVBQ1QsbUJBQW9CTSxHQUFRLFNBQzVCLE1BQU8sRUFDWCxFQUNBLEtBQU1BLEdBQVEsTUFBUSxDQUFDLEVBQ3ZCLGVBQWdCLEtBQUssS0FBSyxTQUMxQixPQUFRLEtBQ1IsS0FBQVksRUFDQSxXQUFZSCxFQUFjRyxDQUFJLENBQ2xDLEVBQ01FLEVBQW1CLEtBQUssT0FBTyxDQUFFLEtBQUFGLEVBQU0sS0FBTWxCLEVBQUksS0FBTSxPQUFRQSxDQUFJLENBQUMsRUFDcEVDLEVBQVMsTUFBT2dCLEdBQVFHLENBQWdCLEVBQUlBLEVBQW1CLFFBQVEsUUFBUUEsQ0FBZ0IsR0FDckcsT0FBT3JCLEdBQWFDLEVBQUtDLENBQU0sQ0FDbkMsQ0FDQSxPQUFPb0IsRUFBT1QsRUFBUyxDQUNuQixJQUFNVSxFQUFzQkMsR0FDcEIsT0FBT1gsR0FBWSxVQUFZLE9BQU9BLEVBQVksSUFDM0MsQ0FBRSxRQUFBQSxDQUFRLEVBRVosT0FBT0EsR0FBWSxXQUNqQkEsRUFBUVcsQ0FBRyxFQUdYWCxFQUdmLE9BQU8sS0FBSyxZQUFZLENBQUNXLEVBQUt2QixJQUFRLENBQ2xDLElBQU1DLEVBQVNvQixFQUFNRSxDQUFHLEVBQ2xCQyxFQUFXLElBQU14QixFQUFJLFNBQVMsQ0FDaEMsS0FBTXlCLEVBQWEsT0FDbkIsR0FBR0gsRUFBbUJDLENBQUcsQ0FDN0IsQ0FBQyxFQUNELE9BQUksT0FBTyxRQUFZLEtBQWV0QixhQUFrQixRQUM3Q0EsRUFBTyxLQUFNaUIsR0FDWEEsRUFLTSxJQUpQTSxFQUFTLEVBQ0YsR0FLZCxFQUVBdkIsRUFLTSxJQUpQdUIsRUFBUyxFQUNGLEdBS2YsQ0FBQyxDQUNMLENBQ0EsV0FBV0gsRUFBT0ssRUFBZ0IsQ0FDOUIsT0FBTyxLQUFLLFlBQVksQ0FBQ0gsRUFBS3ZCLElBQ3JCcUIsRUFBTUUsQ0FBRyxFQUtILElBSlB2QixFQUFJLFNBQVMsT0FBTzBCLEdBQW1CLFdBQWFBLEVBQWVILEVBQUt2QixDQUFHLEVBQUkwQixDQUFjLEVBQ3RGLEdBS2QsQ0FDTCxDQUNBLFlBQVlDLEVBQVksQ0FDcEIsT0FBTyxJQUFJQyxFQUFXLENBQ2xCLE9BQVEsS0FDUixTQUFVQyxFQUFzQixXQUNoQyxPQUFRLENBQUUsS0FBTSxhQUFjLFdBQUFGLENBQVcsQ0FDN0MsQ0FBQyxDQUNMLENBQ0EsWUFBWUEsRUFBWSxDQUNwQixPQUFPLEtBQUssWUFBWUEsQ0FBVSxDQUN0QyxDQUNBLFlBQVlHLEVBQUssQ0FFYixLQUFLLElBQU0sS0FBSyxlQUNoQixLQUFLLEtBQU9BLEVBQ1osS0FBSyxNQUFRLEtBQUssTUFBTSxLQUFLLElBQUksRUFDakMsS0FBSyxVQUFZLEtBQUssVUFBVSxLQUFLLElBQUksRUFDekMsS0FBSyxXQUFhLEtBQUssV0FBVyxLQUFLLElBQUksRUFDM0MsS0FBSyxlQUFpQixLQUFLLGVBQWUsS0FBSyxJQUFJLEVBQ25ELEtBQUssSUFBTSxLQUFLLElBQUksS0FBSyxJQUFJLEVBQzdCLEtBQUssT0FBUyxLQUFLLE9BQU8sS0FBSyxJQUFJLEVBQ25DLEtBQUssV0FBYSxLQUFLLFdBQVcsS0FBSyxJQUFJLEVBQzNDLEtBQUssWUFBYyxLQUFLLFlBQVksS0FBSyxJQUFJLEVBQzdDLEtBQUssU0FBVyxLQUFLLFNBQVMsS0FBSyxJQUFJLEVBQ3ZDLEtBQUssU0FBVyxLQUFLLFNBQVMsS0FBSyxJQUFJLEVBQ3ZDLEtBQUssUUFBVSxLQUFLLFFBQVEsS0FBSyxJQUFJLEVBQ3JDLEtBQUssTUFBUSxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQ2pDLEtBQUssUUFBVSxLQUFLLFFBQVEsS0FBSyxJQUFJLEVBQ3JDLEtBQUssR0FBSyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQzNCLEtBQUssSUFBTSxLQUFLLElBQUksS0FBSyxJQUFJLEVBQzdCLEtBQUssVUFBWSxLQUFLLFVBQVUsS0FBSyxJQUFJLEVBQ3pDLEtBQUssTUFBUSxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQ2pDLEtBQUssUUFBVSxLQUFLLFFBQVEsS0FBSyxJQUFJLEVBQ3JDLEtBQUssTUFBUSxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQ2pDLEtBQUssU0FBVyxLQUFLLFNBQVMsS0FBSyxJQUFJLEVBQ3ZDLEtBQUssS0FBTyxLQUFLLEtBQUssS0FBSyxJQUFJLEVBQy9CLEtBQUssU0FBVyxLQUFLLFNBQVMsS0FBSyxJQUFJLEVBQ3ZDLEtBQUssV0FBYSxLQUFLLFdBQVcsS0FBSyxJQUFJLEVBQzNDLEtBQUssV0FBYSxLQUFLLFdBQVcsS0FBSyxJQUFJLEVBQzNDLEtBQUssV0FBVyxFQUFJLENBQ2hCLFFBQVMsRUFDVCxPQUFRLE1BQ1IsU0FBV1osR0FBUyxLQUFLLFdBQVcsRUFBRUEsQ0FBSSxDQUM5QyxDQUNKLENBQ0EsVUFBVyxDQUNQLE9BQU9hLEVBQVksT0FBTyxLQUFNLEtBQUssSUFBSSxDQUM3QyxDQUNBLFVBQVcsQ0FDUCxPQUFPQyxFQUFZLE9BQU8sS0FBTSxLQUFLLElBQUksQ0FDN0MsQ0FDQSxTQUFVLENBQ04sT0FBTyxLQUFLLFNBQVMsRUFBRSxTQUFTLENBQ3BDLENBQ0EsT0FBUSxDQUNKLE9BQU9DLEVBQVMsT0FBTyxJQUFJLENBQy9CLENBQ0EsU0FBVSxDQUNOLE9BQU9DLEVBQVcsT0FBTyxLQUFNLEtBQUssSUFBSSxDQUM1QyxDQUNBLEdBQUdDLEVBQVEsQ0FDUCxPQUFPQyxHQUFTLE9BQU8sQ0FBQyxLQUFNRCxDQUFNLEVBQUcsS0FBSyxJQUFJLENBQ3BELENBQ0EsSUFBSUUsRUFBVSxDQUNWLE9BQU9DLEdBQWdCLE9BQU8sS0FBTUQsRUFBVSxLQUFLLElBQUksQ0FDM0QsQ0FDQSxVQUFVRSxFQUFXLENBQ2pCLE9BQU8sSUFBSVgsRUFBVyxDQUNsQixHQUFHdkIsRUFBb0IsS0FBSyxJQUFJLEVBQ2hDLE9BQVEsS0FDUixTQUFVd0IsRUFBc0IsV0FDaEMsT0FBUSxDQUFFLEtBQU0sWUFBYSxVQUFBVSxDQUFVLENBQzNDLENBQUMsQ0FDTCxDQUNBLFFBQVFULEVBQUssQ0FDVCxJQUFNVSxFQUFtQixPQUFPVixHQUFRLFdBQWFBLEVBQU0sSUFBTUEsRUFDakUsT0FBTyxJQUFJVyxHQUFXLENBQ2xCLEdBQUdwQyxFQUFvQixLQUFLLElBQUksRUFDaEMsVUFBVyxLQUNYLGFBQWNtQyxFQUNkLFNBQVVYLEVBQXNCLFVBQ3BDLENBQUMsQ0FDTCxDQUNBLE9BQVEsQ0FDSixPQUFPLElBQUlhLEdBQVcsQ0FDbEIsU0FBVWIsRUFBc0IsV0FDaEMsS0FBTSxLQUNOLEdBQUd4QixFQUFvQixLQUFLLElBQUksQ0FDcEMsQ0FBQyxDQUNMLENBQ0EsTUFBTXlCLEVBQUssQ0FDUCxJQUFNYSxFQUFpQixPQUFPYixHQUFRLFdBQWFBLEVBQU0sSUFBTUEsRUFDL0QsT0FBTyxJQUFJYyxHQUFTLENBQ2hCLEdBQUd2QyxFQUFvQixLQUFLLElBQUksRUFDaEMsVUFBVyxLQUNYLFdBQVlzQyxFQUNaLFNBQVVkLEVBQXNCLFFBQ3BDLENBQUMsQ0FDTCxDQUNBLFNBQVNuQixFQUFhLENBQ2xCLElBQU1tQyxFQUFPLEtBQUssWUFDbEIsT0FBTyxJQUFJQSxFQUFLLENBQ1osR0FBRyxLQUFLLEtBQ1IsWUFBQW5DLENBQ0osQ0FBQyxDQUNMLENBQ0EsS0FBS29DLEVBQVEsQ0FDVCxPQUFPQyxHQUFZLE9BQU8sS0FBTUQsQ0FBTSxDQUMxQyxDQUNBLFVBQVcsQ0FDUCxPQUFPRSxHQUFZLE9BQU8sSUFBSSxDQUNsQyxDQUNBLFlBQWEsQ0FDVCxPQUFPLEtBQUssVUFBVSxNQUFTLEVBQUUsT0FDckMsQ0FDQSxZQUFhLENBQ1QsT0FBTyxLQUFLLFVBQVUsSUFBSSxFQUFFLE9BQ2hDLENBQ0osRUFDTUMsR0FBWSxpQkFDWkMsR0FBYSxjQUNiQyxHQUFZLDRCQUdaQyxHQUFZLHlGQUNaQyxHQUFjLG9CQUNkQyxHQUFXLG1EQUNYQyxHQUFnQiwyU0FhaEJDLEdBQWEscUZBSWJDLEdBQWMsdURBQ2hCQyxHQUVFQyxHQUFZLHNIQUNaQyxHQUFnQiwySUFHaEJDLEdBQVksd3BCQUNaQyxHQUFnQiwwckJBRWhCQyxHQUFjLG1FQUVkQyxHQUFpQix5RUFNakJDLEdBQWtCLG9NQUNsQkMsR0FBWSxJQUFJLE9BQU8sSUFBSUQsRUFBZSxHQUFHLEVBQ25ELFNBQVNFLEdBQWdCQyxFQUFNLENBQzNCLElBQUlDLEVBQXFCLFdBQ3JCRCxFQUFLLFVBQ0xDLEVBQXFCLEdBQUdBLENBQWtCLFVBQVVELEVBQUssU0FBUyxJQUU3REEsRUFBSyxXQUFhLE9BQ3ZCQyxFQUFxQixHQUFHQSxDQUFrQixjQUU5QyxJQUFNQyxFQUFvQkYsRUFBSyxVQUFZLElBQU0sSUFDakQsTUFBTyw4QkFBOEJDLENBQWtCLElBQUlDLENBQWlCLEVBQ2hGLENBQ0EsU0FBU0MsR0FBVUgsRUFBTSxDQUNyQixPQUFPLElBQUksT0FBTyxJQUFJRCxHQUFnQkMsQ0FBSSxDQUFDLEdBQUcsQ0FDbEQsQ0FFTyxTQUFTSSxHQUFjSixFQUFNLENBQ2hDLElBQUlLLEVBQVEsR0FBR1IsRUFBZSxJQUFJRSxHQUFnQkMsQ0FBSSxDQUFDLEdBQ2pETSxFQUFPLENBQUMsRUFDZCxPQUFBQSxFQUFLLEtBQUtOLEVBQUssTUFBUSxLQUFPLEdBQUcsRUFDN0JBLEVBQUssUUFDTE0sRUFBSyxLQUFLLHNCQUFzQixFQUNwQ0QsRUFBUSxHQUFHQSxDQUFLLElBQUlDLEVBQUssS0FBSyxHQUFHLENBQUMsSUFDM0IsSUFBSSxPQUFPLElBQUlELENBQUssR0FBRyxDQUNsQyxDQUNBLFNBQVNFLEdBQVVDLEVBQUlDLEVBQVMsQ0FJNUIsTUFISyxJQUFBQSxJQUFZLE1BQVEsQ0FBQ0EsSUFBWWxCLEdBQVUsS0FBS2lCLENBQUUsSUFHbERDLElBQVksTUFBUSxDQUFDQSxJQUFZaEIsR0FBVSxLQUFLZSxDQUFFLEVBSTNELENBQ0EsU0FBU0UsR0FBV0MsRUFBS0MsRUFBSyxDQUMxQixHQUFJLENBQUMxQixHQUFTLEtBQUt5QixDQUFHLEVBQ2xCLE1BQU8sR0FDWCxHQUFJLENBQ0EsR0FBTSxDQUFDRSxDQUFNLEVBQUlGLEVBQUksTUFBTSxHQUFHLEVBQzlCLEdBQUksQ0FBQ0UsRUFDRCxNQUFPLEdBRVgsSUFBTUMsRUFBU0QsRUFDVixRQUFRLEtBQU0sR0FBRyxFQUNqQixRQUFRLEtBQU0sR0FBRyxFQUNqQixPQUFPQSxFQUFPLFFBQVcsRUFBS0EsRUFBTyxPQUFTLEdBQU0sRUFBSSxHQUFHLEVBQzFERSxFQUFVLEtBQUssTUFBTSxLQUFLRCxDQUFNLENBQUMsRUFPdkMsTUFOSSxTQUFPQyxHQUFZLFVBQVlBLElBQVksTUFFM0MsUUFBU0EsR0FBV0EsR0FBUyxNQUFRLE9BRXJDLENBQUNBLEVBQVEsS0FFVEgsR0FBT0csRUFBUSxNQUFRSCxFQUcvQixNQUNNLENBQ0YsTUFBTyxFQUNYLENBQ0osQ0FDQSxTQUFTSSxHQUFZUixFQUFJQyxFQUFTLENBSTlCLE1BSEssSUFBQUEsSUFBWSxNQUFRLENBQUNBLElBQVlqQixHQUFjLEtBQUtnQixDQUFFLElBR3REQyxJQUFZLE1BQVEsQ0FBQ0EsSUFBWWYsR0FBYyxLQUFLYyxDQUFFLEVBSS9ELENBQ08sSUFBTVMsRUFBTixNQUFNQyxVQUFrQnpFLENBQVEsQ0FDbkMsT0FBT0MsRUFBTyxDQUtWLEdBSkksS0FBSyxLQUFLLFNBQ1ZBLEVBQU0sS0FBTyxPQUFPQSxFQUFNLElBQUksR0FFZixLQUFLLFNBQVNBLENBQUssSUFDbkJ5RSxFQUFjLE9BQVEsQ0FDckMsSUFBTXZGLEVBQU0sS0FBSyxnQkFBZ0JjLENBQUssRUFDdEMsT0FBQTBFLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxhQUNuQixTQUFVOEQsRUFBYyxPQUN4QixTQUFVdkYsRUFBSSxVQUNsQixDQUFDLEVBQ015RixDQUNYLENBQ0EsSUFBTUMsRUFBUyxJQUFJMUUsRUFDZmhCLEVBQ0osUUFBV3FCLEtBQVMsS0FBSyxLQUFLLE9BQzFCLEdBQUlBLEVBQU0sT0FBUyxNQUNYUCxFQUFNLEtBQUssT0FBU08sRUFBTSxRQUMxQnJCLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsVUFDbkIsUUFBU0osRUFBTSxNQUNmLEtBQU0sU0FDTixVQUFXLEdBQ1gsTUFBTyxHQUNQLFFBQVNBLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLFdBR1pyRSxFQUFNLE9BQVMsTUFDaEJQLEVBQU0sS0FBSyxPQUFTTyxFQUFNLFFBQzFCckIsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxRQUNuQixRQUFTSixFQUFNLE1BQ2YsS0FBTSxTQUNOLFVBQVcsR0FDWCxNQUFPLEdBQ1AsUUFBU0EsRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sV0FHWnJFLEVBQU0sT0FBUyxTQUFVLENBQzlCLElBQU1zRSxFQUFTN0UsRUFBTSxLQUFLLE9BQVNPLEVBQU0sTUFDbkN1RSxFQUFXOUUsRUFBTSxLQUFLLE9BQVNPLEVBQU0sT0FDdkNzRSxHQUFVQyxLQUNWNUYsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNqQzJGLEVBQ0FILEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxRQUNuQixRQUFTSixFQUFNLE1BQ2YsS0FBTSxTQUNOLFVBQVcsR0FDWCxNQUFPLEdBQ1AsUUFBU0EsRUFBTSxPQUNuQixDQUFDLEVBRUl1RSxHQUNMSixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsVUFDbkIsUUFBU0osRUFBTSxNQUNmLEtBQU0sU0FDTixVQUFXLEdBQ1gsTUFBTyxHQUNQLFFBQVNBLEVBQU0sT0FDbkIsQ0FBQyxFQUVMcUUsRUFBTyxNQUFNLEVBRXJCLFNBQ1NyRSxFQUFNLE9BQVMsUUFDZm1DLEdBQVcsS0FBSzFDLEVBQU0sSUFBSSxJQUMzQmQsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixXQUFZLFFBQ1osS0FBTXlCLEVBQWEsZUFDbkIsUUFBU0osRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sV0FHWnJFLEVBQU0sT0FBUyxRQUNmcUMsS0FDREEsR0FBYSxJQUFJLE9BQU9ELEdBQWEsR0FBRyxHQUV2Q0MsR0FBVyxLQUFLNUMsRUFBTSxJQUFJLElBQzNCZCxFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLFdBQVksUUFDWixLQUFNeUIsRUFBYSxlQUNuQixRQUFTSixFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxXQUdackUsRUFBTSxPQUFTLE9BQ2YrQixHQUFVLEtBQUt0QyxFQUFNLElBQUksSUFDMUJkLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsV0FBWSxPQUNaLEtBQU15QixFQUFhLGVBQ25CLFFBQVNKLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLFdBR1pyRSxFQUFNLE9BQVMsU0FDZmdDLEdBQVksS0FBS3ZDLEVBQU0sSUFBSSxJQUM1QmQsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixXQUFZLFNBQ1osS0FBTXlCLEVBQWEsZUFDbkIsUUFBU0osRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sV0FHWnJFLEVBQU0sT0FBUyxPQUNmNEIsR0FBVSxLQUFLbkMsRUFBTSxJQUFJLElBQzFCZCxFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLFdBQVksT0FDWixLQUFNeUIsRUFBYSxlQUNuQixRQUFTSixFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxXQUdackUsRUFBTSxPQUFTLFFBQ2Y2QixHQUFXLEtBQUtwQyxFQUFNLElBQUksSUFDM0JkLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsV0FBWSxRQUNaLEtBQU15QixFQUFhLGVBQ25CLFFBQVNKLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLFdBR1pyRSxFQUFNLE9BQVMsT0FDZjhCLEdBQVUsS0FBS3JDLEVBQU0sSUFBSSxJQUMxQmQsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixXQUFZLE9BQ1osS0FBTXlCLEVBQWEsZUFDbkIsUUFBU0osRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sV0FHWnJFLEVBQU0sT0FBUyxNQUNwQixHQUFJLENBQ0EsSUFBSSxJQUFJUCxFQUFNLElBQUksQ0FDdEIsTUFDTSxDQUNGZCxFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLFdBQVksTUFDWixLQUFNeUIsRUFBYSxlQUNuQixRQUFTSixFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxDQUNqQixNQUVLckUsRUFBTSxPQUFTLFNBQ3BCQSxFQUFNLE1BQU0sVUFBWSxFQUNMQSxFQUFNLE1BQU0sS0FBS1AsRUFBTSxJQUFJLElBRTFDZCxFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLFdBQVksUUFDWixLQUFNeUIsRUFBYSxlQUNuQixRQUFTSixFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxJQUdackUsRUFBTSxPQUFTLE9BQ3BCUCxFQUFNLEtBQU9BLEVBQU0sS0FBSyxLQUFLLEVBRXhCTyxFQUFNLE9BQVMsV0FDZlAsRUFBTSxLQUFLLFNBQVNPLEVBQU0sTUFBT0EsRUFBTSxRQUFRLElBQ2hEckIsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxlQUNuQixXQUFZLENBQUUsU0FBVUosRUFBTSxNQUFPLFNBQVVBLEVBQU0sUUFBUyxFQUM5RCxRQUFTQSxFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLGNBQ3BCUCxFQUFNLEtBQU9BLEVBQU0sS0FBSyxZQUFZLEVBRS9CTyxFQUFNLE9BQVMsY0FDcEJQLEVBQU0sS0FBT0EsRUFBTSxLQUFLLFlBQVksRUFFL0JPLEVBQU0sT0FBUyxhQUNmUCxFQUFNLEtBQUssV0FBV08sRUFBTSxLQUFLLElBQ2xDckIsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxlQUNuQixXQUFZLENBQUUsV0FBWUosRUFBTSxLQUFNLEVBQ3RDLFFBQVNBLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLEdBR1pyRSxFQUFNLE9BQVMsV0FDZlAsRUFBTSxLQUFLLFNBQVNPLEVBQU0sS0FBSyxJQUNoQ3JCLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsZUFDbkIsV0FBWSxDQUFFLFNBQVVKLEVBQU0sS0FBTSxFQUNwQyxRQUFTQSxFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLFdBQ05tRCxHQUFjbkQsQ0FBSyxFQUN0QixLQUFLUCxFQUFNLElBQUksSUFDdEJkLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsZUFDbkIsV0FBWSxXQUNaLFFBQVNKLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLEdBR1pyRSxFQUFNLE9BQVMsT0FDTjZDLEdBQ0gsS0FBS3BELEVBQU0sSUFBSSxJQUN0QmQsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxlQUNuQixXQUFZLE9BQ1osUUFBU0osRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sR0FHWnJFLEVBQU0sT0FBUyxPQUNOa0QsR0FBVWxELENBQUssRUFDbEIsS0FBS1AsRUFBTSxJQUFJLElBQ3RCZCxFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLGVBQ25CLFdBQVksT0FDWixRQUFTSixFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLFdBQ2ZrQyxHQUFjLEtBQUt6QyxFQUFNLElBQUksSUFDOUJkLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsV0FBWSxXQUNaLEtBQU15QixFQUFhLGVBQ25CLFFBQVNKLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLEdBR1pyRSxFQUFNLE9BQVMsS0FDZnNELEdBQVU3RCxFQUFNLEtBQU1PLEVBQU0sT0FBTyxJQUNwQ3JCLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsV0FBWSxLQUNaLEtBQU15QixFQUFhLGVBQ25CLFFBQVNKLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLEdBR1pyRSxFQUFNLE9BQVMsTUFDZnlELEdBQVdoRSxFQUFNLEtBQU1PLEVBQU0sR0FBRyxJQUNqQ3JCLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsV0FBWSxNQUNaLEtBQU15QixFQUFhLGVBQ25CLFFBQVNKLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLEdBR1pyRSxFQUFNLE9BQVMsT0FDZitELEdBQVl0RSxFQUFNLEtBQU1PLEVBQU0sT0FBTyxJQUN0Q3JCLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsV0FBWSxPQUNaLEtBQU15QixFQUFhLGVBQ25CLFFBQVNKLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLEdBR1pyRSxFQUFNLE9BQVMsU0FDZjBDLEdBQVksS0FBS2pELEVBQU0sSUFBSSxJQUM1QmQsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixXQUFZLFNBQ1osS0FBTXlCLEVBQWEsZUFDbkIsUUFBU0osRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sR0FHWnJFLEVBQU0sT0FBUyxZQUNmMkMsR0FBZSxLQUFLbEQsRUFBTSxJQUFJLElBQy9CZCxFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLFdBQVksWUFDWixLQUFNeUIsRUFBYSxlQUNuQixRQUFTSixFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUlqQkcsRUFBSyxZQUFZeEUsQ0FBSyxFQUc5QixNQUFPLENBQUUsT0FBUXFFLEVBQU8sTUFBTyxNQUFPNUUsRUFBTSxJQUFLLENBQ3JELENBQ0EsT0FBTzJELEVBQU9xQixFQUFZbEYsRUFBUyxDQUMvQixPQUFPLEtBQUssV0FBWU0sR0FBU3VELEVBQU0sS0FBS3ZELENBQUksRUFBRyxDQUMvQyxXQUFBNEUsRUFDQSxLQUFNckUsRUFBYSxlQUNuQixHQUFHc0UsRUFBVSxTQUFTbkYsQ0FBTyxDQUNqQyxDQUFDLENBQ0wsQ0FDQSxVQUFVUyxFQUFPLENBQ2IsT0FBTyxJQUFJaUUsRUFBVSxDQUNqQixHQUFHLEtBQUssS0FDUixPQUFRLENBQUMsR0FBRyxLQUFLLEtBQUssT0FBUWpFLENBQUssQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsTUFBTVQsRUFBUyxDQUNYLE9BQU8sS0FBSyxVQUFVLENBQUUsS0FBTSxRQUFTLEdBQUdtRixFQUFVLFNBQVNuRixDQUFPLENBQUUsQ0FBQyxDQUMzRSxDQUNBLElBQUlBLEVBQVMsQ0FDVCxPQUFPLEtBQUssVUFBVSxDQUFFLEtBQU0sTUFBTyxHQUFHbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUFFLENBQUMsQ0FDekUsQ0FDQSxNQUFNQSxFQUFTLENBQ1gsT0FBTyxLQUFLLFVBQVUsQ0FBRSxLQUFNLFFBQVMsR0FBR21GLEVBQVUsU0FBU25GLENBQU8sQ0FBRSxDQUFDLENBQzNFLENBQ0EsS0FBS0EsRUFBUyxDQUNWLE9BQU8sS0FBSyxVQUFVLENBQUUsS0FBTSxPQUFRLEdBQUdtRixFQUFVLFNBQVNuRixDQUFPLENBQUUsQ0FBQyxDQUMxRSxDQUNBLE9BQU9BLEVBQVMsQ0FDWixPQUFPLEtBQUssVUFBVSxDQUFFLEtBQU0sU0FBVSxHQUFHbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUFFLENBQUMsQ0FDNUUsQ0FDQSxLQUFLQSxFQUFTLENBQ1YsT0FBTyxLQUFLLFVBQVUsQ0FBRSxLQUFNLE9BQVEsR0FBR21GLEVBQVUsU0FBU25GLENBQU8sQ0FBRSxDQUFDLENBQzFFLENBQ0EsTUFBTUEsRUFBUyxDQUNYLE9BQU8sS0FBSyxVQUFVLENBQUUsS0FBTSxRQUFTLEdBQUdtRixFQUFVLFNBQVNuRixDQUFPLENBQUUsQ0FBQyxDQUMzRSxDQUNBLEtBQUtBLEVBQVMsQ0FDVixPQUFPLEtBQUssVUFBVSxDQUFFLEtBQU0sT0FBUSxHQUFHbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUFFLENBQUMsQ0FDMUUsQ0FDQSxPQUFPQSxFQUFTLENBQ1osT0FBTyxLQUFLLFVBQVUsQ0FBRSxLQUFNLFNBQVUsR0FBR21GLEVBQVUsU0FBU25GLENBQU8sQ0FBRSxDQUFDLENBQzVFLENBQ0EsVUFBVUEsRUFBUyxDQUVmLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sWUFDTixHQUFHbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUNqQyxDQUFDLENBQ0wsQ0FDQSxJQUFJb0YsRUFBUyxDQUNULE9BQU8sS0FBSyxVQUFVLENBQUUsS0FBTSxNQUFPLEdBQUdELEVBQVUsU0FBU0MsQ0FBTyxDQUFFLENBQUMsQ0FDekUsQ0FDQSxHQUFHQSxFQUFTLENBQ1IsT0FBTyxLQUFLLFVBQVUsQ0FBRSxLQUFNLEtBQU0sR0FBR0QsRUFBVSxTQUFTQyxDQUFPLENBQUUsQ0FBQyxDQUN4RSxDQUNBLEtBQUtBLEVBQVMsQ0FDVixPQUFPLEtBQUssVUFBVSxDQUFFLEtBQU0sT0FBUSxHQUFHRCxFQUFVLFNBQVNDLENBQU8sQ0FBRSxDQUFDLENBQzFFLENBQ0EsU0FBU0EsRUFBUyxDQUNkLE9BQUksT0FBT0EsR0FBWSxTQUNaLEtBQUssVUFBVSxDQUNsQixLQUFNLFdBQ04sVUFBVyxLQUNYLE9BQVEsR0FDUixNQUFPLEdBQ1AsUUFBU0EsQ0FDYixDQUFDLEVBRUUsS0FBSyxVQUFVLENBQ2xCLEtBQU0sV0FDTixVQUFXLE9BQU9BLEdBQVMsVUFBYyxJQUFjLEtBQU9BLEdBQVMsVUFDdkUsT0FBUUEsR0FBUyxRQUFVLEdBQzNCLE1BQU9BLEdBQVMsT0FBUyxHQUN6QixHQUFHRCxFQUFVLFNBQVNDLEdBQVMsT0FBTyxDQUMxQyxDQUFDLENBQ0wsQ0FDQSxLQUFLcEYsRUFBUyxDQUNWLE9BQU8sS0FBSyxVQUFVLENBQUUsS0FBTSxPQUFRLFFBQUFBLENBQVEsQ0FBQyxDQUNuRCxDQUNBLEtBQUtvRixFQUFTLENBQ1YsT0FBSSxPQUFPQSxHQUFZLFNBQ1osS0FBSyxVQUFVLENBQ2xCLEtBQU0sT0FDTixVQUFXLEtBQ1gsUUFBU0EsQ0FDYixDQUFDLEVBRUUsS0FBSyxVQUFVLENBQ2xCLEtBQU0sT0FDTixVQUFXLE9BQU9BLEdBQVMsVUFBYyxJQUFjLEtBQU9BLEdBQVMsVUFDdkUsR0FBR0QsRUFBVSxTQUFTQyxHQUFTLE9BQU8sQ0FDMUMsQ0FBQyxDQUNMLENBQ0EsU0FBU3BGLEVBQVMsQ0FDZCxPQUFPLEtBQUssVUFBVSxDQUFFLEtBQU0sV0FBWSxHQUFHbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUFFLENBQUMsQ0FDOUUsQ0FDQSxNQUFNNkQsRUFBTzdELEVBQVMsQ0FDbEIsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxRQUNOLE1BQU82RCxFQUNQLEdBQUdzQixFQUFVLFNBQVNuRixDQUFPLENBQ2pDLENBQUMsQ0FDTCxDQUNBLFNBQVNoQixFQUFPb0csRUFBUyxDQUNyQixPQUFPLEtBQUssVUFBVSxDQUNsQixLQUFNLFdBQ04sTUFBT3BHLEVBQ1AsU0FBVW9HLEdBQVMsU0FDbkIsR0FBR0QsRUFBVSxTQUFTQyxHQUFTLE9BQU8sQ0FDMUMsQ0FBQyxDQUNMLENBQ0EsV0FBV3BHLEVBQU9nQixFQUFTLENBQ3ZCLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sYUFDTixNQUFPaEIsRUFDUCxHQUFHbUcsRUFBVSxTQUFTbkYsQ0FBTyxDQUNqQyxDQUFDLENBQ0wsQ0FDQSxTQUFTaEIsRUFBT2dCLEVBQVMsQ0FDckIsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxXQUNOLE1BQU9oQixFQUNQLEdBQUdtRyxFQUFVLFNBQVNuRixDQUFPLENBQ2pDLENBQUMsQ0FDTCxDQUNBLElBQUlxRixFQUFXckYsRUFBUyxDQUNwQixPQUFPLEtBQUssVUFBVSxDQUNsQixLQUFNLE1BQ04sTUFBT3FGLEVBQ1AsR0FBR0YsRUFBVSxTQUFTbkYsQ0FBTyxDQUNqQyxDQUFDLENBQ0wsQ0FDQSxJQUFJc0YsRUFBV3RGLEVBQVMsQ0FDcEIsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxNQUNOLE1BQU9zRixFQUNQLEdBQUdILEVBQVUsU0FBU25GLENBQU8sQ0FDakMsQ0FBQyxDQUNMLENBQ0EsT0FBT3VGLEVBQUt2RixFQUFTLENBQ2pCLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sU0FDTixNQUFPdUYsRUFDUCxHQUFHSixFQUFVLFNBQVNuRixDQUFPLENBQ2pDLENBQUMsQ0FDTCxDQUlBLFNBQVNBLEVBQVMsQ0FDZCxPQUFPLEtBQUssSUFBSSxFQUFHbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUFDLENBQ2xELENBQ0EsTUFBTyxDQUNILE9BQU8sSUFBSTBFLEVBQVUsQ0FDakIsR0FBRyxLQUFLLEtBQ1IsT0FBUSxDQUFDLEdBQUcsS0FBSyxLQUFLLE9BQVEsQ0FBRSxLQUFNLE1BQU8sQ0FBQyxDQUNsRCxDQUFDLENBQ0wsQ0FDQSxhQUFjLENBQ1YsT0FBTyxJQUFJQSxFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLE9BQVEsQ0FBQyxHQUFHLEtBQUssS0FBSyxPQUFRLENBQUUsS0FBTSxhQUFjLENBQUMsQ0FDekQsQ0FBQyxDQUNMLENBQ0EsYUFBYyxDQUNWLE9BQU8sSUFBSUEsRUFBVSxDQUNqQixHQUFHLEtBQUssS0FDUixPQUFRLENBQUMsR0FBRyxLQUFLLEtBQUssT0FBUSxDQUFFLEtBQU0sYUFBYyxDQUFDLENBQ3pELENBQUMsQ0FDTCxDQUNBLElBQUksWUFBYSxDQUNiLE1BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQU1jLEdBQU9BLEVBQUcsT0FBUyxVQUFVLENBQ2pFLENBQ0EsSUFBSSxRQUFTLENBQ1QsTUFBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBTUEsR0FBT0EsRUFBRyxPQUFTLE1BQU0sQ0FDN0QsQ0FDQSxJQUFJLFFBQVMsQ0FDVCxNQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFNQSxHQUFPQSxFQUFHLE9BQVMsTUFBTSxDQUM3RCxDQUNBLElBQUksWUFBYSxDQUNiLE1BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQU1BLEdBQU9BLEVBQUcsT0FBUyxVQUFVLENBQ2pFLENBQ0EsSUFBSSxTQUFVLENBQ1YsTUFBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBTUEsR0FBT0EsRUFBRyxPQUFTLE9BQU8sQ0FDOUQsQ0FDQSxJQUFJLE9BQVEsQ0FDUixNQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFNQSxHQUFPQSxFQUFHLE9BQVMsS0FBSyxDQUM1RCxDQUNBLElBQUksU0FBVSxDQUNWLE1BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQU1BLEdBQU9BLEVBQUcsT0FBUyxPQUFPLENBQzlELENBQ0EsSUFBSSxRQUFTLENBQ1QsTUFBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBTUEsR0FBT0EsRUFBRyxPQUFTLE1BQU0sQ0FDN0QsQ0FDQSxJQUFJLFVBQVcsQ0FDWCxNQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFNQSxHQUFPQSxFQUFHLE9BQVMsUUFBUSxDQUMvRCxDQUNBLElBQUksUUFBUyxDQUNULE1BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQU1BLEdBQU9BLEVBQUcsT0FBUyxNQUFNLENBQzdELENBQ0EsSUFBSSxTQUFVLENBQ1YsTUFBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBTUEsR0FBT0EsRUFBRyxPQUFTLE9BQU8sQ0FDOUQsQ0FDQSxJQUFJLFFBQVMsQ0FDVCxNQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFNQSxHQUFPQSxFQUFHLE9BQVMsTUFBTSxDQUM3RCxDQUNBLElBQUksTUFBTyxDQUNQLE1BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQU1BLEdBQU9BLEVBQUcsT0FBUyxJQUFJLENBQzNELENBQ0EsSUFBSSxRQUFTLENBQ1QsTUFBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBTUEsR0FBT0EsRUFBRyxPQUFTLE1BQU0sQ0FDN0QsQ0FDQSxJQUFJLFVBQVcsQ0FDWCxNQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFNQSxHQUFPQSxFQUFHLE9BQVMsUUFBUSxDQUMvRCxDQUNBLElBQUksYUFBYyxDQUVkLE1BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQU1BLEdBQU9BLEVBQUcsT0FBUyxXQUFXLENBQ2xFLENBQ0EsSUFBSSxXQUFZLENBQ1osSUFBSUMsRUFBTSxLQUNWLFFBQVdELEtBQU0sS0FBSyxLQUFLLE9BQ25CQSxFQUFHLE9BQVMsUUFDUkMsSUFBUSxNQUFRRCxFQUFHLE1BQVFDLEtBQzNCQSxFQUFNRCxFQUFHLE9BR3JCLE9BQU9DLENBQ1gsQ0FDQSxJQUFJLFdBQVksQ0FDWixJQUFJQyxFQUFNLEtBQ1YsUUFBV0YsS0FBTSxLQUFLLEtBQUssT0FDbkJBLEVBQUcsT0FBUyxRQUNSRSxJQUFRLE1BQVFGLEVBQUcsTUFBUUUsS0FDM0JBLEVBQU1GLEVBQUcsT0FHckIsT0FBT0UsQ0FDWCxDQUNKLEVBQ0FqQixFQUFVLE9BQVUvRSxHQUNULElBQUkrRSxFQUFVLENBQ2pCLE9BQVEsQ0FBQyxFQUNULFNBQVV4RCxFQUFzQixVQUNoQyxPQUFRdkIsR0FBUSxRQUFVLEdBQzFCLEdBQUdELEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFHTCxTQUFTaUcsR0FBbUJoRixFQUFLaUYsRUFBTSxDQUNuQyxJQUFNQyxHQUFlbEYsRUFBSSxTQUFTLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFLLElBQUksT0FDbkRtRixHQUFnQkYsRUFBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFLLElBQUksT0FDckRHLEVBQVdGLEVBQWNDLEVBQWVELEVBQWNDLEVBQ3RERSxFQUFTLE9BQU8sU0FBU3JGLEVBQUksUUFBUW9GLENBQVEsRUFBRSxRQUFRLElBQUssRUFBRSxDQUFDLEVBQy9ERSxFQUFVLE9BQU8sU0FBU0wsRUFBSyxRQUFRRyxDQUFRLEVBQUUsUUFBUSxJQUFLLEVBQUUsQ0FBQyxFQUN2RSxPQUFRQyxFQUFTQyxFQUFXLElBQU1GLENBQ3RDLENBQ08sSUFBTUcsR0FBTixNQUFNQyxVQUFrQmxHLENBQVEsQ0FDbkMsYUFBYyxDQUNWLE1BQU0sR0FBRyxTQUFTLEVBQ2xCLEtBQUssSUFBTSxLQUFLLElBQ2hCLEtBQUssSUFBTSxLQUFLLElBQ2hCLEtBQUssS0FBTyxLQUFLLFVBQ3JCLENBQ0EsT0FBT0MsRUFBTyxDQUtWLEdBSkksS0FBSyxLQUFLLFNBQ1ZBLEVBQU0sS0FBTyxPQUFPQSxFQUFNLElBQUksR0FFZixLQUFLLFNBQVNBLENBQUssSUFDbkJ5RSxFQUFjLE9BQVEsQ0FDckMsSUFBTXZGLEVBQU0sS0FBSyxnQkFBZ0JjLENBQUssRUFDdEMsT0FBQTBFLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxhQUNuQixTQUFVOEQsRUFBYyxPQUN4QixTQUFVdkYsRUFBSSxVQUNsQixDQUFDLEVBQ015RixDQUNYLENBQ0EsSUFBSXpGLEVBQ0UwRixFQUFTLElBQUkxRSxFQUNuQixRQUFXSyxLQUFTLEtBQUssS0FBSyxPQUN0QkEsRUFBTSxPQUFTLE1BQ1Z3RSxFQUFLLFVBQVUvRSxFQUFNLElBQUksSUFDMUJkLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVSxVQUNWLFNBQVUsUUFDVixRQUFTSixFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLE9BQ0hBLEVBQU0sVUFBWVAsRUFBTSxLQUFPTyxFQUFNLE1BQVFQLEVBQU0sTUFBUU8sRUFBTSxTQUU5RXJCLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsVUFDbkIsUUFBU0osRUFBTSxNQUNmLEtBQU0sU0FDTixVQUFXQSxFQUFNLFVBQ2pCLE1BQU8sR0FDUCxRQUFTQSxFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLE9BQ0xBLEVBQU0sVUFBWVAsRUFBTSxLQUFPTyxFQUFNLE1BQVFQLEVBQU0sTUFBUU8sRUFBTSxTQUU1RXJCLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsUUFDbkIsUUFBU0osRUFBTSxNQUNmLEtBQU0sU0FDTixVQUFXQSxFQUFNLFVBQ2pCLE1BQU8sR0FDUCxRQUFTQSxFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLGFBQ2hCa0YsR0FBbUJ6RixFQUFNLEtBQU1PLEVBQU0sS0FBSyxJQUFNLElBQ2hEckIsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxnQkFDbkIsV0FBWUosRUFBTSxNQUNsQixRQUFTQSxFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLFNBQ2YsT0FBTyxTQUFTUCxFQUFNLElBQUksSUFDM0JkLEVBQU0sS0FBSyxnQkFBZ0JjLEVBQU9kLENBQUcsRUFDckN3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsV0FDbkIsUUFBU0osRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sR0FJakJHLEVBQUssWUFBWXhFLENBQUssRUFHOUIsTUFBTyxDQUFFLE9BQVFxRSxFQUFPLE1BQU8sTUFBTzVFLEVBQU0sSUFBSyxDQUNyRCxDQUNBLElBQUlsQixFQUFPZ0IsRUFBUyxDQUNoQixPQUFPLEtBQUssU0FBUyxNQUFPaEIsRUFBTyxHQUFNbUcsRUFBVSxTQUFTbkYsQ0FBTyxDQUFDLENBQ3hFLENBQ0EsR0FBR2hCLEVBQU9nQixFQUFTLENBQ2YsT0FBTyxLQUFLLFNBQVMsTUFBT2hCLEVBQU8sR0FBT21HLEVBQVUsU0FBU25GLENBQU8sQ0FBQyxDQUN6RSxDQUNBLElBQUloQixFQUFPZ0IsRUFBUyxDQUNoQixPQUFPLEtBQUssU0FBUyxNQUFPaEIsRUFBTyxHQUFNbUcsRUFBVSxTQUFTbkYsQ0FBTyxDQUFDLENBQ3hFLENBQ0EsR0FBR2hCLEVBQU9nQixFQUFTLENBQ2YsT0FBTyxLQUFLLFNBQVMsTUFBT2hCLEVBQU8sR0FBT21HLEVBQVUsU0FBU25GLENBQU8sQ0FBQyxDQUN6RSxDQUNBLFNBQVNvRyxFQUFNcEgsRUFBT3FILEVBQVdyRyxFQUFTLENBQ3RDLE9BQU8sSUFBSW1HLEVBQVUsQ0FDakIsR0FBRyxLQUFLLEtBQ1IsT0FBUSxDQUNKLEdBQUcsS0FBSyxLQUFLLE9BQ2IsQ0FDSSxLQUFBQyxFQUNBLE1BQUFwSCxFQUNBLFVBQUFxSCxFQUNBLFFBQVNsQixFQUFVLFNBQVNuRixDQUFPLENBQ3ZDLENBQ0osQ0FDSixDQUFDLENBQ0wsQ0FDQSxVQUFVUyxFQUFPLENBQ2IsT0FBTyxJQUFJMEYsRUFBVSxDQUNqQixHQUFHLEtBQUssS0FDUixPQUFRLENBQUMsR0FBRyxLQUFLLEtBQUssT0FBUTFGLENBQUssQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsSUFBSVQsRUFBUyxDQUNULE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sTUFDTixRQUFTbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUN2QyxDQUFDLENBQ0wsQ0FDQSxTQUFTQSxFQUFTLENBQ2QsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxNQUNOLE1BQU8sRUFDUCxVQUFXLEdBQ1gsUUFBU21GLEVBQVUsU0FBU25GLENBQU8sQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsU0FBU0EsRUFBUyxDQUNkLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sTUFDTixNQUFPLEVBQ1AsVUFBVyxHQUNYLFFBQVNtRixFQUFVLFNBQVNuRixDQUFPLENBQ3ZDLENBQUMsQ0FDTCxDQUNBLFlBQVlBLEVBQVMsQ0FDakIsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxNQUNOLE1BQU8sRUFDUCxVQUFXLEdBQ1gsUUFBU21GLEVBQVUsU0FBU25GLENBQU8sQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsWUFBWUEsRUFBUyxDQUNqQixPQUFPLEtBQUssVUFBVSxDQUNsQixLQUFNLE1BQ04sTUFBTyxFQUNQLFVBQVcsR0FDWCxRQUFTbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUN2QyxDQUFDLENBQ0wsQ0FDQSxXQUFXaEIsRUFBT2dCLEVBQVMsQ0FDdkIsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxhQUNOLE1BQU9oQixFQUNQLFFBQVNtRyxFQUFVLFNBQVNuRixDQUFPLENBQ3ZDLENBQUMsQ0FDTCxDQUNBLE9BQU9BLEVBQVMsQ0FDWixPQUFPLEtBQUssVUFBVSxDQUNsQixLQUFNLFNBQ04sUUFBU21GLEVBQVUsU0FBU25GLENBQU8sQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsS0FBS0EsRUFBUyxDQUNWLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sTUFDTixVQUFXLEdBQ1gsTUFBTyxPQUFPLGlCQUNkLFFBQVNtRixFQUFVLFNBQVNuRixDQUFPLENBQ3ZDLENBQUMsRUFBRSxVQUFVLENBQ1QsS0FBTSxNQUNOLFVBQVcsR0FDWCxNQUFPLE9BQU8saUJBQ2QsUUFBU21GLEVBQVUsU0FBU25GLENBQU8sQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsSUFBSSxVQUFXLENBQ1gsSUFBSXlGLEVBQU0sS0FDVixRQUFXRCxLQUFNLEtBQUssS0FBSyxPQUNuQkEsRUFBRyxPQUFTLFFBQ1JDLElBQVEsTUFBUUQsRUFBRyxNQUFRQyxLQUMzQkEsRUFBTUQsRUFBRyxPQUdyQixPQUFPQyxDQUNYLENBQ0EsSUFBSSxVQUFXLENBQ1gsSUFBSUMsRUFBTSxLQUNWLFFBQVdGLEtBQU0sS0FBSyxLQUFLLE9BQ25CQSxFQUFHLE9BQVMsUUFDUkUsSUFBUSxNQUFRRixFQUFHLE1BQVFFLEtBQzNCQSxFQUFNRixFQUFHLE9BR3JCLE9BQU9FLENBQ1gsQ0FDQSxJQUFJLE9BQVEsQ0FDUixNQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFNRixHQUFPQSxFQUFHLE9BQVMsT0FBVUEsRUFBRyxPQUFTLGNBQWdCUCxFQUFLLFVBQVVPLEVBQUcsS0FBSyxDQUFFLENBQ3RILENBQ0EsSUFBSSxVQUFXLENBQ1gsSUFBSUUsRUFBTSxLQUNORCxFQUFNLEtBQ1YsUUFBV0QsS0FBTSxLQUFLLEtBQUssT0FBUSxDQUMvQixHQUFJQSxFQUFHLE9BQVMsVUFBWUEsRUFBRyxPQUFTLE9BQVNBLEVBQUcsT0FBUyxhQUN6RCxNQUFPLEdBRUZBLEVBQUcsT0FBUyxPQUNiQyxJQUFRLE1BQVFELEVBQUcsTUFBUUMsS0FDM0JBLEVBQU1ELEVBQUcsT0FFUkEsRUFBRyxPQUFTLFFBQ2JFLElBQVEsTUFBUUYsRUFBRyxNQUFRRSxLQUMzQkEsRUFBTUYsRUFBRyxNQUVyQixDQUNBLE9BQU8sT0FBTyxTQUFTQyxDQUFHLEdBQUssT0FBTyxTQUFTQyxDQUFHLENBQ3RELENBQ0osRUFDQVEsR0FBVSxPQUFVeEcsR0FDVCxJQUFJd0csR0FBVSxDQUNqQixPQUFRLENBQUMsRUFDVCxTQUFVakYsRUFBc0IsVUFDaEMsT0FBUXZCLEdBQVEsUUFBVSxHQUMxQixHQUFHRCxFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTTRHLEdBQU4sTUFBTUMsVUFBa0J0RyxDQUFRLENBQ25DLGFBQWMsQ0FDVixNQUFNLEdBQUcsU0FBUyxFQUNsQixLQUFLLElBQU0sS0FBSyxJQUNoQixLQUFLLElBQU0sS0FBSyxHQUNwQixDQUNBLE9BQU9DLEVBQU8sQ0FDVixHQUFJLEtBQUssS0FBSyxPQUNWLEdBQUksQ0FDQUEsRUFBTSxLQUFPLE9BQU9BLEVBQU0sSUFBSSxDQUNsQyxNQUNNLENBQ0YsT0FBTyxLQUFLLGlCQUFpQkEsQ0FBSyxDQUN0QyxDQUdKLEdBRG1CLEtBQUssU0FBU0EsQ0FBSyxJQUNuQnlFLEVBQWMsT0FDN0IsT0FBTyxLQUFLLGlCQUFpQnpFLENBQUssRUFFdEMsSUFBSWQsRUFDRTBGLEVBQVMsSUFBSTFFLEVBQ25CLFFBQVdLLEtBQVMsS0FBSyxLQUFLLE9BQ3RCQSxFQUFNLE9BQVMsT0FDRUEsRUFBTSxVQUFZUCxFQUFNLEtBQU9PLEVBQU0sTUFBUVAsRUFBTSxNQUFRTyxFQUFNLFNBRTlFckIsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxVQUNuQixLQUFNLFNBQ04sUUFBU0osRUFBTSxNQUNmLFVBQVdBLEVBQU0sVUFDakIsUUFBU0EsRUFBTSxPQUNuQixDQUFDLEVBQ0RxRSxFQUFPLE1BQU0sR0FHWnJFLEVBQU0sT0FBUyxPQUNMQSxFQUFNLFVBQVlQLEVBQU0sS0FBT08sRUFBTSxNQUFRUCxFQUFNLE1BQVFPLEVBQU0sU0FFNUVyQixFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLFFBQ25CLEtBQU0sU0FDTixRQUFTSixFQUFNLE1BQ2YsVUFBV0EsRUFBTSxVQUNqQixRQUFTQSxFQUFNLE9BQ25CLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLGFBQ2hCUCxFQUFNLEtBQU9PLEVBQU0sUUFBVSxPQUFPLENBQUMsSUFDckNyQixFQUFNLEtBQUssZ0JBQWdCYyxFQUFPZCxDQUFHLEVBQ3JDd0YsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLGdCQUNuQixXQUFZSixFQUFNLE1BQ2xCLFFBQVNBLEVBQU0sT0FDbkIsQ0FBQyxFQUNEcUUsRUFBTyxNQUFNLEdBSWpCRyxFQUFLLFlBQVl4RSxDQUFLLEVBRzlCLE1BQU8sQ0FBRSxPQUFRcUUsRUFBTyxNQUFPLE1BQU81RSxFQUFNLElBQUssQ0FDckQsQ0FDQSxpQkFBaUJBLEVBQU8sQ0FDcEIsSUFBTWQsRUFBTSxLQUFLLGdCQUFnQmMsQ0FBSyxFQUN0QyxPQUFBMEUsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLGFBQ25CLFNBQVU4RCxFQUFjLE9BQ3hCLFNBQVV2RixFQUFJLFVBQ2xCLENBQUMsRUFDTXlGLENBQ1gsQ0FDQSxJQUFJN0YsRUFBT2dCLEVBQVMsQ0FDaEIsT0FBTyxLQUFLLFNBQVMsTUFBT2hCLEVBQU8sR0FBTW1HLEVBQVUsU0FBU25GLENBQU8sQ0FBQyxDQUN4RSxDQUNBLEdBQUdoQixFQUFPZ0IsRUFBUyxDQUNmLE9BQU8sS0FBSyxTQUFTLE1BQU9oQixFQUFPLEdBQU9tRyxFQUFVLFNBQVNuRixDQUFPLENBQUMsQ0FDekUsQ0FDQSxJQUFJaEIsRUFBT2dCLEVBQVMsQ0FDaEIsT0FBTyxLQUFLLFNBQVMsTUFBT2hCLEVBQU8sR0FBTW1HLEVBQVUsU0FBU25GLENBQU8sQ0FBQyxDQUN4RSxDQUNBLEdBQUdoQixFQUFPZ0IsRUFBUyxDQUNmLE9BQU8sS0FBSyxTQUFTLE1BQU9oQixFQUFPLEdBQU9tRyxFQUFVLFNBQVNuRixDQUFPLENBQUMsQ0FDekUsQ0FDQSxTQUFTb0csRUFBTXBILEVBQU9xSCxFQUFXckcsRUFBUyxDQUN0QyxPQUFPLElBQUl1RyxFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLE9BQVEsQ0FDSixHQUFHLEtBQUssS0FBSyxPQUNiLENBQ0ksS0FBQUgsRUFDQSxNQUFBcEgsRUFDQSxVQUFBcUgsRUFDQSxRQUFTbEIsRUFBVSxTQUFTbkYsQ0FBTyxDQUN2QyxDQUNKLENBQ0osQ0FBQyxDQUNMLENBQ0EsVUFBVVMsRUFBTyxDQUNiLE9BQU8sSUFBSThGLEVBQVUsQ0FDakIsR0FBRyxLQUFLLEtBQ1IsT0FBUSxDQUFDLEdBQUcsS0FBSyxLQUFLLE9BQVE5RixDQUFLLENBQ3ZDLENBQUMsQ0FDTCxDQUNBLFNBQVNULEVBQVMsQ0FDZCxPQUFPLEtBQUssVUFBVSxDQUNsQixLQUFNLE1BQ04sTUFBTyxPQUFPLENBQUMsRUFDZixVQUFXLEdBQ1gsUUFBU21GLEVBQVUsU0FBU25GLENBQU8sQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsU0FBU0EsRUFBUyxDQUNkLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sTUFDTixNQUFPLE9BQU8sQ0FBQyxFQUNmLFVBQVcsR0FDWCxRQUFTbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUN2QyxDQUFDLENBQ0wsQ0FDQSxZQUFZQSxFQUFTLENBQ2pCLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sTUFDTixNQUFPLE9BQU8sQ0FBQyxFQUNmLFVBQVcsR0FDWCxRQUFTbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUN2QyxDQUFDLENBQ0wsQ0FDQSxZQUFZQSxFQUFTLENBQ2pCLE9BQU8sS0FBSyxVQUFVLENBQ2xCLEtBQU0sTUFDTixNQUFPLE9BQU8sQ0FBQyxFQUNmLFVBQVcsR0FDWCxRQUFTbUYsRUFBVSxTQUFTbkYsQ0FBTyxDQUN2QyxDQUFDLENBQ0wsQ0FDQSxXQUFXaEIsRUFBT2dCLEVBQVMsQ0FDdkIsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxhQUNOLE1BQUFoQixFQUNBLFFBQVNtRyxFQUFVLFNBQVNuRixDQUFPLENBQ3ZDLENBQUMsQ0FDTCxDQUNBLElBQUksVUFBVyxDQUNYLElBQUl5RixFQUFNLEtBQ1YsUUFBV0QsS0FBTSxLQUFLLEtBQUssT0FDbkJBLEVBQUcsT0FBUyxRQUNSQyxJQUFRLE1BQVFELEVBQUcsTUFBUUMsS0FDM0JBLEVBQU1ELEVBQUcsT0FHckIsT0FBT0MsQ0FDWCxDQUNBLElBQUksVUFBVyxDQUNYLElBQUlDLEVBQU0sS0FDVixRQUFXRixLQUFNLEtBQUssS0FBSyxPQUNuQkEsRUFBRyxPQUFTLFFBQ1JFLElBQVEsTUFBUUYsRUFBRyxNQUFRRSxLQUMzQkEsRUFBTUYsRUFBRyxPQUdyQixPQUFPRSxDQUNYLENBQ0osRUFDQVksR0FBVSxPQUFVNUcsR0FDVCxJQUFJNEcsR0FBVSxDQUNqQixPQUFRLENBQUMsRUFDVCxTQUFVckYsRUFBc0IsVUFDaEMsT0FBUXZCLEdBQVEsUUFBVSxHQUMxQixHQUFHRCxFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTThHLEdBQU4sY0FBeUJ2RyxDQUFRLENBQ3BDLE9BQU9DLEVBQU8sQ0FLVixHQUpJLEtBQUssS0FBSyxTQUNWQSxFQUFNLEtBQU8sRUFBUUEsRUFBTSxNQUVaLEtBQUssU0FBU0EsQ0FBSyxJQUNuQnlFLEVBQWMsUUFBUyxDQUN0QyxJQUFNdkYsRUFBTSxLQUFLLGdCQUFnQmMsQ0FBSyxFQUN0QyxPQUFBMEUsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLGFBQ25CLFNBQVU4RCxFQUFjLFFBQ3hCLFNBQVV2RixFQUFJLFVBQ2xCLENBQUMsRUFDTXlGLENBQ1gsQ0FDQSxPQUFPNEIsRUFBR3ZHLEVBQU0sSUFBSSxDQUN4QixDQUNKLEVBQ0FzRyxHQUFXLE9BQVU5RyxHQUNWLElBQUk4RyxHQUFXLENBQ2xCLFNBQVV2RixFQUFzQixXQUNoQyxPQUFRdkIsR0FBUSxRQUFVLEdBQzFCLEdBQUdELEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFFRSxJQUFNZ0gsR0FBTixNQUFNQyxVQUFnQjFHLENBQVEsQ0FDakMsT0FBT0MsRUFBTyxDQUtWLEdBSkksS0FBSyxLQUFLLFNBQ1ZBLEVBQU0sS0FBTyxJQUFJLEtBQUtBLEVBQU0sSUFBSSxHQUVqQixLQUFLLFNBQVNBLENBQUssSUFDbkJ5RSxFQUFjLEtBQU0sQ0FDbkMsSUFBTXZGLEVBQU0sS0FBSyxnQkFBZ0JjLENBQUssRUFDdEMsT0FBQTBFLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxhQUNuQixTQUFVOEQsRUFBYyxLQUN4QixTQUFVdkYsRUFBSSxVQUNsQixDQUFDLEVBQ015RixDQUNYLENBQ0EsR0FBSSxPQUFPLE1BQU0zRSxFQUFNLEtBQUssUUFBUSxDQUFDLEVBQUcsQ0FDcEMsSUFBTWQsRUFBTSxLQUFLLGdCQUFnQmMsQ0FBSyxFQUN0QyxPQUFBMEUsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLFlBQ3ZCLENBQUMsRUFDTWdFLENBQ1gsQ0FDQSxJQUFNQyxFQUFTLElBQUkxRSxFQUNmaEIsRUFDSixRQUFXcUIsS0FBUyxLQUFLLEtBQUssT0FDdEJBLEVBQU0sT0FBUyxNQUNYUCxFQUFNLEtBQUssUUFBUSxFQUFJTyxFQUFNLFFBQzdCckIsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxVQUNuQixRQUFTSixFQUFNLFFBQ2YsVUFBVyxHQUNYLE1BQU8sR0FDUCxRQUFTQSxFQUFNLE1BQ2YsS0FBTSxNQUNWLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUdackUsRUFBTSxPQUFTLE1BQ2hCUCxFQUFNLEtBQUssUUFBUSxFQUFJTyxFQUFNLFFBQzdCckIsRUFBTSxLQUFLLGdCQUFnQmMsRUFBT2QsQ0FBRyxFQUNyQ3dGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxRQUNuQixRQUFTSixFQUFNLFFBQ2YsVUFBVyxHQUNYLE1BQU8sR0FDUCxRQUFTQSxFQUFNLE1BQ2YsS0FBTSxNQUNWLENBQUMsRUFDRHFFLEVBQU8sTUFBTSxHQUlqQkcsRUFBSyxZQUFZeEUsQ0FBSyxFQUc5QixNQUFPLENBQ0gsT0FBUXFFLEVBQU8sTUFDZixNQUFPLElBQUksS0FBSzVFLEVBQU0sS0FBSyxRQUFRLENBQUMsQ0FDeEMsQ0FDSixDQUNBLFVBQVVPLEVBQU8sQ0FDYixPQUFPLElBQUlrRyxFQUFRLENBQ2YsR0FBRyxLQUFLLEtBQ1IsT0FBUSxDQUFDLEdBQUcsS0FBSyxLQUFLLE9BQVFsRyxDQUFLLENBQ3ZDLENBQUMsQ0FDTCxDQUNBLElBQUltRyxFQUFTNUcsRUFBUyxDQUNsQixPQUFPLEtBQUssVUFBVSxDQUNsQixLQUFNLE1BQ04sTUFBTzRHLEVBQVEsUUFBUSxFQUN2QixRQUFTekIsRUFBVSxTQUFTbkYsQ0FBTyxDQUN2QyxDQUFDLENBQ0wsQ0FDQSxJQUFJNkcsRUFBUzdHLEVBQVMsQ0FDbEIsT0FBTyxLQUFLLFVBQVUsQ0FDbEIsS0FBTSxNQUNOLE1BQU82RyxFQUFRLFFBQVEsRUFDdkIsUUFBUzFCLEVBQVUsU0FBU25GLENBQU8sQ0FDdkMsQ0FBQyxDQUNMLENBQ0EsSUFBSSxTQUFVLENBQ1YsSUFBSXlGLEVBQU0sS0FDVixRQUFXRCxLQUFNLEtBQUssS0FBSyxPQUNuQkEsRUFBRyxPQUFTLFFBQ1JDLElBQVEsTUFBUUQsRUFBRyxNQUFRQyxLQUMzQkEsRUFBTUQsRUFBRyxPQUdyQixPQUFPQyxHQUFPLEtBQU8sSUFBSSxLQUFLQSxDQUFHLEVBQUksSUFDekMsQ0FDQSxJQUFJLFNBQVUsQ0FDVixJQUFJQyxFQUFNLEtBQ1YsUUFBV0YsS0FBTSxLQUFLLEtBQUssT0FDbkJBLEVBQUcsT0FBUyxRQUNSRSxJQUFRLE1BQVFGLEVBQUcsTUFBUUUsS0FDM0JBLEVBQU1GLEVBQUcsT0FHckIsT0FBT0UsR0FBTyxLQUFPLElBQUksS0FBS0EsQ0FBRyxFQUFJLElBQ3pDLENBQ0osRUFDQWdCLEdBQVEsT0FBVWhILEdBQ1AsSUFBSWdILEdBQVEsQ0FDZixPQUFRLENBQUMsRUFDVCxPQUFRaEgsR0FBUSxRQUFVLEdBQzFCLFNBQVV1QixFQUFzQixRQUNoQyxHQUFHeEIsRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQUVFLElBQU1vSCxHQUFOLGNBQXdCN0csQ0FBUSxDQUNuQyxPQUFPQyxFQUFPLENBRVYsR0FEbUIsS0FBSyxTQUFTQSxDQUFLLElBQ25CeUUsRUFBYyxPQUFRLENBQ3JDLElBQU12RixFQUFNLEtBQUssZ0JBQWdCYyxDQUFLLEVBQ3RDLE9BQUEwRSxFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVThELEVBQWMsT0FDeEIsU0FBVXZGLEVBQUksVUFDbEIsQ0FBQyxFQUNNeUYsQ0FDWCxDQUNBLE9BQU80QixFQUFHdkcsRUFBTSxJQUFJLENBQ3hCLENBQ0osRUFDQTRHLEdBQVUsT0FBVXBILEdBQ1QsSUFBSW9ILEdBQVUsQ0FDakIsU0FBVTdGLEVBQXNCLFVBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTXFILEdBQU4sY0FBMkI5RyxDQUFRLENBQ3RDLE9BQU9DLEVBQU8sQ0FFVixHQURtQixLQUFLLFNBQVNBLENBQUssSUFDbkJ5RSxFQUFjLFVBQVcsQ0FDeEMsSUFBTXZGLEVBQU0sS0FBSyxnQkFBZ0JjLENBQUssRUFDdEMsT0FBQTBFLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxhQUNuQixTQUFVOEQsRUFBYyxVQUN4QixTQUFVdkYsRUFBSSxVQUNsQixDQUFDLEVBQ015RixDQUNYLENBQ0EsT0FBTzRCLEVBQUd2RyxFQUFNLElBQUksQ0FDeEIsQ0FDSixFQUNBNkcsR0FBYSxPQUFVckgsR0FDWixJQUFJcUgsR0FBYSxDQUNwQixTQUFVOUYsRUFBc0IsYUFDaEMsR0FBR3hCLEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFFRSxJQUFNc0gsR0FBTixjQUFzQi9HLENBQVEsQ0FDakMsT0FBT0MsRUFBTyxDQUVWLEdBRG1CLEtBQUssU0FBU0EsQ0FBSyxJQUNuQnlFLEVBQWMsS0FBTSxDQUNuQyxJQUFNdkYsRUFBTSxLQUFLLGdCQUFnQmMsQ0FBSyxFQUN0QyxPQUFBMEUsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLGFBQ25CLFNBQVU4RCxFQUFjLEtBQ3hCLFNBQVV2RixFQUFJLFVBQ2xCLENBQUMsRUFDTXlGLENBQ1gsQ0FDQSxPQUFPNEIsRUFBR3ZHLEVBQU0sSUFBSSxDQUN4QixDQUNKLEVBQ0E4RyxHQUFRLE9BQVV0SCxHQUNQLElBQUlzSCxHQUFRLENBQ2YsU0FBVS9GLEVBQXNCLFFBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTXVILEVBQU4sY0FBcUJoSCxDQUFRLENBQ2hDLGFBQWMsQ0FDVixNQUFNLEdBQUcsU0FBUyxFQUVsQixLQUFLLEtBQU8sRUFDaEIsQ0FDQSxPQUFPQyxFQUFPLENBQ1YsT0FBT3VHLEVBQUd2RyxFQUFNLElBQUksQ0FDeEIsQ0FDSixFQUNBK0csRUFBTyxPQUFVdkgsR0FDTixJQUFJdUgsRUFBTyxDQUNkLFNBQVVoRyxFQUFzQixPQUNoQyxHQUFHeEIsRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQUVFLElBQU13SCxFQUFOLGNBQXlCakgsQ0FBUSxDQUNwQyxhQUFjLENBQ1YsTUFBTSxHQUFHLFNBQVMsRUFFbEIsS0FBSyxTQUFXLEVBQ3BCLENBQ0EsT0FBT0MsRUFBTyxDQUNWLE9BQU91RyxFQUFHdkcsRUFBTSxJQUFJLENBQ3hCLENBQ0osRUFDQWdILEVBQVcsT0FBVXhILEdBQ1YsSUFBSXdILEVBQVcsQ0FDbEIsU0FBVWpHLEVBQXNCLFdBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTXlILEVBQU4sY0FBdUJsSCxDQUFRLENBQ2xDLE9BQU9DLEVBQU8sQ0FDVixJQUFNZCxFQUFNLEtBQUssZ0JBQWdCYyxDQUFLLEVBQ3RDLE9BQUEwRSxFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVThELEVBQWMsTUFDeEIsU0FBVXZGLEVBQUksVUFDbEIsQ0FBQyxFQUNNeUYsQ0FDWCxDQUNKLEVBQ0FzQyxFQUFTLE9BQVV6SCxHQUNSLElBQUl5SCxFQUFTLENBQ2hCLFNBQVVsRyxFQUFzQixTQUNoQyxHQUFHeEIsRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQUVFLElBQU0wSCxHQUFOLGNBQXNCbkgsQ0FBUSxDQUNqQyxPQUFPQyxFQUFPLENBRVYsR0FEbUIsS0FBSyxTQUFTQSxDQUFLLElBQ25CeUUsRUFBYyxVQUFXLENBQ3hDLElBQU12RixFQUFNLEtBQUssZ0JBQWdCYyxDQUFLLEVBQ3RDLE9BQUEwRSxFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVThELEVBQWMsS0FDeEIsU0FBVXZGLEVBQUksVUFDbEIsQ0FBQyxFQUNNeUYsQ0FDWCxDQUNBLE9BQU80QixFQUFHdkcsRUFBTSxJQUFJLENBQ3hCLENBQ0osRUFDQWtILEdBQVEsT0FBVTFILEdBQ1AsSUFBSTBILEdBQVEsQ0FDZixTQUFVbkcsRUFBc0IsUUFDaEMsR0FBR3hCLEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFFRSxJQUFNMkIsRUFBTixNQUFNZ0csVUFBaUJwSCxDQUFRLENBQ2xDLE9BQU9DLEVBQU8sQ0FDVixHQUFNLENBQUUsSUFBQWQsRUFBSyxPQUFBMEYsQ0FBTyxFQUFJLEtBQUssb0JBQW9CNUUsQ0FBSyxFQUNoRGdCLEVBQU0sS0FBSyxLQUNqQixHQUFJOUIsRUFBSSxhQUFldUYsRUFBYyxNQUNqQyxPQUFBQyxFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVThELEVBQWMsTUFDeEIsU0FBVXZGLEVBQUksVUFDbEIsQ0FBQyxFQUNNeUYsRUFFWCxHQUFJM0QsRUFBSSxjQUFnQixLQUFNLENBQzFCLElBQU02RCxFQUFTM0YsRUFBSSxLQUFLLE9BQVM4QixFQUFJLFlBQVksTUFDM0M4RCxFQUFXNUYsRUFBSSxLQUFLLE9BQVM4QixFQUFJLFlBQVksT0FDL0M2RCxHQUFVQyxLQUNWSixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTTJGLEVBQVNsRSxFQUFhLFFBQVVBLEVBQWEsVUFDbkQsUUFBVW1FLEVBQVc5RCxFQUFJLFlBQVksTUFBUSxPQUM3QyxRQUFVNkQsRUFBUzdELEVBQUksWUFBWSxNQUFRLE9BQzNDLEtBQU0sUUFDTixVQUFXLEdBQ1gsTUFBTyxHQUNQLFFBQVNBLEVBQUksWUFBWSxPQUM3QixDQUFDLEVBQ0Q0RCxFQUFPLE1BQU0sRUFFckIsQ0EyQkEsR0ExQkk1RCxFQUFJLFlBQWMsTUFDZDlCLEVBQUksS0FBSyxPQUFTOEIsRUFBSSxVQUFVLFFBQ2hDMEQsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLFVBQ25CLFFBQVNLLEVBQUksVUFBVSxNQUN2QixLQUFNLFFBQ04sVUFBVyxHQUNYLE1BQU8sR0FDUCxRQUFTQSxFQUFJLFVBQVUsT0FDM0IsQ0FBQyxFQUNENEQsRUFBTyxNQUFNLEdBR2pCNUQsRUFBSSxZQUFjLE1BQ2Q5QixFQUFJLEtBQUssT0FBUzhCLEVBQUksVUFBVSxRQUNoQzBELEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxRQUNuQixRQUFTSyxFQUFJLFVBQVUsTUFDdkIsS0FBTSxRQUNOLFVBQVcsR0FDWCxNQUFPLEdBQ1AsUUFBU0EsRUFBSSxVQUFVLE9BQzNCLENBQUMsRUFDRDRELEVBQU8sTUFBTSxHQUdqQjFGLEVBQUksT0FBTyxNQUNYLE9BQU8sUUFBUSxJQUFJLENBQUMsR0FBR0EsRUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDa0ksRUFBTUMsSUFDakNyRyxFQUFJLEtBQUssWUFBWSxJQUFJcEMsRUFBbUJNLEVBQUtrSSxFQUFNbEksRUFBSSxLQUFNbUksQ0FBQyxDQUFDLENBQzdFLENBQUMsRUFBRSxLQUFNbEksR0FDQ2UsRUFBWSxXQUFXMEUsRUFBUXpGLENBQU0sQ0FDL0MsRUFFTCxJQUFNQSxFQUFTLENBQUMsR0FBR0QsRUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDa0ksRUFBTUMsSUFDN0JyRyxFQUFJLEtBQUssV0FBVyxJQUFJcEMsRUFBbUJNLEVBQUtrSSxFQUFNbEksRUFBSSxLQUFNbUksQ0FBQyxDQUFDLENBQzVFLEVBQ0QsT0FBT25ILEVBQVksV0FBVzBFLEVBQVF6RixDQUFNLENBQ2hELENBQ0EsSUFBSSxTQUFVLENBQ1YsT0FBTyxLQUFLLEtBQUssSUFDckIsQ0FDQSxJQUFJZ0csRUFBV3JGLEVBQVMsQ0FDcEIsT0FBTyxJQUFJcUgsRUFBUyxDQUNoQixHQUFHLEtBQUssS0FDUixVQUFXLENBQUUsTUFBT2hDLEVBQVcsUUFBU0YsRUFBVSxTQUFTbkYsQ0FBTyxDQUFFLENBQ3hFLENBQUMsQ0FDTCxDQUNBLElBQUlzRixFQUFXdEYsRUFBUyxDQUNwQixPQUFPLElBQUlxSCxFQUFTLENBQ2hCLEdBQUcsS0FBSyxLQUNSLFVBQVcsQ0FBRSxNQUFPL0IsRUFBVyxRQUFTSCxFQUFVLFNBQVNuRixDQUFPLENBQUUsQ0FDeEUsQ0FBQyxDQUNMLENBQ0EsT0FBT3VGLEVBQUt2RixFQUFTLENBQ2pCLE9BQU8sSUFBSXFILEVBQVMsQ0FDaEIsR0FBRyxLQUFLLEtBQ1IsWUFBYSxDQUFFLE1BQU85QixFQUFLLFFBQVNKLEVBQVUsU0FBU25GLENBQU8sQ0FBRSxDQUNwRSxDQUFDLENBQ0wsQ0FDQSxTQUFTQSxFQUFTLENBQ2QsT0FBTyxLQUFLLElBQUksRUFBR0EsQ0FBTyxDQUM5QixDQUNKLEVBQ0FxQixFQUFTLE9BQVMsQ0FBQ21HLEVBQVE5SCxJQUNoQixJQUFJMkIsRUFBUyxDQUNoQixLQUFNbUcsRUFDTixVQUFXLEtBQ1gsVUFBVyxLQUNYLFlBQWEsS0FDYixTQUFVdkcsRUFBc0IsU0FDaEMsR0FBR3hCLEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFFTCxTQUFTK0gsR0FBZUQsRUFBUSxDQUM1QixHQUFJQSxhQUFrQkUsRUFBVyxDQUM3QixJQUFNQyxFQUFXLENBQUMsRUFDbEIsUUFBV3pJLEtBQU9zSSxFQUFPLE1BQU8sQ0FDNUIsSUFBTUksRUFBY0osRUFBTyxNQUFNdEksQ0FBRyxFQUNwQ3lJLEVBQVN6SSxDQUFHLEVBQUlpQyxFQUFZLE9BQU9zRyxHQUFlRyxDQUFXLENBQUMsQ0FDbEUsQ0FDQSxPQUFPLElBQUlGLEVBQVUsQ0FDakIsR0FBR0YsRUFBTyxLQUNWLE1BQU8sSUFBTUcsQ0FDakIsQ0FBQyxDQUNMLEtBQ0ssUUFBSUgsYUFBa0JuRyxFQUNoQixJQUFJQSxFQUFTLENBQ2hCLEdBQUdtRyxFQUFPLEtBQ1YsS0FBTUMsR0FBZUQsRUFBTyxPQUFPLENBQ3ZDLENBQUMsRUFFSUEsYUFBa0JyRyxFQUNoQkEsRUFBWSxPQUFPc0csR0FBZUQsRUFBTyxPQUFPLENBQUMsQ0FBQyxFQUVwREEsYUFBa0JwRyxFQUNoQkEsRUFBWSxPQUFPcUcsR0FBZUQsRUFBTyxPQUFPLENBQUMsQ0FBQyxFQUVwREEsYUFBa0JLLEVBQ2hCQSxFQUFTLE9BQU9MLEVBQU8sTUFBTSxJQUFLRixHQUFTRyxHQUFlSCxDQUFJLENBQUMsQ0FBQyxFQUdoRUUsQ0FFZixDQUNPLElBQU1FLEVBQU4sTUFBTUksVUFBa0I3SCxDQUFRLENBQ25DLGFBQWMsQ0FDVixNQUFNLEdBQUcsU0FBUyxFQUNsQixLQUFLLFFBQVUsS0FLZixLQUFLLFVBQVksS0FBSyxZQXFDdEIsS0FBSyxRQUFVLEtBQUssTUFDeEIsQ0FDQSxZQUFhLENBQ1QsR0FBSSxLQUFLLFVBQVksS0FDakIsT0FBTyxLQUFLLFFBQ2hCLElBQU04SCxFQUFRLEtBQUssS0FBSyxNQUFNLEVBQ3hCQyxFQUFPL0MsRUFBSyxXQUFXOEMsQ0FBSyxFQUNsQyxZQUFLLFFBQVUsQ0FBRSxNQUFBQSxFQUFPLEtBQUFDLENBQUssRUFDdEIsS0FBSyxPQUNoQixDQUNBLE9BQU85SCxFQUFPLENBRVYsR0FEbUIsS0FBSyxTQUFTQSxDQUFLLElBQ25CeUUsRUFBYyxPQUFRLENBQ3JDLElBQU12RixFQUFNLEtBQUssZ0JBQWdCYyxDQUFLLEVBQ3RDLE9BQUEwRSxFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVThELEVBQWMsT0FDeEIsU0FBVXZGLEVBQUksVUFDbEIsQ0FBQyxFQUNNeUYsQ0FDWCxDQUNBLEdBQU0sQ0FBRSxPQUFBQyxFQUFRLElBQUExRixDQUFJLEVBQUksS0FBSyxvQkFBb0JjLENBQUssRUFDaEQsQ0FBRSxNQUFBNkgsRUFBTyxLQUFNRSxDQUFVLEVBQUksS0FBSyxXQUFXLEVBQzdDQyxFQUFZLENBQUMsRUFDbkIsR0FBSSxFQUFFLEtBQUssS0FBSyxvQkFBb0JmLEdBQVksS0FBSyxLQUFLLGNBQWdCLFNBQ3RFLFFBQVdqSSxLQUFPRSxFQUFJLEtBQ2I2SSxFQUFVLFNBQVMvSSxDQUFHLEdBQ3ZCZ0osRUFBVSxLQUFLaEosQ0FBRyxFQUk5QixJQUFNaUosRUFBUSxDQUFDLEVBQ2YsUUFBV2pKLEtBQU8rSSxFQUFXLENBQ3pCLElBQU1HLEVBQWVMLEVBQU03SSxDQUFHLEVBQ3hCRixFQUFRSSxFQUFJLEtBQUtGLENBQUcsRUFDMUJpSixFQUFNLEtBQUssQ0FDUCxJQUFLLENBQUUsT0FBUSxRQUFTLE1BQU9qSixDQUFJLEVBQ25DLE1BQU9rSixFQUFhLE9BQU8sSUFBSXRKLEVBQW1CTSxFQUFLSixFQUFPSSxFQUFJLEtBQU1GLENBQUcsQ0FBQyxFQUM1RSxVQUFXQSxLQUFPRSxFQUFJLElBQzFCLENBQUMsQ0FDTCxDQUNBLEdBQUksS0FBSyxLQUFLLG9CQUFvQitILEVBQVUsQ0FDeEMsSUFBTWtCLEVBQWMsS0FBSyxLQUFLLFlBQzlCLEdBQUlBLElBQWdCLGNBQ2hCLFFBQVduSixLQUFPZ0osRUFDZEMsRUFBTSxLQUFLLENBQ1AsSUFBSyxDQUFFLE9BQVEsUUFBUyxNQUFPakosQ0FBSSxFQUNuQyxNQUFPLENBQUUsT0FBUSxRQUFTLE1BQU9FLEVBQUksS0FBS0YsQ0FBRyxDQUFFLENBQ25ELENBQUMsVUFHQW1KLElBQWdCLFNBQ2pCSCxFQUFVLE9BQVMsSUFDbkJ0RCxFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsa0JBQ25CLEtBQU1xSCxDQUNWLENBQUMsRUFDRHBELEVBQU8sTUFBTSxXQUdadUQsSUFBZ0IsUUFHckIsTUFBTSxJQUFJLE1BQU0sc0RBQXNELENBRTlFLEtBQ0ssQ0FFRCxJQUFNQyxFQUFXLEtBQUssS0FBSyxTQUMzQixRQUFXcEosS0FBT2dKLEVBQVcsQ0FDekIsSUFBTWxKLEVBQVFJLEVBQUksS0FBS0YsQ0FBRyxFQUMxQmlKLEVBQU0sS0FBSyxDQUNQLElBQUssQ0FBRSxPQUFRLFFBQVMsTUFBT2pKLENBQUksRUFDbkMsTUFBT29KLEVBQVMsT0FBTyxJQUFJeEosRUFBbUJNLEVBQUtKLEVBQU9JLEVBQUksS0FBTUYsQ0FBRyxDQUN2RSxFQUNBLFVBQVdBLEtBQU9FLEVBQUksSUFDMUIsQ0FBQyxDQUNMLENBQ0osQ0FDQSxPQUFJQSxFQUFJLE9BQU8sTUFDSixRQUFRLFFBQVEsRUFDbEIsS0FBSyxTQUFZLENBQ2xCLElBQU1tSixFQUFZLENBQUMsRUFDbkIsUUFBV0MsS0FBUUwsRUFBTyxDQUN0QixJQUFNakosRUFBTSxNQUFNc0osRUFBSyxJQUNqQnhKLEVBQVEsTUFBTXdKLEVBQUssTUFDekJELEVBQVUsS0FBSyxDQUNYLElBQUFySixFQUNBLE1BQUFGLEVBQ0EsVUFBV3dKLEVBQUssU0FDcEIsQ0FBQyxDQUNMLENBQ0EsT0FBT0QsQ0FDWCxDQUFDLEVBQ0ksS0FBTUEsR0FDQW5JLEVBQVksZ0JBQWdCMEUsRUFBUXlELENBQVMsQ0FDdkQsRUFHTW5JLEVBQVksZ0JBQWdCMEUsRUFBUXFELENBQUssQ0FFeEQsQ0FDQSxJQUFJLE9BQVEsQ0FDUixPQUFPLEtBQUssS0FBSyxNQUFNLENBQzNCLENBQ0EsT0FBT25JLEVBQVMsQ0FDWixPQUFBbUYsRUFBVSxTQUNILElBQUkyQyxFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLFlBQWEsU0FDYixHQUFJOUgsSUFBWSxPQUNWLENBQ0UsU0FBVSxDQUFDeUksRUFBT3JKLElBQVEsQ0FDdEIsSUFBTXNKLEVBQWUsS0FBSyxLQUFLLFdBQVdELEVBQU9ySixDQUFHLEVBQUUsU0FBV0EsRUFBSSxhQUNyRSxPQUFJcUosRUFBTSxPQUFTLG9CQUNSLENBQ0gsUUFBU3RELEVBQVUsU0FBU25GLENBQU8sRUFBRSxTQUFXMEksQ0FDcEQsRUFDRyxDQUNILFFBQVNBLENBQ2IsQ0FDSixDQUNKLEVBQ0UsQ0FBQyxDQUNYLENBQUMsQ0FDTCxDQUNBLE9BQVEsQ0FDSixPQUFPLElBQUlaLEVBQVUsQ0FDakIsR0FBRyxLQUFLLEtBQ1IsWUFBYSxPQUNqQixDQUFDLENBQ0wsQ0FDQSxhQUFjLENBQ1YsT0FBTyxJQUFJQSxFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLFlBQWEsYUFDakIsQ0FBQyxDQUNMLENBa0JBLE9BQU9hLEVBQWMsQ0FDakIsT0FBTyxJQUFJYixFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLE1BQU8sS0FBTyxDQUNWLEdBQUcsS0FBSyxLQUFLLE1BQU0sRUFDbkIsR0FBR2EsQ0FDUCxFQUNKLENBQUMsQ0FDTCxDQU1BLE1BQU1DLEVBQVMsQ0FVWCxPQVRlLElBQUlkLEVBQVUsQ0FDekIsWUFBYWMsRUFBUSxLQUFLLFlBQzFCLFNBQVVBLEVBQVEsS0FBSyxTQUN2QixNQUFPLEtBQU8sQ0FDVixHQUFHLEtBQUssS0FBSyxNQUFNLEVBQ25CLEdBQUdBLEVBQVEsS0FBSyxNQUFNLENBQzFCLEdBQ0EsU0FBVTNILEVBQXNCLFNBQ3BDLENBQUMsQ0FFTCxDQW9DQSxPQUFPL0IsRUFBS3NJLEVBQVEsQ0FDaEIsT0FBTyxLQUFLLFFBQVEsQ0FBRSxDQUFDdEksQ0FBRyxFQUFHc0ksQ0FBTyxDQUFDLENBQ3pDLENBc0JBLFNBQVNxQixFQUFPLENBQ1osT0FBTyxJQUFJZixFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLFNBQVVlLENBQ2QsQ0FBQyxDQUNMLENBQ0EsS0FBS0MsRUFBTSxDQUNQLElBQU1mLEVBQVEsQ0FBQyxFQUNmLFFBQVc3SSxLQUFPK0YsRUFBSyxXQUFXNkQsQ0FBSSxFQUM5QkEsRUFBSzVKLENBQUcsR0FBSyxLQUFLLE1BQU1BLENBQUcsSUFDM0I2SSxFQUFNN0ksQ0FBRyxFQUFJLEtBQUssTUFBTUEsQ0FBRyxHQUduQyxPQUFPLElBQUk0SSxFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLE1BQU8sSUFBTUMsQ0FDakIsQ0FBQyxDQUNMLENBQ0EsS0FBS2UsRUFBTSxDQUNQLElBQU1mLEVBQVEsQ0FBQyxFQUNmLFFBQVc3SSxLQUFPK0YsRUFBSyxXQUFXLEtBQUssS0FBSyxFQUNuQzZELEVBQUs1SixDQUFHLElBQ1Q2SSxFQUFNN0ksQ0FBRyxFQUFJLEtBQUssTUFBTUEsQ0FBRyxHQUduQyxPQUFPLElBQUk0SSxFQUFVLENBQ2pCLEdBQUcsS0FBSyxLQUNSLE1BQU8sSUFBTUMsQ0FDakIsQ0FBQyxDQUNMLENBSUEsYUFBYyxDQUNWLE9BQU9OLEdBQWUsSUFBSSxDQUM5QixDQUNBLFFBQVFxQixFQUFNLENBQ1YsSUFBTW5CLEVBQVcsQ0FBQyxFQUNsQixRQUFXekksS0FBTytGLEVBQUssV0FBVyxLQUFLLEtBQUssRUFBRyxDQUMzQyxJQUFNMkMsRUFBYyxLQUFLLE1BQU0xSSxDQUFHLEVBQzlCNEosR0FBUSxDQUFDQSxFQUFLNUosQ0FBRyxFQUNqQnlJLEVBQVN6SSxDQUFHLEVBQUkwSSxFQUdoQkQsRUFBU3pJLENBQUcsRUFBSTBJLEVBQVksU0FBUyxDQUU3QyxDQUNBLE9BQU8sSUFBSUUsRUFBVSxDQUNqQixHQUFHLEtBQUssS0FDUixNQUFPLElBQU1ILENBQ2pCLENBQUMsQ0FDTCxDQUNBLFNBQVNtQixFQUFNLENBQ1gsSUFBTW5CLEVBQVcsQ0FBQyxFQUNsQixRQUFXekksS0FBTytGLEVBQUssV0FBVyxLQUFLLEtBQUssRUFDeEMsR0FBSTZELEdBQVEsQ0FBQ0EsRUFBSzVKLENBQUcsRUFDakJ5SSxFQUFTekksQ0FBRyxFQUFJLEtBQUssTUFBTUEsQ0FBRyxNQUU3QixDQUVELElBQUk2SixFQURnQixLQUFLLE1BQU03SixDQUFHLEVBRWxDLEtBQU82SixhQUFvQjVILEdBQ3ZCNEgsRUFBV0EsRUFBUyxLQUFLLFVBRTdCcEIsRUFBU3pJLENBQUcsRUFBSTZKLENBQ3BCLENBRUosT0FBTyxJQUFJakIsRUFBVSxDQUNqQixHQUFHLEtBQUssS0FDUixNQUFPLElBQU1ILENBQ2pCLENBQUMsQ0FDTCxDQUNBLE9BQVEsQ0FDSixPQUFPcUIsR0FBYy9ELEVBQUssV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUNwRCxDQUNKLEVBQ0F5QyxFQUFVLE9BQVMsQ0FBQ0ssRUFBT3JJLElBQ2hCLElBQUlnSSxFQUFVLENBQ2pCLE1BQU8sSUFBTUssRUFDYixZQUFhLFFBQ2IsU0FBVVosRUFBUyxPQUFPLEVBQzFCLFNBQVVsRyxFQUFzQixVQUNoQyxHQUFHeEIsRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQUVMZ0ksRUFBVSxhQUFlLENBQUNLLEVBQU9ySSxJQUN0QixJQUFJZ0ksRUFBVSxDQUNqQixNQUFPLElBQU1LLEVBQ2IsWUFBYSxTQUNiLFNBQVVaLEVBQVMsT0FBTyxFQUMxQixTQUFVbEcsRUFBc0IsVUFDaEMsR0FBR3hCLEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFFTGdJLEVBQVUsV0FBYSxDQUFDSyxFQUFPckksSUFDcEIsSUFBSWdJLEVBQVUsQ0FDakIsTUFBQUssRUFDQSxZQUFhLFFBQ2IsU0FBVVosRUFBUyxPQUFPLEVBQzFCLFNBQVVsRyxFQUFzQixVQUNoQyxHQUFHeEIsRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQUVFLElBQU04QixHQUFOLGNBQXVCdkIsQ0FBUSxDQUNsQyxPQUFPQyxFQUFPLENBQ1YsR0FBTSxDQUFFLElBQUFkLENBQUksRUFBSSxLQUFLLG9CQUFvQmMsQ0FBSyxFQUN4Q2tGLEVBQVUsS0FBSyxLQUFLLFFBQzFCLFNBQVM2RCxFQUFjQyxFQUFTLENBRTVCLFFBQVc3SixLQUFVNkosRUFDakIsR0FBSTdKLEVBQU8sT0FBTyxTQUFXLFFBQ3pCLE9BQU9BLEVBQU8sT0FHdEIsUUFBV0EsS0FBVTZKLEVBQ2pCLEdBQUk3SixFQUFPLE9BQU8sU0FBVyxRQUV6QixPQUFBRCxFQUFJLE9BQU8sT0FBTyxLQUFLLEdBQUdDLEVBQU8sSUFBSSxPQUFPLE1BQU0sRUFDM0NBLEVBQU8sT0FJdEIsSUFBTThKLEVBQWNELEVBQVEsSUFBSzdKLEdBQVcsSUFBSUcsRUFBU0gsRUFBTyxJQUFJLE9BQU8sTUFBTSxDQUFDLEVBQ2xGLE9BQUF1RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsY0FDbkIsWUFBQXNJLENBQ0osQ0FBQyxFQUNNdEUsQ0FDWCxDQUNBLEdBQUl6RixFQUFJLE9BQU8sTUFDWCxPQUFPLFFBQVEsSUFBSWdHLEVBQVEsSUFBSSxNQUFPN0QsR0FBVyxDQUM3QyxJQUFNNkgsRUFBVyxDQUNiLEdBQUdoSyxFQUNILE9BQVEsQ0FDSixHQUFHQSxFQUFJLE9BQ1AsT0FBUSxDQUFDLENBQ2IsRUFDQSxPQUFRLElBQ1osRUFDQSxNQUFPLENBQ0gsT0FBUSxNQUFNbUMsRUFBTyxZQUFZLENBQzdCLEtBQU1uQyxFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFnSyxDQUNaLENBQUMsRUFDRCxJQUFLQSxDQUNULENBQ0osQ0FBQyxDQUFDLEVBQUUsS0FBS0gsQ0FBYSxFQUVyQixDQUNELElBQUlJLEVBQ0VDLEVBQVMsQ0FBQyxFQUNoQixRQUFXL0gsS0FBVTZELEVBQVMsQ0FDMUIsSUFBTWdFLEVBQVcsQ0FDYixHQUFHaEssRUFDSCxPQUFRLENBQ0osR0FBR0EsRUFBSSxPQUNQLE9BQVEsQ0FBQyxDQUNiLEVBQ0EsT0FBUSxJQUNaLEVBQ01DLEVBQVNrQyxFQUFPLFdBQVcsQ0FDN0IsS0FBTW5DLEVBQUksS0FDVixLQUFNQSxFQUFJLEtBQ1YsT0FBUWdLLENBQ1osQ0FBQyxFQUNELEdBQUkvSixFQUFPLFNBQVcsUUFDbEIsT0FBT0EsRUFFRkEsRUFBTyxTQUFXLFNBQVcsQ0FBQ2dLLElBQ25DQSxFQUFRLENBQUUsT0FBQWhLLEVBQVEsSUFBSytKLENBQVMsR0FFaENBLEVBQVMsT0FBTyxPQUFPLFFBQ3ZCRSxFQUFPLEtBQUtGLEVBQVMsT0FBTyxNQUFNLENBRTFDLENBQ0EsR0FBSUMsRUFDQSxPQUFBakssRUFBSSxPQUFPLE9BQU8sS0FBSyxHQUFHaUssRUFBTSxJQUFJLE9BQU8sTUFBTSxFQUMxQ0EsRUFBTSxPQUVqQixJQUFNRixFQUFjRyxFQUFPLElBQUtBLEdBQVcsSUFBSTlKLEVBQVM4SixDQUFNLENBQUMsRUFDL0QsT0FBQTFFLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxjQUNuQixZQUFBc0ksQ0FDSixDQUFDLEVBQ010RSxDQUNYLENBQ0osQ0FDQSxJQUFJLFNBQVUsQ0FDVixPQUFPLEtBQUssS0FBSyxPQUNyQixDQUNKLEVBQ0FyRCxHQUFTLE9BQVMsQ0FBQytILEVBQU83SixJQUNmLElBQUk4QixHQUFTLENBQ2hCLFFBQVMrSCxFQUNULFNBQVV0SSxFQUFzQixTQUNoQyxHQUFHeEIsRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQVNMLElBQU04SixFQUFvQkMsR0FDbEJBLGFBQWdCQyxHQUNURixFQUFpQkMsRUFBSyxNQUFNLEVBRTlCQSxhQUFnQnpJLEVBQ2R3SSxFQUFpQkMsRUFBSyxVQUFVLENBQUMsRUFFbkNBLGFBQWdCRSxHQUNkLENBQUNGLEVBQUssS0FBSyxFQUViQSxhQUFnQkcsR0FDZEgsRUFBSyxRQUVQQSxhQUFnQkksR0FFZDVFLEVBQUssYUFBYXdFLEVBQUssSUFBSSxFQUU3QkEsYUFBZ0I1SCxHQUNkMkgsRUFBaUJDLEVBQUssS0FBSyxTQUFTLEVBRXRDQSxhQUFnQjFDLEdBQ2QsQ0FBQyxNQUFTLEVBRVowQyxhQUFnQnpDLEdBQ2QsQ0FBQyxJQUFJLEVBRVB5QyxhQUFnQnRJLEVBQ2QsQ0FBQyxPQUFXLEdBQUdxSSxFQUFpQkMsRUFBSyxPQUFPLENBQUMsQ0FBQyxFQUVoREEsYUFBZ0JySSxFQUNkLENBQUMsS0FBTSxHQUFHb0ksRUFBaUJDLEVBQUssT0FBTyxDQUFDLENBQUMsRUFFM0NBLGFBQWdCM0gsSUFHaEIySCxhQUFnQnJILEdBRmRvSCxFQUFpQkMsRUFBSyxPQUFPLENBQUMsRUFLaENBLGFBQWdCekgsR0FDZHdILEVBQWlCQyxFQUFLLEtBQUssU0FBUyxFQUdwQyxDQUFDLEVBR0hLLEdBQU4sTUFBTUMsVUFBOEI5SixDQUFRLENBQy9DLE9BQU9DLEVBQU8sQ0FDVixHQUFNLENBQUUsSUFBQWQsQ0FBSSxFQUFJLEtBQUssb0JBQW9CYyxDQUFLLEVBQzlDLEdBQUlkLEVBQUksYUFBZXVGLEVBQWMsT0FDakMsT0FBQUMsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLGFBQ25CLFNBQVU4RCxFQUFjLE9BQ3hCLFNBQVV2RixFQUFJLFVBQ2xCLENBQUMsRUFDTXlGLEVBRVgsSUFBTW1GLEVBQWdCLEtBQUssY0FDckJDLEVBQXFCN0ssRUFBSSxLQUFLNEssQ0FBYSxFQUMzQ3pJLEVBQVMsS0FBSyxXQUFXLElBQUkwSSxDQUFrQixFQUNyRCxPQUFLMUksRUFRRG5DLEVBQUksT0FBTyxNQUNKbUMsRUFBTyxZQUFZLENBQ3RCLEtBQU1uQyxFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxFQUdNbUMsRUFBTyxXQUFXLENBQ3JCLEtBQU1uQyxFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxHQW5CRHdGLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSw0QkFDbkIsUUFBUyxNQUFNLEtBQUssS0FBSyxXQUFXLEtBQUssQ0FBQyxFQUMxQyxLQUFNLENBQUNtSixDQUFhLENBQ3hCLENBQUMsRUFDTW5GLEVBZ0JmLENBQ0EsSUFBSSxlQUFnQixDQUNoQixPQUFPLEtBQUssS0FBSyxhQUNyQixDQUNBLElBQUksU0FBVSxDQUNWLE9BQU8sS0FBSyxLQUFLLE9BQ3JCLENBQ0EsSUFBSSxZQUFhLENBQ2IsT0FBTyxLQUFLLEtBQUssVUFDckIsQ0FTQSxPQUFPLE9BQU9tRixFQUFlNUUsRUFBUzFGLEVBQVEsQ0FFMUMsSUFBTXdLLEVBQWEsSUFBSSxJQUV2QixRQUFXVCxLQUFRckUsRUFBUyxDQUN4QixJQUFNK0UsRUFBc0JYLEVBQWlCQyxFQUFLLE1BQU1PLENBQWEsQ0FBQyxFQUN0RSxHQUFJLENBQUNHLEVBQW9CLE9BQ3JCLE1BQU0sSUFBSSxNQUFNLG1DQUFtQ0gsQ0FBYSxtREFBbUQsRUFFdkgsUUFBV2hMLEtBQVNtTCxFQUFxQixDQUNyQyxHQUFJRCxFQUFXLElBQUlsTCxDQUFLLEVBQ3BCLE1BQU0sSUFBSSxNQUFNLDBCQUEwQixPQUFPZ0wsQ0FBYSxDQUFDLHdCQUF3QixPQUFPaEwsQ0FBSyxDQUFDLEVBQUUsRUFFMUdrTCxFQUFXLElBQUlsTCxFQUFPeUssQ0FBSSxDQUM5QixDQUNKLENBQ0EsT0FBTyxJQUFJTSxFQUFzQixDQUM3QixTQUFVOUksRUFBc0Isc0JBQ2hDLGNBQUErSSxFQUNBLFFBQUE1RSxFQUNBLFdBQUE4RSxFQUNBLEdBQUd6SyxFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLENBQ0wsQ0FDSixFQUNBLFNBQVMwSyxHQUFZQyxFQUFHQyxFQUFHLENBQ3ZCLElBQU1DLEVBQVFwSyxFQUFja0ssQ0FBQyxFQUN2QkcsRUFBUXJLLEVBQWNtSyxDQUFDLEVBQzdCLEdBQUlELElBQU1DLEVBQ04sTUFBTyxDQUFFLE1BQU8sR0FBTSxLQUFNRCxDQUFFLEVBRTdCLEdBQUlFLElBQVU1RixFQUFjLFFBQVU2RixJQUFVN0YsRUFBYyxPQUFRLENBQ3ZFLElBQU04RixFQUFReEYsRUFBSyxXQUFXcUYsQ0FBQyxFQUN6QkksRUFBYXpGLEVBQUssV0FBV29GLENBQUMsRUFBRSxPQUFRbkwsR0FBUXVMLEVBQU0sUUFBUXZMLENBQUcsSUFBTSxFQUFFLEVBQ3pFeUwsRUFBUyxDQUFFLEdBQUdOLEVBQUcsR0FBR0MsQ0FBRSxFQUM1QixRQUFXcEwsS0FBT3dMLEVBQVksQ0FDMUIsSUFBTUUsRUFBY1IsR0FBWUMsRUFBRW5MLENBQUcsRUFBR29MLEVBQUVwTCxDQUFHLENBQUMsRUFDOUMsR0FBSSxDQUFDMEwsRUFBWSxNQUNiLE1BQU8sQ0FBRSxNQUFPLEVBQU0sRUFFMUJELEVBQU96TCxDQUFHLEVBQUkwTCxFQUFZLElBQzlCLENBQ0EsTUFBTyxDQUFFLE1BQU8sR0FBTSxLQUFNRCxDQUFPLENBQ3ZDLFNBQ1NKLElBQVU1RixFQUFjLE9BQVM2RixJQUFVN0YsRUFBYyxNQUFPLENBQ3JFLEdBQUkwRixFQUFFLFNBQVdDLEVBQUUsT0FDZixNQUFPLENBQUUsTUFBTyxFQUFNLEVBRTFCLElBQU1PLEVBQVcsQ0FBQyxFQUNsQixRQUFTaEMsRUFBUSxFQUFHQSxFQUFRd0IsRUFBRSxPQUFReEIsSUFBUyxDQUMzQyxJQUFNaUMsRUFBUVQsRUFBRXhCLENBQUssRUFDZmtDLEVBQVFULEVBQUV6QixDQUFLLEVBQ2YrQixFQUFjUixHQUFZVSxFQUFPQyxDQUFLLEVBQzVDLEdBQUksQ0FBQ0gsRUFBWSxNQUNiLE1BQU8sQ0FBRSxNQUFPLEVBQU0sRUFFMUJDLEVBQVMsS0FBS0QsRUFBWSxJQUFJLENBQ2xDLENBQ0EsTUFBTyxDQUFFLE1BQU8sR0FBTSxLQUFNQyxDQUFTLENBQ3pDLEtBQ0ssUUFBSU4sSUFBVTVGLEVBQWMsTUFBUTZGLElBQVU3RixFQUFjLE1BQVEsQ0FBQzBGLEdBQU0sQ0FBQ0MsRUFDdEUsQ0FBRSxNQUFPLEdBQU0sS0FBTUQsQ0FBRSxFQUd2QixDQUFFLE1BQU8sRUFBTSxDQUU5QixDQUNPLElBQU0zSSxHQUFOLGNBQThCekIsQ0FBUSxDQUN6QyxPQUFPQyxFQUFPLENBQ1YsR0FBTSxDQUFFLE9BQUE0RSxFQUFRLElBQUExRixDQUFJLEVBQUksS0FBSyxvQkFBb0JjLENBQUssRUFDaEQ4SyxFQUFlLENBQUNDLEVBQVlDLElBQWdCLENBQzlDLEdBQUlDLEdBQVVGLENBQVUsR0FBS0UsR0FBVUQsQ0FBVyxFQUM5QyxPQUFPckcsRUFFWCxJQUFNdUcsRUFBU2hCLEdBQVlhLEVBQVcsTUFBT0MsRUFBWSxLQUFLLEVBQzlELE9BQUtFLEVBQU8sUUFNUkMsR0FBUUosQ0FBVSxHQUFLSSxHQUFRSCxDQUFXLElBQzFDcEcsRUFBTyxNQUFNLEVBRVYsQ0FBRSxPQUFRQSxFQUFPLE1BQU8sTUFBT3NHLEVBQU8sSUFBSyxJQVI5Q3hHLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSwwQkFDdkIsQ0FBQyxFQUNNZ0UsRUFNZixFQUNBLE9BQUl6RixFQUFJLE9BQU8sTUFDSixRQUFRLElBQUksQ0FDZixLQUFLLEtBQUssS0FBSyxZQUFZLENBQ3ZCLEtBQU1BLEVBQUksS0FDVixLQUFNQSxFQUFJLEtBQ1YsT0FBUUEsQ0FDWixDQUFDLEVBQ0QsS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUN4QixLQUFNQSxFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxDQUNMLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQ2tNLEVBQU1DLENBQUssSUFBTVAsRUFBYU0sRUFBTUMsQ0FBSyxDQUFDLEVBRzdDUCxFQUFhLEtBQUssS0FBSyxLQUFLLFdBQVcsQ0FDMUMsS0FBTTVMLEVBQUksS0FDVixLQUFNQSxFQUFJLEtBQ1YsT0FBUUEsQ0FDWixDQUFDLEVBQUcsS0FBSyxLQUFLLE1BQU0sV0FBVyxDQUMzQixLQUFNQSxFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxDQUFDLENBRVYsQ0FDSixFQUNBc0MsR0FBZ0IsT0FBUyxDQUFDNEosRUFBTUMsRUFBTzdMLElBQzVCLElBQUlnQyxHQUFnQixDQUN2QixLQUFNNEosRUFDTixNQUFPQyxFQUNQLFNBQVV0SyxFQUFzQixnQkFDaEMsR0FBR3hCLEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFHRSxJQUFNbUksRUFBTixNQUFNMkQsVUFBaUJ2TCxDQUFRLENBQ2xDLE9BQU9DLEVBQU8sQ0FDVixHQUFNLENBQUUsT0FBQTRFLEVBQVEsSUFBQTFGLENBQUksRUFBSSxLQUFLLG9CQUFvQmMsQ0FBSyxFQUN0RCxHQUFJZCxFQUFJLGFBQWV1RixFQUFjLE1BQ2pDLE9BQUFDLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxhQUNuQixTQUFVOEQsRUFBYyxNQUN4QixTQUFVdkYsRUFBSSxVQUNsQixDQUFDLEVBQ015RixFQUVYLEdBQUl6RixFQUFJLEtBQUssT0FBUyxLQUFLLEtBQUssTUFBTSxPQUNsQyxPQUFBd0YsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLFVBQ25CLFFBQVMsS0FBSyxLQUFLLE1BQU0sT0FDekIsVUFBVyxHQUNYLE1BQU8sR0FDUCxLQUFNLE9BQ1YsQ0FBQyxFQUNNZ0UsRUFHUCxDQURTLEtBQUssS0FBSyxNQUNWekYsRUFBSSxLQUFLLE9BQVMsS0FBSyxLQUFLLE1BQU0sU0FDM0N3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsUUFDbkIsUUFBUyxLQUFLLEtBQUssTUFBTSxPQUN6QixVQUFXLEdBQ1gsTUFBTyxHQUNQLEtBQU0sT0FDVixDQUFDLEVBQ0RpRSxFQUFPLE1BQU0sR0FFakIsSUFBTTJHLEVBQVEsQ0FBQyxHQUFHck0sRUFBSSxJQUFJLEVBQ3JCLElBQUksQ0FBQ2tJLEVBQU1vRSxJQUFjLENBQzFCLElBQU1sRSxFQUFTLEtBQUssS0FBSyxNQUFNa0UsQ0FBUyxHQUFLLEtBQUssS0FBSyxLQUN2RCxPQUFLbEUsRUFFRUEsRUFBTyxPQUFPLElBQUkxSSxFQUFtQk0sRUFBS2tJLEVBQU1sSSxFQUFJLEtBQU1zTSxDQUFTLENBQUMsRUFEaEUsSUFFZixDQUFDLEVBQ0ksT0FBUUMsR0FBTSxDQUFDLENBQUNBLENBQUMsRUFDdEIsT0FBSXZNLEVBQUksT0FBTyxNQUNKLFFBQVEsSUFBSXFNLENBQUssRUFBRSxLQUFNdkMsR0FDckI5SSxFQUFZLFdBQVcwRSxFQUFRb0UsQ0FBTyxDQUNoRCxFQUdNOUksRUFBWSxXQUFXMEUsRUFBUTJHLENBQUssQ0FFbkQsQ0FDQSxJQUFJLE9BQVEsQ0FDUixPQUFPLEtBQUssS0FBSyxLQUNyQixDQUNBLEtBQUtHLEVBQU0sQ0FDUCxPQUFPLElBQUlKLEVBQVMsQ0FDaEIsR0FBRyxLQUFLLEtBQ1IsS0FBQUksQ0FDSixDQUFDLENBQ0wsQ0FDSixFQUNBL0QsRUFBUyxPQUFTLENBQUNnRSxFQUFTbk0sSUFBVyxDQUNuQyxHQUFJLENBQUMsTUFBTSxRQUFRbU0sQ0FBTyxFQUN0QixNQUFNLElBQUksTUFBTSx1REFBdUQsRUFFM0UsT0FBTyxJQUFJaEUsRUFBUyxDQUNoQixNQUFPZ0UsRUFDUCxTQUFVNUssRUFBc0IsU0FDaEMsS0FBTSxLQUNOLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLENBQ0wsRUFDTyxJQUFNb00sR0FBTixNQUFNQyxVQUFrQjlMLENBQVEsQ0FDbkMsSUFBSSxXQUFZLENBQ1osT0FBTyxLQUFLLEtBQUssT0FDckIsQ0FDQSxJQUFJLGFBQWMsQ0FDZCxPQUFPLEtBQUssS0FBSyxTQUNyQixDQUNBLE9BQU9DLEVBQU8sQ0FDVixHQUFNLENBQUUsT0FBQTRFLEVBQVEsSUFBQTFGLENBQUksRUFBSSxLQUFLLG9CQUFvQmMsQ0FBSyxFQUN0RCxHQUFJZCxFQUFJLGFBQWV1RixFQUFjLE9BQ2pDLE9BQUFDLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxhQUNuQixTQUFVOEQsRUFBYyxPQUN4QixTQUFVdkYsRUFBSSxVQUNsQixDQUFDLEVBQ015RixFQUVYLElBQU1zRCxFQUFRLENBQUMsRUFDVDZELEVBQVUsS0FBSyxLQUFLLFFBQ3BCQyxFQUFZLEtBQUssS0FBSyxVQUM1QixRQUFXL00sS0FBT0UsRUFBSSxLQUNsQitJLEVBQU0sS0FBSyxDQUNQLElBQUs2RCxFQUFRLE9BQU8sSUFBSWxOLEVBQW1CTSxFQUFLRixFQUFLRSxFQUFJLEtBQU1GLENBQUcsQ0FBQyxFQUNuRSxNQUFPK00sRUFBVSxPQUFPLElBQUluTixFQUFtQk0sRUFBS0EsRUFBSSxLQUFLRixDQUFHLEVBQUdFLEVBQUksS0FBTUYsQ0FBRyxDQUFDLEVBQ2pGLFVBQVdBLEtBQU9FLEVBQUksSUFDMUIsQ0FBQyxFQUVMLE9BQUlBLEVBQUksT0FBTyxNQUNKZ0IsRUFBWSxpQkFBaUIwRSxFQUFRcUQsQ0FBSyxFQUcxQy9ILEVBQVksZ0JBQWdCMEUsRUFBUXFELENBQUssQ0FFeEQsQ0FDQSxJQUFJLFNBQVUsQ0FDVixPQUFPLEtBQUssS0FBSyxTQUNyQixDQUNBLE9BQU8sT0FBTytELEVBQU9DLEVBQVFDLEVBQU8sQ0FDaEMsT0FBSUQsYUFBa0JsTSxFQUNYLElBQUk4TCxFQUFVLENBQ2pCLFFBQVNHLEVBQ1QsVUFBV0MsRUFDWCxTQUFVbEwsRUFBc0IsVUFDaEMsR0FBR3hCLEVBQW9CMk0sQ0FBSyxDQUNoQyxDQUFDLEVBRUUsSUFBSUwsRUFBVSxDQUNqQixRQUFTdEgsRUFBVSxPQUFPLEVBQzFCLFVBQVd5SCxFQUNYLFNBQVVqTCxFQUFzQixVQUNoQyxHQUFHeEIsRUFBb0IwTSxDQUFNLENBQ2pDLENBQUMsQ0FDTCxDQUNKLEVBQ2FFLEdBQU4sY0FBcUJwTSxDQUFRLENBQ2hDLElBQUksV0FBWSxDQUNaLE9BQU8sS0FBSyxLQUFLLE9BQ3JCLENBQ0EsSUFBSSxhQUFjLENBQ2QsT0FBTyxLQUFLLEtBQUssU0FDckIsQ0FDQSxPQUFPQyxFQUFPLENBQ1YsR0FBTSxDQUFFLE9BQUE0RSxFQUFRLElBQUExRixDQUFJLEVBQUksS0FBSyxvQkFBb0JjLENBQUssRUFDdEQsR0FBSWQsRUFBSSxhQUFldUYsRUFBYyxJQUNqQyxPQUFBQyxFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVThELEVBQWMsSUFDeEIsU0FBVXZGLEVBQUksVUFDbEIsQ0FBQyxFQUNNeUYsRUFFWCxJQUFNbUgsRUFBVSxLQUFLLEtBQUssUUFDcEJDLEVBQVksS0FBSyxLQUFLLFVBQ3RCOUQsRUFBUSxDQUFDLEdBQUcvSSxFQUFJLEtBQUssUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUNGLEVBQUtGLENBQUssRUFBRzZKLEtBQzlDLENBQ0gsSUFBS21ELEVBQVEsT0FBTyxJQUFJbE4sRUFBbUJNLEVBQUtGLEVBQUtFLEVBQUksS0FBTSxDQUFDeUosRUFBTyxLQUFLLENBQUMsQ0FBQyxFQUM5RSxNQUFPb0QsRUFBVSxPQUFPLElBQUluTixFQUFtQk0sRUFBS0osRUFBT0ksRUFBSSxLQUFNLENBQUN5SixFQUFPLE9BQU8sQ0FBQyxDQUFDLENBQzFGLEVBQ0gsRUFDRCxHQUFJekosRUFBSSxPQUFPLE1BQU8sQ0FDbEIsSUFBTWtOLEVBQVcsSUFBSSxJQUNyQixPQUFPLFFBQVEsUUFBUSxFQUFFLEtBQUssU0FBWSxDQUN0QyxRQUFXOUQsS0FBUUwsRUFBTyxDQUN0QixJQUFNakosRUFBTSxNQUFNc0osRUFBSyxJQUNqQnhKLEVBQVEsTUFBTXdKLEVBQUssTUFDekIsR0FBSXRKLEVBQUksU0FBVyxXQUFhRixFQUFNLFNBQVcsVUFDN0MsT0FBTzZGLEdBRVAzRixFQUFJLFNBQVcsU0FBV0YsRUFBTSxTQUFXLFVBQzNDOEYsRUFBTyxNQUFNLEVBRWpCd0gsRUFBUyxJQUFJcE4sRUFBSSxNQUFPRixFQUFNLEtBQUssQ0FDdkMsQ0FDQSxNQUFPLENBQUUsT0FBUThGLEVBQU8sTUFBTyxNQUFPd0gsQ0FBUyxDQUNuRCxDQUFDLENBQ0wsS0FDSyxDQUNELElBQU1BLEVBQVcsSUFBSSxJQUNyQixRQUFXOUQsS0FBUUwsRUFBTyxDQUN0QixJQUFNakosRUFBTXNKLEVBQUssSUFDWHhKLEVBQVF3SixFQUFLLE1BQ25CLEdBQUl0SixFQUFJLFNBQVcsV0FBYUYsRUFBTSxTQUFXLFVBQzdDLE9BQU82RixHQUVQM0YsRUFBSSxTQUFXLFNBQVdGLEVBQU0sU0FBVyxVQUMzQzhGLEVBQU8sTUFBTSxFQUVqQndILEVBQVMsSUFBSXBOLEVBQUksTUFBT0YsRUFBTSxLQUFLLENBQ3ZDLENBQ0EsTUFBTyxDQUFFLE9BQVE4RixFQUFPLE1BQU8sTUFBT3dILENBQVMsQ0FDbkQsQ0FDSixDQUNKLEVBQ0FELEdBQU8sT0FBUyxDQUFDTCxFQUFTQyxFQUFXdk0sSUFDMUIsSUFBSTJNLEdBQU8sQ0FDZCxVQUFBSixFQUNBLFFBQUFELEVBQ0EsU0FBVS9LLEVBQXNCLE9BQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTTZNLEdBQU4sTUFBTUMsVUFBZXZNLENBQVEsQ0FDaEMsT0FBT0MsRUFBTyxDQUNWLEdBQU0sQ0FBRSxPQUFBNEUsRUFBUSxJQUFBMUYsQ0FBSSxFQUFJLEtBQUssb0JBQW9CYyxDQUFLLEVBQ3RELEdBQUlkLEVBQUksYUFBZXVGLEVBQWMsSUFDakMsT0FBQUMsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLGFBQ25CLFNBQVU4RCxFQUFjLElBQ3hCLFNBQVV2RixFQUFJLFVBQ2xCLENBQUMsRUFDTXlGLEVBRVgsSUFBTTNELEVBQU0sS0FBSyxLQUNiQSxFQUFJLFVBQVksTUFDWjlCLEVBQUksS0FBSyxLQUFPOEIsRUFBSSxRQUFRLFFBQzVCMEQsRUFBa0J4RixFQUFLLENBQ25CLEtBQU15QixFQUFhLFVBQ25CLFFBQVNLLEVBQUksUUFBUSxNQUNyQixLQUFNLE1BQ04sVUFBVyxHQUNYLE1BQU8sR0FDUCxRQUFTQSxFQUFJLFFBQVEsT0FDekIsQ0FBQyxFQUNENEQsRUFBTyxNQUFNLEdBR2pCNUQsRUFBSSxVQUFZLE1BQ1o5QixFQUFJLEtBQUssS0FBTzhCLEVBQUksUUFBUSxRQUM1QjBELEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxRQUNuQixRQUFTSyxFQUFJLFFBQVEsTUFDckIsS0FBTSxNQUNOLFVBQVcsR0FDWCxNQUFPLEdBQ1AsUUFBU0EsRUFBSSxRQUFRLE9BQ3pCLENBQUMsRUFDRDRELEVBQU8sTUFBTSxHQUdyQixJQUFNbUgsRUFBWSxLQUFLLEtBQUssVUFDNUIsU0FBU1EsRUFBWUMsRUFBVSxDQUMzQixJQUFNQyxFQUFZLElBQUksSUFDdEIsUUFBV0MsS0FBV0YsRUFBVSxDQUM1QixHQUFJRSxFQUFRLFNBQVcsVUFDbkIsT0FBTy9ILEVBQ1ArSCxFQUFRLFNBQVcsU0FDbkI5SCxFQUFPLE1BQU0sRUFDakI2SCxFQUFVLElBQUlDLEVBQVEsS0FBSyxDQUMvQixDQUNBLE1BQU8sQ0FBRSxPQUFROUgsRUFBTyxNQUFPLE1BQU82SCxDQUFVLENBQ3BELENBQ0EsSUFBTUQsRUFBVyxDQUFDLEdBQUd0TixFQUFJLEtBQUssT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDa0ksRUFBTUMsSUFBTTBFLEVBQVUsT0FBTyxJQUFJbk4sRUFBbUJNLEVBQUtrSSxFQUFNbEksRUFBSSxLQUFNbUksQ0FBQyxDQUFDLENBQUMsRUFDekgsT0FBSW5JLEVBQUksT0FBTyxNQUNKLFFBQVEsSUFBSXNOLENBQVEsRUFBRSxLQUFNQSxHQUFhRCxFQUFZQyxDQUFRLENBQUMsRUFHOURELEVBQVlDLENBQVEsQ0FFbkMsQ0FDQSxJQUFJRyxFQUFTN00sRUFBUyxDQUNsQixPQUFPLElBQUl3TSxFQUFPLENBQ2QsR0FBRyxLQUFLLEtBQ1IsUUFBUyxDQUFFLE1BQU9LLEVBQVMsUUFBUzFILEVBQVUsU0FBU25GLENBQU8sQ0FBRSxDQUNwRSxDQUFDLENBQ0wsQ0FDQSxJQUFJOE0sRUFBUzlNLEVBQVMsQ0FDbEIsT0FBTyxJQUFJd00sRUFBTyxDQUNkLEdBQUcsS0FBSyxLQUNSLFFBQVMsQ0FBRSxNQUFPTSxFQUFTLFFBQVMzSCxFQUFVLFNBQVNuRixDQUFPLENBQUUsQ0FDcEUsQ0FBQyxDQUNMLENBQ0EsS0FBSytNLEVBQU0vTSxFQUFTLENBQ2hCLE9BQU8sS0FBSyxJQUFJK00sRUFBTS9NLENBQU8sRUFBRSxJQUFJK00sRUFBTS9NLENBQU8sQ0FDcEQsQ0FDQSxTQUFTQSxFQUFTLENBQ2QsT0FBTyxLQUFLLElBQUksRUFBR0EsQ0FBTyxDQUM5QixDQUNKLEVBQ0F1TSxHQUFPLE9BQVMsQ0FBQ04sRUFBV3ZNLElBQ2pCLElBQUk2TSxHQUFPLENBQ2QsVUFBQU4sRUFDQSxRQUFTLEtBQ1QsUUFBUyxLQUNULFNBQVVoTCxFQUFzQixPQUNoQyxHQUFHeEIsRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQUVFLElBQU1zTixHQUFOLE1BQU1DLFVBQW9CaE4sQ0FBUSxDQUNyQyxhQUFjLENBQ1YsTUFBTSxHQUFHLFNBQVMsRUFDbEIsS0FBSyxTQUFXLEtBQUssU0FDekIsQ0FDQSxPQUFPQyxFQUFPLENBQ1YsR0FBTSxDQUFFLElBQUFkLENBQUksRUFBSSxLQUFLLG9CQUFvQmMsQ0FBSyxFQUM5QyxHQUFJZCxFQUFJLGFBQWV1RixFQUFjLFNBQ2pDLE9BQUFDLEVBQWtCeEYsRUFBSyxDQUNuQixLQUFNeUIsRUFBYSxhQUNuQixTQUFVOEQsRUFBYyxTQUN4QixTQUFVdkYsRUFBSSxVQUNsQixDQUFDLEVBQ015RixFQUVYLFNBQVNxSSxFQUFjMUosRUFBTWpFLEVBQU8sQ0FDaEMsT0FBTzROLEdBQVUsQ0FDYixLQUFNM0osRUFDTixLQUFNcEUsRUFBSSxLQUNWLFVBQVcsQ0FBQ0EsRUFBSSxPQUFPLG1CQUFvQkEsRUFBSSxlQUFnQmdPLEdBQVksRUFBR0MsQ0FBZSxFQUFFLE9BQVExQixHQUFNLENBQUMsQ0FBQ0EsQ0FBQyxFQUNoSCxVQUFXLENBQ1AsS0FBTTlLLEVBQWEsa0JBQ25CLGVBQWdCdEIsQ0FDcEIsQ0FDSixDQUFDLENBQ0wsQ0FDQSxTQUFTK04sRUFBaUJDLEVBQVNoTyxFQUFPLENBQ3RDLE9BQU80TixHQUFVLENBQ2IsS0FBTUksRUFDTixLQUFNbk8sRUFBSSxLQUNWLFVBQVcsQ0FBQ0EsRUFBSSxPQUFPLG1CQUFvQkEsRUFBSSxlQUFnQmdPLEdBQVksRUFBR0MsQ0FBZSxFQUFFLE9BQVExQixHQUFNLENBQUMsQ0FBQ0EsQ0FBQyxFQUNoSCxVQUFXLENBQ1AsS0FBTTlLLEVBQWEsb0JBQ25CLGdCQUFpQnRCLENBQ3JCLENBQ0osQ0FBQyxDQUNMLENBQ0EsSUFBTUcsRUFBUyxDQUFFLFNBQVVOLEVBQUksT0FBTyxrQkFBbUIsRUFDbkRvTyxFQUFLcE8sRUFBSSxLQUNmLEdBQUksS0FBSyxLQUFLLG1CQUFtQmtDLEVBQVksQ0FJekMsSUFBTW1NLEVBQUssS0FDWCxPQUFPaEgsRUFBRyxrQkFBbUJqRCxFQUFNLENBQy9CLElBQU1qRSxFQUFRLElBQUlDLEVBQVMsQ0FBQyxDQUFDLEVBQ3ZCa08sRUFBYSxNQUFNRCxFQUFHLEtBQUssS0FBSyxXQUFXakssRUFBTTlELENBQU0sRUFBRSxNQUFPaU8sR0FBTSxDQUN4RSxNQUFBcE8sRUFBTSxTQUFTMk4sRUFBYzFKLEVBQU1tSyxDQUFDLENBQUMsRUFDL0JwTyxDQUNWLENBQUMsRUFDS0YsRUFBUyxNQUFNLFFBQVEsTUFBTW1PLEVBQUksS0FBTUUsQ0FBVSxFQU92RCxPQU5zQixNQUFNRCxFQUFHLEtBQUssUUFBUSxLQUFLLEtBQzVDLFdBQVdwTyxFQUFRSyxDQUFNLEVBQ3pCLE1BQU9pTyxHQUFNLENBQ2QsTUFBQXBPLEVBQU0sU0FBUytOLEVBQWlCak8sRUFBUXNPLENBQUMsQ0FBQyxFQUNwQ3BPLENBQ1YsQ0FBQyxDQUVMLENBQUMsQ0FDTCxLQUNLLENBSUQsSUFBTWtPLEVBQUssS0FDWCxPQUFPaEgsRUFBRyxZQUFhakQsRUFBTSxDQUN6QixJQUFNa0ssRUFBYUQsRUFBRyxLQUFLLEtBQUssVUFBVWpLLEVBQU05RCxDQUFNLEVBQ3RELEdBQUksQ0FBQ2dPLEVBQVcsUUFDWixNQUFNLElBQUlsTyxFQUFTLENBQUMwTixFQUFjMUosRUFBTWtLLEVBQVcsS0FBSyxDQUFDLENBQUMsRUFFOUQsSUFBTXJPLEVBQVMsUUFBUSxNQUFNbU8sRUFBSSxLQUFNRSxFQUFXLElBQUksRUFDaERFLEVBQWdCSCxFQUFHLEtBQUssUUFBUSxVQUFVcE8sRUFBUUssQ0FBTSxFQUM5RCxHQUFJLENBQUNrTyxFQUFjLFFBQ2YsTUFBTSxJQUFJcE8sRUFBUyxDQUFDOE4sRUFBaUJqTyxFQUFRdU8sRUFBYyxLQUFLLENBQUMsQ0FBQyxFQUV0RSxPQUFPQSxFQUFjLElBQ3pCLENBQUMsQ0FDTCxDQUNKLENBQ0EsWUFBYSxDQUNULE9BQU8sS0FBSyxLQUFLLElBQ3JCLENBQ0EsWUFBYSxDQUNULE9BQU8sS0FBSyxLQUFLLE9BQ3JCLENBQ0EsUUFBUW5DLEVBQU8sQ0FDWCxPQUFPLElBQUl3QixFQUFZLENBQ25CLEdBQUcsS0FBSyxLQUNSLEtBQU1wRixFQUFTLE9BQU80RCxDQUFLLEVBQUUsS0FBS3ZFLEVBQVcsT0FBTyxDQUFDLENBQ3pELENBQUMsQ0FDTCxDQUNBLFFBQVEyRyxFQUFZLENBQ2hCLE9BQU8sSUFBSVosRUFBWSxDQUNuQixHQUFHLEtBQUssS0FDUixRQUFTWSxDQUNiLENBQUMsQ0FDTCxDQUNBLFVBQVVDLEVBQU0sQ0FFWixPQURzQixLQUFLLE1BQU1BLENBQUksQ0FFekMsQ0FDQSxnQkFBZ0JBLEVBQU0sQ0FFbEIsT0FEc0IsS0FBSyxNQUFNQSxDQUFJLENBRXpDLENBQ0EsT0FBTyxPQUFPdEssRUFBTStKLEVBQVM3TixFQUFRLENBQ2pDLE9BQU8sSUFBSXVOLEVBQVksQ0FDbkIsS0FBT3pKLEdBQWNxRSxFQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBS1gsRUFBVyxPQUFPLENBQUMsRUFDakUsUUFBU3FHLEdBQVdyRyxFQUFXLE9BQU8sRUFDdEMsU0FBVWpHLEVBQXNCLFlBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLENBQ0wsQ0FDSixFQUNhZ0ssR0FBTixjQUFzQnpKLENBQVEsQ0FDakMsSUFBSSxRQUFTLENBQ1QsT0FBTyxLQUFLLEtBQUssT0FBTyxDQUM1QixDQUNBLE9BQU9DLEVBQU8sQ0FDVixHQUFNLENBQUUsSUFBQWQsQ0FBSSxFQUFJLEtBQUssb0JBQW9CYyxDQUFLLEVBRTlDLE9BRG1CLEtBQUssS0FBSyxPQUFPLEVBQ2xCLE9BQU8sQ0FBRSxLQUFNZCxFQUFJLEtBQU0sS0FBTUEsRUFBSSxLQUFNLE9BQVFBLENBQUksQ0FBQyxDQUM1RSxDQUNKLEVBQ0FzSyxHQUFRLE9BQVMsQ0FBQ3FFLEVBQVFyTyxJQUNmLElBQUlnSyxHQUFRLENBQ2YsT0FBUXFFLEVBQ1IsU0FBVTlNLEVBQXNCLFFBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTWlLLEdBQU4sY0FBeUIxSixDQUFRLENBQ3BDLE9BQU9DLEVBQU8sQ0FDVixHQUFJQSxFQUFNLE9BQVMsS0FBSyxLQUFLLE1BQU8sQ0FDaEMsSUFBTWQsRUFBTSxLQUFLLGdCQUFnQmMsQ0FBSyxFQUN0QyxPQUFBMEUsRUFBa0J4RixFQUFLLENBQ25CLFNBQVVBLEVBQUksS0FDZCxLQUFNeUIsRUFBYSxnQkFDbkIsU0FBVSxLQUFLLEtBQUssS0FDeEIsQ0FBQyxFQUNNZ0UsQ0FDWCxDQUNBLE1BQU8sQ0FBRSxPQUFRLFFBQVMsTUFBTzNFLEVBQU0sSUFBSyxDQUNoRCxDQUNBLElBQUksT0FBUSxDQUNSLE9BQU8sS0FBSyxLQUFLLEtBQ3JCLENBQ0osRUFDQXlKLEdBQVcsT0FBUyxDQUFDM0ssRUFBT1UsSUFDakIsSUFBSWlLLEdBQVcsQ0FDbEIsTUFBTzNLLEVBQ1AsU0FBVWlDLEVBQXNCLFdBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUwsU0FBU3NKLEdBQWNnRixFQUFRdE8sRUFBUSxDQUNuQyxPQUFPLElBQUlrSyxHQUFRLENBQ2YsT0FBQW9FLEVBQ0EsU0FBVS9NLEVBQXNCLFFBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLENBQ0wsQ0FDTyxJQUFNa0ssR0FBTixNQUFNcUUsVUFBZ0JoTyxDQUFRLENBQ2pDLE9BQU9DLEVBQU8sQ0FDVixHQUFJLE9BQU9BLEVBQU0sTUFBUyxTQUFVLENBQ2hDLElBQU1kLEVBQU0sS0FBSyxnQkFBZ0JjLENBQUssRUFDaENnTyxFQUFpQixLQUFLLEtBQUssT0FDakMsT0FBQXRKLEVBQWtCeEYsRUFBSyxDQUNuQixTQUFVNkYsRUFBSyxXQUFXaUosQ0FBYyxFQUN4QyxTQUFVOU8sRUFBSSxXQUNkLEtBQU15QixFQUFhLFlBQ3ZCLENBQUMsRUFDTWdFLENBQ1gsQ0FJQSxHQUhLLEtBQUssU0FDTixLQUFLLE9BQVMsSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLEdBRXRDLENBQUMsS0FBSyxPQUFPLElBQUkzRSxFQUFNLElBQUksRUFBRyxDQUM5QixJQUFNZCxFQUFNLEtBQUssZ0JBQWdCYyxDQUFLLEVBQ2hDZ08sRUFBaUIsS0FBSyxLQUFLLE9BQ2pDLE9BQUF0SixFQUFrQnhGLEVBQUssQ0FDbkIsU0FBVUEsRUFBSSxLQUNkLEtBQU15QixFQUFhLG1CQUNuQixRQUFTcU4sQ0FDYixDQUFDLEVBQ01ySixDQUNYLENBQ0EsT0FBTzRCLEVBQUd2RyxFQUFNLElBQUksQ0FDeEIsQ0FDQSxJQUFJLFNBQVUsQ0FDVixPQUFPLEtBQUssS0FBSyxNQUNyQixDQUNBLElBQUksTUFBTyxDQUNQLElBQU1pTyxFQUFhLENBQUMsRUFDcEIsUUFBV3hOLEtBQU8sS0FBSyxLQUFLLE9BQ3hCd04sRUFBV3hOLENBQUcsRUFBSUEsRUFFdEIsT0FBT3dOLENBQ1gsQ0FDQSxJQUFJLFFBQVMsQ0FDVCxJQUFNQSxFQUFhLENBQUMsRUFDcEIsUUFBV3hOLEtBQU8sS0FBSyxLQUFLLE9BQ3hCd04sRUFBV3hOLENBQUcsRUFBSUEsRUFFdEIsT0FBT3dOLENBQ1gsQ0FDQSxJQUFJLE1BQU8sQ0FDUCxJQUFNQSxFQUFhLENBQUMsRUFDcEIsUUFBV3hOLEtBQU8sS0FBSyxLQUFLLE9BQ3hCd04sRUFBV3hOLENBQUcsRUFBSUEsRUFFdEIsT0FBT3dOLENBQ1gsQ0FDQSxRQUFRSCxFQUFRSSxFQUFTLEtBQUssS0FBTSxDQUNoQyxPQUFPSCxFQUFRLE9BQU9ELEVBQVEsQ0FDMUIsR0FBRyxLQUFLLEtBQ1IsR0FBR0ksQ0FDUCxDQUFDLENBQ0wsQ0FDQSxRQUFRSixFQUFRSSxFQUFTLEtBQUssS0FBTSxDQUNoQyxPQUFPSCxFQUFRLE9BQU8sS0FBSyxRQUFRLE9BQVFJLEdBQVEsQ0FBQ0wsRUFBTyxTQUFTSyxDQUFHLENBQUMsRUFBRyxDQUN2RSxHQUFHLEtBQUssS0FDUixHQUFHRCxDQUNQLENBQUMsQ0FDTCxDQUNKLEVBQ0F4RSxHQUFRLE9BQVNaLEdBQ1YsSUFBTWEsR0FBTixjQUE0QjVKLENBQVEsQ0FDdkMsT0FBT0MsRUFBTyxDQUNWLElBQU1vTyxFQUFtQnJKLEVBQUssbUJBQW1CLEtBQUssS0FBSyxNQUFNLEVBQzNEN0YsRUFBTSxLQUFLLGdCQUFnQmMsQ0FBSyxFQUN0QyxHQUFJZCxFQUFJLGFBQWV1RixFQUFjLFFBQVV2RixFQUFJLGFBQWV1RixFQUFjLE9BQVEsQ0FDcEYsSUFBTXVKLEVBQWlCakosRUFBSyxhQUFhcUosQ0FBZ0IsRUFDekQsT0FBQTFKLEVBQWtCeEYsRUFBSyxDQUNuQixTQUFVNkYsRUFBSyxXQUFXaUosQ0FBYyxFQUN4QyxTQUFVOU8sRUFBSSxXQUNkLEtBQU15QixFQUFhLFlBQ3ZCLENBQUMsRUFDTWdFLENBQ1gsQ0FJQSxHQUhLLEtBQUssU0FDTixLQUFLLE9BQVMsSUFBSSxJQUFJSSxFQUFLLG1CQUFtQixLQUFLLEtBQUssTUFBTSxDQUFDLEdBRS9ELENBQUMsS0FBSyxPQUFPLElBQUkvRSxFQUFNLElBQUksRUFBRyxDQUM5QixJQUFNZ08sRUFBaUJqSixFQUFLLGFBQWFxSixDQUFnQixFQUN6RCxPQUFBMUosRUFBa0J4RixFQUFLLENBQ25CLFNBQVVBLEVBQUksS0FDZCxLQUFNeUIsRUFBYSxtQkFDbkIsUUFBU3FOLENBQ2IsQ0FBQyxFQUNNckosQ0FDWCxDQUNBLE9BQU80QixFQUFHdkcsRUFBTSxJQUFJLENBQ3hCLENBQ0EsSUFBSSxNQUFPLENBQ1AsT0FBTyxLQUFLLEtBQUssTUFDckIsQ0FDSixFQUNBMkosR0FBYyxPQUFTLENBQUNtRSxFQUFRdE8sSUFDckIsSUFBSW1LLEdBQWMsQ0FDckIsT0FBUW1FLEVBQ1IsU0FBVS9NLEVBQXNCLGNBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTTRCLEVBQU4sY0FBeUJyQixDQUFRLENBQ3BDLFFBQVMsQ0FDTCxPQUFPLEtBQUssS0FBSyxJQUNyQixDQUNBLE9BQU9DLEVBQU8sQ0FDVixHQUFNLENBQUUsSUFBQWQsQ0FBSSxFQUFJLEtBQUssb0JBQW9CYyxDQUFLLEVBQzlDLEdBQUlkLEVBQUksYUFBZXVGLEVBQWMsU0FBV3ZGLEVBQUksT0FBTyxRQUFVLEdBQ2pFLE9BQUF3RixFQUFrQnhGLEVBQUssQ0FDbkIsS0FBTXlCLEVBQWEsYUFDbkIsU0FBVThELEVBQWMsUUFDeEIsU0FBVXZGLEVBQUksVUFDbEIsQ0FBQyxFQUNNeUYsRUFFWCxJQUFNMEosRUFBY25QLEVBQUksYUFBZXVGLEVBQWMsUUFBVXZGLEVBQUksS0FBTyxRQUFRLFFBQVFBLEVBQUksSUFBSSxFQUNsRyxPQUFPcUgsRUFBRzhILEVBQVksS0FBTWpPLEdBQ2pCLEtBQUssS0FBSyxLQUFLLFdBQVdBLEVBQU0sQ0FDbkMsS0FBTWxCLEVBQUksS0FDVixTQUFVQSxFQUFJLE9BQU8sa0JBQ3pCLENBQUMsQ0FDSixDQUFDLENBQ04sQ0FDSixFQUNBa0MsRUFBVyxPQUFTLENBQUNrRyxFQUFROUgsSUFDbEIsSUFBSTRCLEVBQVcsQ0FDbEIsS0FBTWtHLEVBQ04sU0FBVXZHLEVBQXNCLFdBQ2hDLEdBQUd4QixFQUFvQkMsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTXNCLEVBQU4sY0FBeUJmLENBQVEsQ0FDcEMsV0FBWSxDQUNSLE9BQU8sS0FBSyxLQUFLLE1BQ3JCLENBQ0EsWUFBYSxDQUNULE9BQU8sS0FBSyxLQUFLLE9BQU8sS0FBSyxXQUFhZ0IsRUFBc0IsV0FDMUQsS0FBSyxLQUFLLE9BQU8sV0FBVyxFQUM1QixLQUFLLEtBQUssTUFDcEIsQ0FDQSxPQUFPZixFQUFPLENBQ1YsR0FBTSxDQUFFLE9BQUE0RSxFQUFRLElBQUExRixDQUFJLEVBQUksS0FBSyxvQkFBb0JjLENBQUssRUFDaERzTyxFQUFTLEtBQUssS0FBSyxRQUFVLEtBQzdCQyxFQUFXLENBQ2IsU0FBV0MsR0FBUSxDQUNmOUosRUFBa0J4RixFQUFLc1AsQ0FBRyxFQUN0QkEsRUFBSSxNQUNKNUosRUFBTyxNQUFNLEVBR2JBLEVBQU8sTUFBTSxDQUVyQixFQUNBLElBQUksTUFBTyxDQUNQLE9BQU8xRixFQUFJLElBQ2YsQ0FDSixFQUVBLEdBREFxUCxFQUFTLFNBQVdBLEVBQVMsU0FBUyxLQUFLQSxDQUFRLEVBQy9DRCxFQUFPLE9BQVMsYUFBYyxDQUM5QixJQUFNRyxFQUFZSCxFQUFPLFVBQVVwUCxFQUFJLEtBQU1xUCxDQUFRLEVBQ3JELEdBQUlyUCxFQUFJLE9BQU8sTUFDWCxPQUFPLFFBQVEsUUFBUXVQLENBQVMsRUFBRSxLQUFLLE1BQU9BLEdBQWMsQ0FDeEQsR0FBSTdKLEVBQU8sUUFBVSxVQUNqQixPQUFPRCxFQUNYLElBQU14RixFQUFTLE1BQU0sS0FBSyxLQUFLLE9BQU8sWUFBWSxDQUM5QyxLQUFNc1AsRUFDTixLQUFNdlAsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxFQUNELE9BQUlDLEVBQU8sU0FBVyxVQUNYd0YsRUFDUHhGLEVBQU8sU0FBVyxRQUNYdVAsRUFBTXZQLEVBQU8sS0FBSyxFQUN6QnlGLEVBQU8sUUFBVSxRQUNWOEosRUFBTXZQLEVBQU8sS0FBSyxFQUN0QkEsQ0FDWCxDQUFDLEVBRUEsQ0FDRCxHQUFJeUYsRUFBTyxRQUFVLFVBQ2pCLE9BQU9ELEVBQ1gsSUFBTXhGLEVBQVMsS0FBSyxLQUFLLE9BQU8sV0FBVyxDQUN2QyxLQUFNc1AsRUFDTixLQUFNdlAsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxFQUNELE9BQUlDLEVBQU8sU0FBVyxVQUNYd0YsRUFDUHhGLEVBQU8sU0FBVyxRQUNYdVAsRUFBTXZQLEVBQU8sS0FBSyxFQUN6QnlGLEVBQU8sUUFBVSxRQUNWOEosRUFBTXZQLEVBQU8sS0FBSyxFQUN0QkEsQ0FDWCxDQUNKLENBQ0EsR0FBSW1QLEVBQU8sT0FBUyxhQUFjLENBQzlCLElBQU1LLEVBQXFCQyxHQUFRLENBQy9CLElBQU16UCxFQUFTbVAsRUFBTyxXQUFXTSxFQUFLTCxDQUFRLEVBQzlDLEdBQUlyUCxFQUFJLE9BQU8sTUFDWCxPQUFPLFFBQVEsUUFBUUMsQ0FBTSxFQUVqQyxHQUFJQSxhQUFrQixRQUNsQixNQUFNLElBQUksTUFBTSwyRkFBMkYsRUFFL0csT0FBT3lQLENBQ1gsRUFDQSxHQUFJMVAsRUFBSSxPQUFPLFFBQVUsR0FBTyxDQUM1QixJQUFNMlAsRUFBUSxLQUFLLEtBQUssT0FBTyxXQUFXLENBQ3RDLEtBQU0zUCxFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxFQUNELE9BQUkyUCxFQUFNLFNBQVcsVUFDVmxLLEdBQ1BrSyxFQUFNLFNBQVcsU0FDakJqSyxFQUFPLE1BQU0sRUFFakIrSixFQUFrQkUsRUFBTSxLQUFLLEVBQ3RCLENBQUUsT0FBUWpLLEVBQU8sTUFBTyxNQUFPaUssRUFBTSxLQUFNLEVBQ3RELEtBRUksUUFBTyxLQUFLLEtBQUssT0FBTyxZQUFZLENBQUUsS0FBTTNQLEVBQUksS0FBTSxLQUFNQSxFQUFJLEtBQU0sT0FBUUEsQ0FBSSxDQUFDLEVBQUUsS0FBTTJQLEdBQ25GQSxFQUFNLFNBQVcsVUFDVmxLLEdBQ1BrSyxFQUFNLFNBQVcsU0FDakJqSyxFQUFPLE1BQU0sRUFDVitKLEVBQWtCRSxFQUFNLEtBQUssRUFBRSxLQUFLLEtBQ2hDLENBQUUsT0FBUWpLLEVBQU8sTUFBTyxNQUFPaUssRUFBTSxLQUFNLEVBQ3JELEVBQ0osQ0FFVCxDQUNBLEdBQUlQLEVBQU8sT0FBUyxZQUNoQixHQUFJcFAsRUFBSSxPQUFPLFFBQVUsR0FBTyxDQUM1QixJQUFNNFAsRUFBTyxLQUFLLEtBQUssT0FBTyxXQUFXLENBQ3JDLEtBQU01UCxFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxFQUNELEdBQUksQ0FBQ0UsRUFBUTBQLENBQUksRUFDYixPQUFPbkssRUFDWCxJQUFNeEYsRUFBU21QLEVBQU8sVUFBVVEsRUFBSyxNQUFPUCxDQUFRLEVBQ3BELEdBQUlwUCxhQUFrQixRQUNsQixNQUFNLElBQUksTUFBTSxpR0FBaUcsRUFFckgsTUFBTyxDQUFFLE9BQVF5RixFQUFPLE1BQU8sTUFBT3pGLENBQU8sQ0FDakQsS0FFSSxRQUFPLEtBQUssS0FBSyxPQUFPLFlBQVksQ0FBRSxLQUFNRCxFQUFJLEtBQU0sS0FBTUEsRUFBSSxLQUFNLE9BQVFBLENBQUksQ0FBQyxFQUFFLEtBQU00UCxHQUNsRjFQLEVBQVEwUCxDQUFJLEVBRVYsUUFBUSxRQUFRUixFQUFPLFVBQVVRLEVBQUssTUFBT1AsQ0FBUSxDQUFDLEVBQUUsS0FBTXBQLElBQVksQ0FDN0UsT0FBUXlGLEVBQU8sTUFDZixNQUFPekYsQ0FDWCxFQUFFLEVBSlN3RixDQUtkLEVBR1RJLEVBQUssWUFBWXVKLENBQU0sQ0FDM0IsQ0FDSixFQUNBeE4sRUFBVyxPQUFTLENBQUN3RyxFQUFRZ0gsRUFBUTlPLElBQzFCLElBQUlzQixFQUFXLENBQ2xCLE9BQUF3RyxFQUNBLFNBQVV2RyxFQUFzQixXQUNoQyxPQUFBdU4sRUFDQSxHQUFHL08sRUFBb0JDLENBQU0sQ0FDakMsQ0FBQyxFQUVMc0IsRUFBVyxxQkFBdUIsQ0FBQ2lPLEVBQVl6SCxFQUFROUgsSUFDNUMsSUFBSXNCLEVBQVcsQ0FDbEIsT0FBQXdHLEVBQ0EsT0FBUSxDQUFFLEtBQU0sYUFBYyxVQUFXeUgsQ0FBVyxFQUNwRCxTQUFVaE8sRUFBc0IsV0FDaEMsR0FBR3hCLEVBQW9CQyxDQUFNLENBQ2pDLENBQUMsRUFHRSxJQUFNd1AsRUFBTixjQUEwQkMsQ0FBUSxDQUNyQyxPQUFPQyxFQUFPLENBRVYsT0FEbUIsS0FBSyxTQUFTQSxDQUFLLElBQ25CQyxFQUFjLFVBQ3RCQyxFQUFHLE1BQVMsRUFFaEIsS0FBSyxLQUFLLFVBQVUsT0FBT0YsQ0FBSyxDQUMzQyxDQUNBLFFBQVMsQ0FDTCxPQUFPLEtBQUssS0FBSyxTQUNyQixDQUNKLEVBQ0FGLEVBQVksT0FBUyxDQUFDSyxFQUFNQyxJQUNqQixJQUFJTixFQUFZLENBQ25CLFVBQVdLLEVBQ1gsU0FBVUUsRUFBc0IsWUFDaEMsR0FBR0MsRUFBb0JGLENBQU0sQ0FDakMsQ0FBQyxFQUVFLElBQU1HLEVBQU4sY0FBMEJSLENBQVEsQ0FDckMsT0FBT0MsRUFBTyxDQUVWLE9BRG1CLEtBQUssU0FBU0EsQ0FBSyxJQUNuQkMsRUFBYyxLQUN0QkMsRUFBRyxJQUFJLEVBRVgsS0FBSyxLQUFLLFVBQVUsT0FBT0YsQ0FBSyxDQUMzQyxDQUNBLFFBQVMsQ0FDTCxPQUFPLEtBQUssS0FBSyxTQUNyQixDQUNKLEVBQ0FPLEVBQVksT0FBUyxDQUFDSixFQUFNQyxJQUNqQixJQUFJRyxFQUFZLENBQ25CLFVBQVdKLEVBQ1gsU0FBVUUsRUFBc0IsWUFDaEMsR0FBR0MsRUFBb0JGLENBQU0sQ0FDakMsQ0FBQyxFQUVFLElBQU1JLEdBQU4sY0FBeUJULENBQVEsQ0FDcEMsT0FBT0MsRUFBTyxDQUNWLEdBQU0sQ0FBRSxJQUFBUyxDQUFJLEVBQUksS0FBSyxvQkFBb0JULENBQUssRUFDMUNVLEVBQU9ELEVBQUksS0FDZixPQUFJQSxFQUFJLGFBQWVSLEVBQWMsWUFDakNTLEVBQU8sS0FBSyxLQUFLLGFBQWEsR0FFM0IsS0FBSyxLQUFLLFVBQVUsT0FBTyxDQUM5QixLQUFBQSxFQUNBLEtBQU1ELEVBQUksS0FDVixPQUFRQSxDQUNaLENBQUMsQ0FDTCxDQUNBLGVBQWdCLENBQ1osT0FBTyxLQUFLLEtBQUssU0FDckIsQ0FDSixFQUNBRCxHQUFXLE9BQVMsQ0FBQ0wsRUFBTUMsSUFDaEIsSUFBSUksR0FBVyxDQUNsQixVQUFXTCxFQUNYLFNBQVVFLEVBQXNCLFdBQ2hDLGFBQWMsT0FBT0QsRUFBTyxTQUFZLFdBQWFBLEVBQU8sUUFBVSxJQUFNQSxFQUFPLFFBQ25GLEdBQUdFLEVBQW9CRixDQUFNLENBQ2pDLENBQUMsRUFFRSxJQUFNTyxHQUFOLGNBQXVCWixDQUFRLENBQ2xDLE9BQU9DLEVBQU8sQ0FDVixHQUFNLENBQUUsSUFBQVMsQ0FBSSxFQUFJLEtBQUssb0JBQW9CVCxDQUFLLEVBRXhDWSxFQUFTLENBQ1gsR0FBR0gsRUFDSCxPQUFRLENBQ0osR0FBR0EsRUFBSSxPQUNQLE9BQVEsQ0FBQyxDQUNiLENBQ0osRUFDTUksRUFBUyxLQUFLLEtBQUssVUFBVSxPQUFPLENBQ3RDLEtBQU1ELEVBQU8sS0FDYixLQUFNQSxFQUFPLEtBQ2IsT0FBUSxDQUNKLEdBQUdBLENBQ1AsQ0FDSixDQUFDLEVBQ0QsT0FBSUUsR0FBUUQsQ0FBTSxFQUNQQSxFQUFPLEtBQU1BLElBQ1QsQ0FDSCxPQUFRLFFBQ1IsTUFBT0EsRUFBTyxTQUFXLFFBQ25CQSxFQUFPLE1BQ1AsS0FBSyxLQUFLLFdBQVcsQ0FDbkIsSUFBSSxPQUFRLENBQ1IsT0FBTyxJQUFJRSxFQUFTSCxFQUFPLE9BQU8sTUFBTSxDQUM1QyxFQUNBLE1BQU9BLEVBQU8sSUFDbEIsQ0FBQyxDQUNULEVBQ0gsRUFHTSxDQUNILE9BQVEsUUFDUixNQUFPQyxFQUFPLFNBQVcsUUFDbkJBLEVBQU8sTUFDUCxLQUFLLEtBQUssV0FBVyxDQUNuQixJQUFJLE9BQVEsQ0FDUixPQUFPLElBQUlFLEVBQVNILEVBQU8sT0FBTyxNQUFNLENBQzVDLEVBQ0EsTUFBT0EsRUFBTyxJQUNsQixDQUFDLENBQ1QsQ0FFUixDQUNBLGFBQWMsQ0FDVixPQUFPLEtBQUssS0FBSyxTQUNyQixDQUNKLEVBQ0FELEdBQVMsT0FBUyxDQUFDUixFQUFNQyxJQUNkLElBQUlPLEdBQVMsQ0FDaEIsVUFBV1IsRUFDWCxTQUFVRSxFQUFzQixTQUNoQyxXQUFZLE9BQU9ELEVBQU8sT0FBVSxXQUFhQSxFQUFPLE1BQVEsSUFBTUEsRUFBTyxNQUM3RSxHQUFHRSxFQUFvQkYsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTVksR0FBTixjQUFxQmpCLENBQVEsQ0FDaEMsT0FBT0MsRUFBTyxDQUVWLEdBRG1CLEtBQUssU0FBU0EsQ0FBSyxJQUNuQkMsRUFBYyxJQUFLLENBQ2xDLElBQU1RLEVBQU0sS0FBSyxnQkFBZ0JULENBQUssRUFDdEMsT0FBQWlCLEVBQWtCUixFQUFLLENBQ25CLEtBQU1TLEVBQWEsYUFDbkIsU0FBVWpCLEVBQWMsSUFDeEIsU0FBVVEsRUFBSSxVQUNsQixDQUFDLEVBQ01VLENBQ1gsQ0FDQSxNQUFPLENBQUUsT0FBUSxRQUFTLE1BQU9uQixFQUFNLElBQUssQ0FDaEQsQ0FDSixFQUNBZ0IsR0FBTyxPQUFVWixHQUNOLElBQUlZLEdBQU8sQ0FDZCxTQUFVWCxFQUFzQixPQUNoQyxHQUFHQyxFQUFvQkYsQ0FBTSxDQUNqQyxDQUFDLEVBRUUsSUFBTWdCLEdBQVEsT0FBTyxXQUFXLEVBQzFCQyxHQUFOLGNBQXlCdEIsQ0FBUSxDQUNwQyxPQUFPQyxFQUFPLENBQ1YsR0FBTSxDQUFFLElBQUFTLENBQUksRUFBSSxLQUFLLG9CQUFvQlQsQ0FBSyxFQUN4Q1UsRUFBT0QsRUFBSSxLQUNqQixPQUFPLEtBQUssS0FBSyxLQUFLLE9BQU8sQ0FDekIsS0FBQUMsRUFDQSxLQUFNRCxFQUFJLEtBQ1YsT0FBUUEsQ0FDWixDQUFDLENBQ0wsQ0FDQSxRQUFTLENBQ0wsT0FBTyxLQUFLLEtBQUssSUFDckIsQ0FDSixFQUNhYSxHQUFOLE1BQU1DLFVBQW9CeEIsQ0FBUSxDQUNyQyxPQUFPQyxFQUFPLENBQ1YsR0FBTSxDQUFFLE9BQUF3QixFQUFRLElBQUFmLENBQUksRUFBSSxLQUFLLG9CQUFvQlQsQ0FBSyxFQUN0RCxHQUFJUyxFQUFJLE9BQU8sTUFxQlgsT0FwQm9CLFNBQVksQ0FDNUIsSUFBTWdCLEVBQVcsTUFBTSxLQUFLLEtBQUssR0FBRyxZQUFZLENBQzVDLEtBQU1oQixFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxFQUNELE9BQUlnQixFQUFTLFNBQVcsVUFDYk4sRUFDUE0sRUFBUyxTQUFXLFNBQ3BCRCxFQUFPLE1BQU0sRUFDTkUsRUFBTUQsRUFBUyxLQUFLLEdBR3BCLEtBQUssS0FBSyxJQUFJLFlBQVksQ0FDN0IsS0FBTUEsRUFBUyxNQUNmLEtBQU1oQixFQUFJLEtBQ1YsT0FBUUEsQ0FDWixDQUFDLENBRVQsR0FDbUIsRUFFbEIsQ0FDRCxJQUFNZ0IsRUFBVyxLQUFLLEtBQUssR0FBRyxXQUFXLENBQ3JDLEtBQU1oQixFQUFJLEtBQ1YsS0FBTUEsRUFBSSxLQUNWLE9BQVFBLENBQ1osQ0FBQyxFQUNELE9BQUlnQixFQUFTLFNBQVcsVUFDYk4sRUFDUE0sRUFBUyxTQUFXLFNBQ3BCRCxFQUFPLE1BQU0sRUFDTixDQUNILE9BQVEsUUFDUixNQUFPQyxFQUFTLEtBQ3BCLEdBR08sS0FBSyxLQUFLLElBQUksV0FBVyxDQUM1QixLQUFNQSxFQUFTLE1BQ2YsS0FBTWhCLEVBQUksS0FDVixPQUFRQSxDQUNaLENBQUMsQ0FFVCxDQUNKLENBQ0EsT0FBTyxPQUFPa0IsRUFBR0MsRUFBRyxDQUNoQixPQUFPLElBQUlMLEVBQVksQ0FDbkIsR0FBSUksRUFDSixJQUFLQyxFQUNMLFNBQVV2QixFQUFzQixXQUNwQyxDQUFDLENBQ0wsQ0FDSixFQUNhd0IsR0FBTixjQUEwQjlCLENBQVEsQ0FDckMsT0FBT0MsRUFBTyxDQUNWLElBQU1hLEVBQVMsS0FBSyxLQUFLLFVBQVUsT0FBT2IsQ0FBSyxFQUN6QzhCLEVBQVVwQixJQUNScUIsRUFBUXJCLENBQUksSUFDWkEsRUFBSyxNQUFRLE9BQU8sT0FBT0EsRUFBSyxLQUFLLEdBRWxDQSxHQUVYLE9BQU9JLEdBQVFELENBQU0sRUFBSUEsRUFBTyxLQUFNSCxHQUFTb0IsRUFBT3BCLENBQUksQ0FBQyxFQUFJb0IsRUFBT2pCLENBQU0sQ0FDaEYsQ0FDQSxRQUFTLENBQ0wsT0FBTyxLQUFLLEtBQUssU0FDckIsQ0FDSixFQUNBZ0IsR0FBWSxPQUFTLENBQUMxQixFQUFNQyxJQUNqQixJQUFJeUIsR0FBWSxDQUNuQixVQUFXMUIsRUFDWCxTQUFVRSxFQUFzQixZQUNoQyxHQUFHQyxFQUFvQkYsQ0FBTSxDQUNqQyxDQUFDLEVBU0wsU0FBUzRCLEdBQVk1QixFQUFRTSxFQUFNLENBQy9CLElBQU11QixFQUFJLE9BQU83QixHQUFXLFdBQWFBLEVBQU9NLENBQUksRUFBSSxPQUFPTixHQUFXLFNBQVcsQ0FBRSxRQUFTQSxDQUFPLEVBQUlBLEVBRTNHLE9BRFcsT0FBTzZCLEdBQU0sU0FBVyxDQUFFLFFBQVNBLENBQUUsRUFBSUEsQ0FFeEQsQ0FDTyxTQUFTQyxHQUFPQyxFQUFPQyxFQUFVLENBQUMsRUFXekNDLEVBQU8sQ0FDSCxPQUFJRixFQUNPRyxFQUFPLE9BQU8sRUFBRSxZQUFZLENBQUM1QixFQUFNRCxJQUFRLENBQzlDLElBQU04QixFQUFJSixFQUFNekIsQ0FBSSxFQUNwQixHQUFJNkIsYUFBYSxRQUNiLE9BQU9BLEVBQUUsS0FBTUEsR0FBTSxDQUNqQixHQUFJLENBQUNBLEVBQUcsQ0FDSixJQUFNbkMsRUFBUzRCLEdBQVlJLEVBQVMxQixDQUFJLEVBQ2xDOEIsRUFBU3BDLEVBQU8sT0FBU2lDLEdBQVMsR0FDeEM1QixFQUFJLFNBQVMsQ0FBRSxLQUFNLFNBQVUsR0FBR0wsRUFBUSxNQUFPb0MsQ0FBTyxDQUFDLENBQzdELENBQ0osQ0FBQyxFQUVMLEdBQUksQ0FBQ0QsRUFBRyxDQUNKLElBQU1uQyxFQUFTNEIsR0FBWUksRUFBUzFCLENBQUksRUFDbEM4QixFQUFTcEMsRUFBTyxPQUFTaUMsR0FBUyxHQUN4QzVCLEVBQUksU0FBUyxDQUFFLEtBQU0sU0FBVSxHQUFHTCxFQUFRLE1BQU9vQyxDQUFPLENBQUMsQ0FDN0QsQ0FFSixDQUFDLEVBQ0VGLEVBQU8sT0FBTyxDQUN6QixDQUVPLElBQU1HLEdBQU8sQ0FDaEIsT0FBUUMsRUFBVSxVQUN0QixFQUNXQyxHQUNWLFNBQVVBLEVBQXVCLENBQzlCQSxFQUFzQixVQUFlLFlBQ3JDQSxFQUFzQixVQUFlLFlBQ3JDQSxFQUFzQixPQUFZLFNBQ2xDQSxFQUFzQixVQUFlLFlBQ3JDQSxFQUFzQixXQUFnQixhQUN0Q0EsRUFBc0IsUUFBYSxVQUNuQ0EsRUFBc0IsVUFBZSxZQUNyQ0EsRUFBc0IsYUFBa0IsZUFDeENBLEVBQXNCLFFBQWEsVUFDbkNBLEVBQXNCLE9BQVksU0FDbENBLEVBQXNCLFdBQWdCLGFBQ3RDQSxFQUFzQixTQUFjLFdBQ3BDQSxFQUFzQixRQUFhLFVBQ25DQSxFQUFzQixTQUFjLFdBQ3BDQSxFQUFzQixVQUFlLFlBQ3JDQSxFQUFzQixTQUFjLFdBQ3BDQSxFQUFzQixzQkFBMkIsd0JBQ2pEQSxFQUFzQixnQkFBcUIsa0JBQzNDQSxFQUFzQixTQUFjLFdBQ3BDQSxFQUFzQixVQUFlLFlBQ3JDQSxFQUFzQixPQUFZLFNBQ2xDQSxFQUFzQixPQUFZLFNBQ2xDQSxFQUFzQixZQUFpQixjQUN2Q0EsRUFBc0IsUUFBYSxVQUNuQ0EsRUFBc0IsV0FBZ0IsYUFDdENBLEVBQXNCLFFBQWEsVUFDbkNBLEVBQXNCLFdBQWdCLGFBQ3RDQSxFQUFzQixjQUFtQixnQkFDekNBLEVBQXNCLFlBQWlCLGNBQ3ZDQSxFQUFzQixZQUFpQixjQUN2Q0EsRUFBc0IsV0FBZ0IsYUFDdENBLEVBQXNCLFNBQWMsV0FDcENBLEVBQXNCLFdBQWdCLGFBQ3RDQSxFQUFzQixXQUFnQixhQUN0Q0EsRUFBc0IsWUFBaUIsY0FDdkNBLEVBQXNCLFlBQWlCLGFBQzNDLEdBQUdBLElBQTBCQSxFQUF3QixDQUFDLEVBQUUsRUFLeEQsSUFBTUMsR0FBaUIsQ0FFdkJDLEVBQUtDLEVBQVMsQ0FDVixRQUFTLHlCQUF5QkQsRUFBSSxJQUFJLEVBQzlDLElBQU1FLEdBQVFDLEdBQVNBLGFBQWdCSCxFQUFLQyxDQUFNLEVBQzVDRyxHQUFhQyxFQUFVLE9BQ3ZCQyxHQUFhQyxHQUFVLE9BQ3ZCQyxHQUFVQyxHQUFPLE9BQ2pCQyxHQUFhQyxHQUFVLE9BQ3ZCQyxHQUFjQyxHQUFXLE9BQ3pCQyxHQUFXQyxHQUFRLE9BQ25CQyxHQUFhQyxHQUFVLE9BQ3ZCQyxHQUFnQkMsR0FBYSxPQUM3QkMsR0FBV0MsR0FBUSxPQUNuQkMsR0FBVUMsRUFBTyxPQUNqQkMsR0FBY0MsRUFBVyxPQUN6QkMsR0FBWUMsRUFBUyxPQUNyQkMsR0FBV0MsR0FBUSxPQUNuQkMsR0FBWUMsRUFBUyxPQUNyQkMsR0FBYUMsRUFBVSxPQUN2QkMsR0FBbUJELEVBQVUsYUFDN0JFLEdBQVlDLEdBQVMsT0FDckJDLEdBQXlCQyxHQUFzQixPQUMvQ0MsR0FBbUJDLEdBQWdCLE9BQ25DQyxHQUFZQyxFQUFTLE9BQ3JCQyxHQUFhQyxHQUFVLE9BQ3ZCQyxHQUFVQyxHQUFPLE9BQ2pCQyxHQUFVQyxHQUFPLE9BQ2pCQyxHQUFlQyxHQUFZLE9BQzNCQyxHQUFXQyxHQUFRLE9BQ25CQyxHQUFjQyxHQUFXLE9BQ3pCQyxHQUFXQyxHQUFRLE9BQ25CQyxHQUFpQkMsR0FBYyxPQUMvQkMsR0FBY0MsRUFBVyxPQUN6QkMsR0FBY0MsRUFBVyxPQUN6QkMsR0FBZUMsRUFBWSxPQUMzQkMsR0FBZUMsRUFBWSxPQUMzQkMsR0FBaUJMLEVBQVcscUJBQzVCTSxHQUFlQyxHQUFZLE9BQzNCQyxHQUFVLElBQU1sRSxHQUFXLEVBQUUsU0FBUyxFQUN0Q21FLEdBQVUsSUFBTWpFLEdBQVcsRUFBRSxTQUFTLEVBQ3RDa0UsR0FBVyxJQUFNNUQsR0FBWSxFQUFFLFNBQVMsRUFDakM2RCxHQUFTLENBQ2xCLE9BQVVDLEdBQVFyRSxFQUFVLE9BQU8sQ0FBRSxHQUFHcUUsRUFBSyxPQUFRLEVBQUssQ0FBQyxFQUMzRCxPQUFVQSxHQUFRbkUsR0FBVSxPQUFPLENBQUUsR0FBR21FLEVBQUssT0FBUSxFQUFLLENBQUMsRUFDM0QsUUFBV0EsR0FBUTdELEdBQVcsT0FBTyxDQUNqQyxHQUFHNkQsRUFDSCxPQUFRLEVBQ1osQ0FBQyxFQUNELE9BQVVBLEdBQVEvRCxHQUFVLE9BQU8sQ0FBRSxHQUFHK0QsRUFBSyxPQUFRLEVBQUssQ0FBQyxFQUMzRCxLQUFRQSxHQUFRM0QsR0FBUSxPQUFPLENBQUUsR0FBRzJELEVBQUssT0FBUSxFQUFLLENBQUMsQ0FDM0QsRUFFTyxJQUFNQyxHQUFRQyxFQzFtSGQsSUFBTUMsR0FBMEIsYUFDMUJDLEdBQThCLENBQ3pDRCxHQUNBLGNBSVdFLEdBQWtCLE1BS2xCQyxHQUFzQkMsRUFBRSxNQUFNLENBQUNBLEVBQUUsT0FBTSxFQUFJQSxFQUFFLE9BQU0sRUFBRyxJQUFHLENBQUUsQ0FBQyxFQUs1REMsR0FBZUQsRUFBRSxPQUFNLEVBRTlCRSxFQUEwQkYsRUFDN0IsT0FBTyxDQUNOLE1BQU9BLEVBQUUsU0FDUEEsRUFDRyxPQUFPLENBSU4sY0FBZUEsRUFBRSxTQUFTRCxFQUFtQixFQUM5QyxFQUNBLFlBQVcsQ0FBRSxFQUVuQixFQUNBLFlBQVcsRUFFREksRUFBZ0JILEVBQUUsT0FBTyxDQUNwQyxPQUFRQSxFQUFFLE9BQU0sRUFDaEIsT0FBUUEsRUFBRSxTQUFTRSxDQUF1QixFQUMzQyxFQUVLRSxHQUErQkosRUFDbEMsT0FBTyxDQUlOLE1BQU9BLEVBQUUsU0FBU0EsRUFBRSxPQUFPLENBQUEsQ0FBRSxFQUFFLFlBQVcsQ0FBRSxFQUM3QyxFQUNBLFlBQVcsRUFFREssRUFBcUJMLEVBQUUsT0FBTyxDQUN6QyxPQUFRQSxFQUFFLE9BQU0sRUFDaEIsT0FBUUEsRUFBRSxTQUFTSSxFQUE0QixFQUNoRCxFQUVZRSxFQUFlTixFQUN6QixPQUFPLENBSU4sTUFBT0EsRUFBRSxTQUFTQSxFQUFFLE9BQU8sQ0FBQSxDQUFFLEVBQUUsWUFBVyxDQUFFLEVBQzdDLEVBQ0EsWUFBVyxFQUtETyxHQUFrQlAsRUFBRSxNQUFNLENBQUNBLEVBQUUsT0FBTSxFQUFJQSxFQUFFLE9BQU0sRUFBRyxJQUFHLENBQUUsQ0FBQyxFQUt4RFEsR0FBdUJSLEVBQ2pDLE9BQU8sQ0FDTixRQUFTQSxFQUFFLFFBQVFGLEVBQWUsRUFDbEMsR0FBSVMsR0FDTCxFQUNBLE1BQU1KLENBQWEsRUFDbkIsT0FBTSxFQUtJTSxHQUE0QlQsRUFDdEMsT0FBTyxDQUNOLFFBQVNBLEVBQUUsUUFBUUYsRUFBZSxFQUNuQyxFQUNBLE1BQU1PLENBQWtCLEVBQ3hCLE9BQU0sRUFLSUssR0FBd0JWLEVBQ2xDLE9BQU8sQ0FDTixRQUFTQSxFQUFFLFFBQVFGLEVBQWUsRUFDbEMsR0FBSVMsR0FDSixPQUFRRCxFQUNULEVBQ0EsT0FBTSxFQUtHSyxJQUFaLFNBQVlBLEVBQVMsQ0FFbkJBLEVBQUFBLEVBQUEsaUJBQUEsRUFBQSxFQUFBLG1CQUNBQSxFQUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLGlCQUdBQSxFQUFBQSxFQUFBLFdBQUEsTUFBQSxFQUFBLGFBQ0FBLEVBQUFBLEVBQUEsZUFBQSxNQUFBLEVBQUEsaUJBQ0FBLEVBQUFBLEVBQUEsZUFBQSxNQUFBLEVBQUEsaUJBQ0FBLEVBQUFBLEVBQUEsY0FBQSxNQUFBLEVBQUEsZ0JBQ0FBLEVBQUFBLEVBQUEsY0FBQSxNQUFBLEVBQUEsZUFDRixHQVhZQSxLQUFBQSxHQUFTLENBQUEsRUFBQSxFQWdCZCxJQUFNQyxHQUFxQlosRUFDL0IsT0FBTyxDQUNOLFFBQVNBLEVBQUUsUUFBUUYsRUFBZSxFQUNsQyxHQUFJUyxHQUNKLE1BQU9QLEVBQUUsT0FBTyxDQUlkLEtBQU1BLEVBQUUsT0FBTSxFQUFHLElBQUcsRUFJcEIsUUFBU0EsRUFBRSxPQUFNLEVBSWpCLEtBQU1BLEVBQUUsU0FBU0EsRUFBRSxRQUFPLENBQUUsRUFDN0IsRUFDRixFQUNBLE9BQU0sRUFFSWEsR0FBdUJiLEVBQUUsTUFBTSxDQUMxQ1EsR0FDQUMsR0FDQUMsR0FDQUUsR0FDRCxFQU1ZRSxHQUFvQlIsRUFBYSxPQUFNLEVBWXZDUyxHQUE4QlYsRUFBbUIsT0FBTyxDQUNuRSxPQUFRTCxFQUFFLFFBQVEseUJBQXlCLEVBQzNDLE9BQVFJLEdBQTZCLE9BQU8sQ0FNMUMsVUFBV0csR0FLWCxPQUFRUCxFQUFFLE9BQU0sRUFBRyxTQUFRLEVBQzVCLEVBQ0YsRUFNWWdCLEdBQXVCaEIsRUFDakMsT0FBTyxDQUNOLEtBQU1BLEVBQUUsT0FBTSxFQUNkLFFBQVNBLEVBQUUsT0FBTSxFQUNsQixFQUNBLFlBQVcsRUFLRGlCLEdBQTJCakIsRUFDckMsT0FBTyxDQUlOLGFBQWNBLEVBQUUsU0FBU0EsRUFBRSxPQUFPLENBQUEsQ0FBRSxFQUFFLFlBQVcsQ0FBRSxFQUluRCxTQUFVQSxFQUFFLFNBQVNBLEVBQUUsT0FBTyxDQUFBLENBQUUsRUFBRSxZQUFXLENBQUUsRUFJL0MsTUFBT0EsRUFBRSxTQUNQQSxFQUNHLE9BQU8sQ0FJTixZQUFhQSxFQUFFLFNBQVNBLEVBQUUsUUFBTyxDQUFFLEVBQ3BDLEVBQ0EsWUFBVyxDQUFFLEVBRW5CLEVBQ0EsWUFBVyxFQUtEa0IsR0FBMEJmLEVBQWMsT0FBTyxDQUMxRCxPQUFRSCxFQUFFLFFBQVEsWUFBWSxFQUM5QixPQUFRRSxFQUF3QixPQUFPLENBSXJDLGdCQUFpQkYsRUFBRSxPQUFNLEVBQ3pCLGFBQWNpQixHQUNkLFdBQVlELEdBQ2IsRUFDRixFQUtZRyxHQUEyQm5CLEVBQ3JDLE9BQU8sQ0FJTixhQUFjQSxFQUFFLFNBQVNBLEVBQUUsT0FBTyxDQUFBLENBQUUsRUFBRSxZQUFXLENBQUUsRUFJbkQsUUFBU0EsRUFBRSxTQUFTQSxFQUFFLE9BQU8sQ0FBQSxDQUFFLEVBQUUsWUFBVyxDQUFFLEVBSTlDLFFBQVNBLEVBQUUsU0FDVEEsRUFDRyxPQUFPLENBSU4sWUFBYUEsRUFBRSxTQUFTQSxFQUFFLFFBQU8sQ0FBRSxFQUNwQyxFQUNBLFlBQVcsQ0FBRSxFQUtsQixVQUFXQSxFQUFFLFNBQ1hBLEVBQ0csT0FBTyxDQUlOLFVBQVdBLEVBQUUsU0FBU0EsRUFBRSxRQUFPLENBQUUsRUFLakMsWUFBYUEsRUFBRSxTQUFTQSxFQUFFLFFBQU8sQ0FBRSxFQUNwQyxFQUNBLFlBQVcsQ0FBRSxFQUtsQixNQUFPQSxFQUFFLFNBQ1BBLEVBQ0csT0FBTyxDQUlOLFlBQWFBLEVBQUUsU0FBU0EsRUFBRSxRQUFPLENBQUUsRUFDcEMsRUFDQSxZQUFXLENBQUUsRUFFbkIsRUFDQSxZQUFXLEVBS0RvQixHQUF5QmQsRUFBYSxPQUFPLENBSXhELGdCQUFpQk4sRUFBRSxPQUFNLEVBQ3pCLGFBQWNtQixHQUNkLFdBQVlILEdBQ2IsRUFLWUssR0FBZ0NoQixFQUFtQixPQUFPLENBQ3JFLE9BQVFMLEVBQUUsUUFBUSwyQkFBMkIsRUFDOUMsRUFNWXNCLEdBQW9CbkIsRUFBYyxPQUFPLENBQ3BELE9BQVFILEVBQUUsUUFBUSxNQUFNLEVBQ3pCLEVBR1l1QixHQUFpQnZCLEVBQzNCLE9BQU8sQ0FJTixTQUFVQSxFQUFFLE9BQU0sRUFJbEIsTUFBT0EsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUM3QixFQUNBLFlBQVcsRUFLRHdCLEdBQTZCbkIsRUFBbUIsT0FBTyxDQUNsRSxPQUFRTCxFQUFFLFFBQVEsd0JBQXdCLEVBQzFDLE9BQVFJLEdBQTZCLE1BQU1tQixFQUFjLEVBQUUsT0FBTyxDQUloRSxjQUFleEIsR0FDaEIsRUFDRixFQUdZMEIsR0FBeUJ0QixFQUFjLE9BQU8sQ0FDekQsT0FBUUQsRUFBd0IsT0FBTyxDQUtyQyxPQUFRRixFQUFFLFNBQVNDLEVBQVksRUFDaEMsRUFBRSxTQUFRLEVBQ1osRUFFWXlCLEdBQXdCcEIsRUFBYSxPQUFPLENBS3ZELFdBQVlOLEVBQUUsU0FBU0MsRUFBWSxFQUNwQyxFQU1ZMEIsR0FBeUIzQixFQUNuQyxPQUFPLENBSU4sSUFBS0EsRUFBRSxPQUFNLEVBSWIsU0FBVUEsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUNoQyxFQUNBLFlBQVcsRUFFRDRCLEdBQTZCRCxHQUF1QixPQUFPLENBSXRFLEtBQU0zQixFQUFFLE9BQU0sRUFDZixFQUVZNkIsR0FBNkJGLEdBQXVCLE9BQU8sQ0FJdEUsS0FBTTNCLEVBQUUsT0FBTSxFQUFHLE9BQU0sRUFDeEIsRUFLWThCLEdBQWlCOUIsRUFDM0IsT0FBTyxDQUlOLElBQUtBLEVBQUUsT0FBTSxFQU9iLEtBQU1BLEVBQUUsT0FBTSxFQU9kLFlBQWFBLEVBQUUsU0FBU0EsRUFBRSxPQUFNLENBQUUsRUFLbEMsU0FBVUEsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUNoQyxFQUNBLFlBQVcsRUFLRCtCLEdBQXlCL0IsRUFDbkMsT0FBTyxDQUlOLFlBQWFBLEVBQUUsT0FBTSxFQU9yQixLQUFNQSxFQUFFLE9BQU0sRUFPZCxZQUFhQSxFQUFFLFNBQVNBLEVBQUUsT0FBTSxDQUFFLEVBS2xDLFNBQVVBLEVBQUUsU0FBU0EsRUFBRSxPQUFNLENBQUUsRUFDaEMsRUFDQSxZQUFXLEVBS0RnQyxHQUE2QlAsR0FBdUIsT0FBTyxDQUN0RSxPQUFRekIsRUFBRSxRQUFRLGdCQUFnQixFQUNuQyxFQUtZaUMsR0FBNEJQLEdBQXNCLE9BQU8sQ0FDcEUsVUFBVzFCLEVBQUUsTUFBTThCLEVBQWMsRUFDbEMsRUFLWUksR0FBcUNULEdBQXVCLE9BQ3ZFLENBQ0UsT0FBUXpCLEVBQUUsUUFBUSwwQkFBMEIsRUFDN0MsRUFNVW1DLEdBQW9DVCxHQUFzQixPQUFPLENBQzVFLGtCQUFtQjFCLEVBQUUsTUFBTStCLEVBQXNCLEVBQ2xELEVBS1lLLEdBQTRCakMsRUFBYyxPQUFPLENBQzVELE9BQVFILEVBQUUsUUFBUSxnQkFBZ0IsRUFDbEMsT0FBUUUsRUFBd0IsT0FBTyxDQUlyQyxJQUFLRixFQUFFLE9BQU0sRUFDZCxFQUNGLEVBS1lxQyxHQUEyQi9CLEVBQWEsT0FBTyxDQUMxRCxTQUFVTixFQUFFLE1BQ1ZBLEVBQUUsTUFBTSxDQUFDNEIsR0FBNEJDLEVBQTBCLENBQUMsQ0FBQyxFQUVwRSxFQUtZUyxHQUF3Q2pDLEVBQW1CLE9BQU8sQ0FDN0UsT0FBUUwsRUFBRSxRQUFRLHNDQUFzQyxFQUN6RCxFQUtZdUMsR0FBeUJwQyxFQUFjLE9BQU8sQ0FDekQsT0FBUUgsRUFBRSxRQUFRLHFCQUFxQixFQUN2QyxPQUFRRSxFQUF3QixPQUFPLENBSXJDLElBQUtGLEVBQUUsT0FBTSxFQUNkLEVBQ0YsRUFLWXdDLEdBQTJCckMsRUFBYyxPQUFPLENBQzNELE9BQVFILEVBQUUsUUFBUSx1QkFBdUIsRUFDekMsT0FBUUUsRUFBd0IsT0FBTyxDQUlyQyxJQUFLRixFQUFFLE9BQU0sRUFDZCxFQUNGLEVBS1l5QyxHQUFvQ3BDLEVBQW1CLE9BQU8sQ0FDekUsT0FBUUwsRUFBRSxRQUFRLGlDQUFpQyxFQUNuRCxPQUFRSSxHQUE2QixPQUFPLENBSTFDLElBQUtKLEVBQUUsT0FBTSxFQUNkLEVBQ0YsRUFNWTBDLEdBQXVCMUMsRUFDakMsT0FBTyxDQUlOLEtBQU1BLEVBQUUsT0FBTSxFQUlkLFlBQWFBLEVBQUUsU0FBU0EsRUFBRSxPQUFNLENBQUUsRUFJbEMsU0FBVUEsRUFBRSxTQUFTQSxFQUFFLFFBQU8sQ0FBRSxFQUNqQyxFQUNBLFlBQVcsRUFLRDJDLEdBQWUzQyxFQUN6QixPQUFPLENBSU4sS0FBTUEsRUFBRSxPQUFNLEVBSWQsWUFBYUEsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUlsQyxVQUFXQSxFQUFFLFNBQVNBLEVBQUUsTUFBTTBDLEVBQW9CLENBQUMsRUFDcEQsRUFDQSxZQUFXLEVBS0RFLEdBQTJCbkIsR0FBdUIsT0FBTyxDQUNwRSxPQUFRekIsRUFBRSxRQUFRLGNBQWMsRUFDakMsRUFLWTZDLEdBQTBCbkIsR0FBc0IsT0FBTyxDQUNsRSxRQUFTMUIsRUFBRSxNQUFNMkMsRUFBWSxFQUM5QixFQUtZRyxHQUF5QjNDLEVBQWMsT0FBTyxDQUN6RCxPQUFRSCxFQUFFLFFBQVEsYUFBYSxFQUMvQixPQUFRRSxFQUF3QixPQUFPLENBSXJDLEtBQU1GLEVBQUUsT0FBTSxFQUlkLFVBQVdBLEVBQUUsU0FBU0EsRUFBRSxPQUFPQSxFQUFFLE9BQU0sQ0FBRSxDQUFDLEVBQzNDLEVBQ0YsRUFLWStDLEdBQW9CL0MsRUFDOUIsT0FBTyxDQUNOLEtBQU1BLEVBQUUsUUFBUSxNQUFNLEVBSXRCLEtBQU1BLEVBQUUsT0FBTSxFQUNmLEVBQ0EsWUFBVyxFQUtEZ0QsR0FBcUJoRCxFQUMvQixPQUFPLENBQ04sS0FBTUEsRUFBRSxRQUFRLE9BQU8sRUFJdkIsS0FBTUEsRUFBRSxPQUFNLEVBQUcsT0FBTSxFQUl2QixTQUFVQSxFQUFFLE9BQU0sRUFDbkIsRUFDQSxZQUFXLEVBS0RpRCxHQUF5QmpELEVBQ25DLE9BQU8sQ0FDTixLQUFNQSxFQUFFLFFBQVEsVUFBVSxFQUMxQixTQUFVQSxFQUFFLE1BQU0sQ0FBQzRCLEdBQTRCQyxFQUEwQixDQUFDLEVBQzNFLEVBQ0EsWUFBVyxFQUtEcUIsR0FBc0JsRCxFQUNoQyxPQUFPLENBQ04sS0FBTUEsRUFBRSxLQUFLLENBQUMsT0FBUSxXQUFXLENBQUMsRUFDbEMsUUFBU0EsRUFBRSxNQUFNLENBQ2YrQyxHQUNBQyxHQUNBQyxHQUNELEVBQ0YsRUFDQSxZQUFXLEVBS0RFLEdBQXdCN0MsRUFBYSxPQUFPLENBSXZELFlBQWFOLEVBQUUsU0FBU0EsRUFBRSxPQUFNLENBQUUsRUFDbEMsU0FBVUEsRUFBRSxNQUFNa0QsRUFBbUIsRUFDdEMsRUFLWUUsR0FBc0MvQyxFQUFtQixPQUFPLENBQzNFLE9BQVFMLEVBQUUsUUFBUSxvQ0FBb0MsRUFDdkQsRUFNWXFELEdBQWFyRCxFQUN2QixPQUFPLENBSU4sS0FBTUEsRUFBRSxPQUFNLEVBSWQsWUFBYUEsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUlsQyxZQUFhQSxFQUNWLE9BQU8sQ0FDTixLQUFNQSxFQUFFLFFBQVEsUUFBUSxFQUN4QixXQUFZQSxFQUFFLFNBQVNBLEVBQUUsT0FBTyxDQUFBLENBQUUsRUFBRSxZQUFXLENBQUUsRUFDbEQsRUFDQSxZQUFXLEVBQ2YsRUFDQSxZQUFXLEVBS0RzRCxHQUF5QjdCLEdBQXVCLE9BQU8sQ0FDbEUsT0FBUXpCLEVBQUUsUUFBUSxZQUFZLEVBQy9CLEVBS1l1RCxHQUF3QjdCLEdBQXNCLE9BQU8sQ0FDaEUsTUFBTzFCLEVBQUUsTUFBTXFELEVBQVUsRUFDMUIsRUFLWUcsR0FBdUJsRCxFQUFhLE9BQU8sQ0FDdEQsUUFBU04sRUFBRSxNQUNUQSxFQUFFLE1BQU0sQ0FBQytDLEdBQW1CQyxHQUFvQkMsRUFBc0IsQ0FBQyxDQUFDLEVBRTFFLFFBQVNqRCxFQUFFLFFBQU8sRUFBRyxRQUFRLEVBQUssRUFBRSxTQUFRLEVBQzdDLEVBS1l5RCxHQUFvQ0QsR0FBcUIsR0FDcEVsRCxFQUFhLE9BQU8sQ0FDbEIsV0FBWU4sRUFBRSxRQUFPLEVBQ3RCLENBQUMsRUFNUzBELEdBQXdCdkQsRUFBYyxPQUFPLENBQ3hELE9BQVFILEVBQUUsUUFBUSxZQUFZLEVBQzlCLE9BQVFFLEVBQXdCLE9BQU8sQ0FDckMsS0FBTUYsRUFBRSxPQUFNLEVBQ2QsVUFBV0EsRUFBRSxTQUFTQSxFQUFFLE9BQU9BLEVBQUUsUUFBTyxDQUFFLENBQUMsRUFDNUMsRUFDRixFQUtZMkQsR0FBb0N0RCxFQUFtQixPQUFPLENBQ3pFLE9BQVFMLEVBQUUsUUFBUSxrQ0FBa0MsRUFDckQsRUFNWTRELEdBQXFCNUQsRUFBRSxLQUFLLENBQ3ZDLFFBQ0EsT0FDQSxTQUNBLFVBQ0EsUUFDQSxXQUNBLFFBQ0EsWUFDRCxFQUtZNkQsR0FBd0IxRCxFQUFjLE9BQU8sQ0FDeEQsT0FBUUgsRUFBRSxRQUFRLGtCQUFrQixFQUNwQyxPQUFRRSxFQUF3QixPQUFPLENBSXJDLE1BQU8wRCxHQUNSLEVBQ0YsRUFLWUUsR0FBbUN6RCxFQUFtQixPQUFPLENBQ3hFLE9BQVFMLEVBQUUsUUFBUSx1QkFBdUIsRUFDekMsT0FBUUksR0FBNkIsT0FBTyxDQUkxQyxNQUFPd0QsR0FJUCxPQUFRNUQsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUk3QixLQUFNQSxFQUFFLFFBQU8sRUFDaEIsRUFDRixFQU1ZK0QsR0FBa0IvRCxFQUM1QixPQUFPLENBSU4sS0FBTUEsRUFBRSxPQUFNLEVBQUcsU0FBUSxFQUMxQixFQUNBLFlBQVcsRUFLRGdFLEdBQXlCaEUsRUFDbkMsT0FBTyxDQUlOLE1BQU9BLEVBQUUsU0FBU0EsRUFBRSxNQUFNK0QsRUFBZSxDQUFDLEVBSTFDLGFBQWMvRCxFQUFFLFNBQVNBLEVBQUUsT0FBTSxFQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBSWpELGNBQWVBLEVBQUUsU0FBU0EsRUFBRSxPQUFNLEVBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFJbEQscUJBQXNCQSxFQUFFLFNBQVNBLEVBQUUsT0FBTSxFQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQzFELEVBQ0EsWUFBVyxFQUtEaUUsR0FBd0JqRSxFQUNsQyxPQUFPLENBQ04sS0FBTUEsRUFBRSxLQUFLLENBQUMsT0FBUSxXQUFXLENBQUMsRUFDbEMsUUFBU0EsRUFBRSxNQUFNLENBQUMrQyxHQUFtQkMsRUFBa0IsQ0FBQyxFQUN6RCxFQUNBLFlBQVcsRUFLRGtCLEdBQTZCL0QsRUFBYyxPQUFPLENBQzdELE9BQVFILEVBQUUsUUFBUSx3QkFBd0IsRUFDMUMsT0FBUUUsRUFBd0IsT0FBTyxDQUNyQyxTQUFVRixFQUFFLE1BQU1pRSxFQUFxQixFQUl2QyxhQUFjakUsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUluQyxlQUFnQkEsRUFBRSxTQUFTQSxFQUFFLEtBQUssQ0FBQyxPQUFRLGFBQWMsWUFBWSxDQUFDLENBQUMsRUFDdkUsWUFBYUEsRUFBRSxTQUFTQSxFQUFFLE9BQU0sQ0FBRSxFQUlsQyxVQUFXQSxFQUFFLE9BQU0sRUFBRyxJQUFHLEVBQ3pCLGNBQWVBLEVBQUUsU0FBU0EsRUFBRSxNQUFNQSxFQUFFLE9BQU0sQ0FBRSxDQUFDLEVBSTdDLFNBQVVBLEVBQUUsU0FBU0EsRUFBRSxPQUFPLENBQUEsQ0FBRSxFQUFFLFlBQVcsQ0FBRSxFQUkvQyxpQkFBa0JBLEVBQUUsU0FBU2dFLEVBQXNCLEVBQ3BELEVBQ0YsRUFLWUcsR0FBNEI3RCxFQUFhLE9BQU8sQ0FJM0QsTUFBT04sRUFBRSxPQUFNLEVBSWYsV0FBWUEsRUFBRSxTQUNaQSxFQUFFLEtBQUssQ0FBQyxVQUFXLGVBQWdCLFdBQVcsQ0FBQyxFQUFFLEdBQUdBLEVBQUUsT0FBTSxDQUFFLENBQUMsRUFFakUsS0FBTUEsRUFBRSxLQUFLLENBQUMsT0FBUSxXQUFXLENBQUMsRUFDbEMsUUFBU0EsRUFBRSxtQkFBbUIsT0FBUSxDQUNwQytDLEdBQ0FDLEdBQ0QsRUFDRixFQU1Zb0IsR0FBMEJwRSxFQUNwQyxPQUFPLENBQ04sS0FBTUEsRUFBRSxRQUFRLGNBQWMsRUFJOUIsSUFBS0EsRUFBRSxPQUFNLEVBQ2QsRUFDQSxZQUFXLEVBS0RxRSxHQUF3QnJFLEVBQ2xDLE9BQU8sQ0FDTixLQUFNQSxFQUFFLFFBQVEsWUFBWSxFQUk1QixLQUFNQSxFQUFFLE9BQU0sRUFDZixFQUNBLFlBQVcsRUFLRHNFLEdBQXdCbkUsRUFBYyxPQUFPLENBQ3hELE9BQVFILEVBQUUsUUFBUSxxQkFBcUIsRUFDdkMsT0FBUUUsRUFBd0IsT0FBTyxDQUNyQyxJQUFLRixFQUFFLE1BQU0sQ0FBQ3FFLEdBQXVCRCxFQUF1QixDQUFDLEVBSTdELFNBQVVwRSxFQUNQLE9BQU8sQ0FJTixLQUFNQSxFQUFFLE9BQU0sRUFJZCxNQUFPQSxFQUFFLE9BQU0sRUFDaEIsRUFDQSxZQUFXLEVBQ2YsRUFDRixFQUtZdUUsR0FBdUJqRSxFQUFhLE9BQU8sQ0FDdEQsV0FBWU4sRUFDVCxPQUFPLENBSU4sT0FBUUEsRUFBRSxNQUFNQSxFQUFFLE9BQU0sQ0FBRSxFQUFFLElBQUksR0FBRyxFQUluQyxNQUFPQSxFQUFFLFNBQVNBLEVBQUUsT0FBTSxFQUFHLElBQUcsQ0FBRSxFQUlsQyxRQUFTQSxFQUFFLFNBQVNBLEVBQUUsUUFBTyxDQUFFLEVBQ2hDLEVBQ0EsWUFBVyxFQUNmLEVBTVl3RSxHQUFheEUsRUFDdkIsT0FBTyxDQUlOLElBQUtBLEVBQUUsT0FBTSxFQUFHLFdBQVcsU0FBUyxFQUlwQyxLQUFNQSxFQUFFLFNBQVNBLEVBQUUsT0FBTSxDQUFFLEVBQzVCLEVBQ0EsWUFBVyxFQUtEeUUsR0FBeUJ0RSxFQUFjLE9BQU8sQ0FDekQsT0FBUUgsRUFBRSxRQUFRLFlBQVksRUFDL0IsRUFLWTBFLEdBQXdCcEUsRUFBYSxPQUFPLENBQ3ZELE1BQU9OLEVBQUUsTUFBTXdFLEVBQVUsRUFDMUIsRUFLWUcsR0FBcUN0RSxFQUFtQixPQUFPLENBQzFFLE9BQVFMLEVBQUUsUUFBUSxrQ0FBa0MsRUFDckQsRUFHWTRFLEdBQXNCNUUsRUFBRSxNQUFNLENBQ3pDc0IsR0FDQUosR0FDQW9ELEdBQ0FULEdBQ0FmLEdBQ0FGLEdBQ0FaLEdBQ0FFLEdBQ0FFLEdBQ0FHLEdBQ0FDLEdBQ0FrQixHQUNBSixHQUNELEVBRVl1QixHQUEyQjdFLEVBQUUsTUFBTSxDQUM5Q2UsR0FDQVMsR0FDQUgsR0FDQXNELEdBQ0QsRUFFWUcsR0FBcUI5RSxFQUFFLE1BQU0sQ0FDeENjLEdBQ0FxRCxHQUNBTyxHQUNELEVBR1lLLEdBQXNCL0UsRUFBRSxNQUFNLENBQ3pDc0IsR0FDQTRDLEdBQ0FPLEdBQ0QsRUFFWU8sR0FBMkJoRixFQUFFLE1BQU0sQ0FDOUNlLEdBQ0FTLEdBQ0FzQyxHQUNBckIsR0FDQUgsR0FDQXFCLEdBQ0FQLEdBQ0QsRUFFWTZCLEdBQXFCakYsRUFBRSxNQUFNLENBQ3hDYyxHQUNBTSxHQUNBbUQsR0FDQXBCLEdBQ0FOLEdBQ0FaLEdBQ0FFLEdBQ0FFLEdBQ0FtQixHQUNBRCxHQUNELEVBRVkyQixHQUFQLGNBQXdCLEtBQUssQ0FDakMsWUFDa0JDLEVBQ2hCQyxFQUNnQkMsRUFBYyxDQUU5QixNQUFNLGFBQWFGLENBQUksS0FBS0MsQ0FBTyxFQUFFLEVBSnJCLEtBQUEsS0FBQUQsRUFFQSxLQUFBLEtBQUFFLENBR2xCLEdDM2lDSyxJQUFNQyxHQUErQixJQXNDdEJDLEdBQWhCLEtBQXdCLENBa0Q1QixZQUFvQkMsRUFBMEIsQ0FBMUIsS0FBQSxTQUFBQSxFQTVDWixLQUFBLGtCQUFvQixFQUNwQixLQUFBLGlCQU1KLElBQUksSUFDQSxLQUFBLGdDQUNOLElBQUksSUFDRSxLQUFBLHNCQUdKLElBQUksSUFDQSxLQUFBLGtCQUdKLElBQUksSUFDQSxLQUFBLGtCQUFtRCxJQUFJLElBMkI3RCxLQUFLLHVCQUF1QkMsR0FBOEJDLEdBQWdCLENBQ3hFLElBQU1DLEVBQWEsS0FBSyxnQ0FBZ0MsSUFDdERELEVBQWEsT0FBTyxTQUFTLEVBRS9CQyxHQUFZLE1BQU1ELEVBQWEsT0FBTyxNQUFNLENBQzlDLENBQUMsRUFFRCxLQUFLLHVCQUF1QkUsR0FBNkJGLEdBQWdCLENBQ3ZFLEtBQUssWUFBWUEsQ0FBK0MsQ0FDbEUsQ0FBQyxFQUVELEtBQUssa0JBQ0hHLEdBRUNDLElBQWMsQ0FBQSxFQUFrQixDQUVyQyxDQU9BLE1BQU0sUUFBUUMsRUFBb0IsQ0FDaEMsS0FBSyxXQUFhQSxFQUNsQixLQUFLLFdBQVcsUUFBVSxJQUFLLENBQzdCLEtBQUssU0FBUSxDQUNmLEVBRUEsS0FBSyxXQUFXLFFBQVdDLEdBQWdCLENBQ3pDLEtBQUssU0FBU0EsQ0FBSyxDQUNyQixFQUVBLEtBQUssV0FBVyxVQUFhQyxHQUFXLENBQ2hDLFdBQVlBLEVBRVAsT0FBUUEsRUFDakIsS0FBSyxXQUFXQSxDQUFPLEVBRXZCLEtBQUssZ0JBQWdCQSxDQUFPLEVBSjVCLEtBQUssWUFBWUEsQ0FBTyxDQU01QixFQUVBLE1BQU0sS0FBSyxXQUFXLE1BQUssQ0FDN0IsQ0FFUSxVQUFRLE9BQ2QsSUFBTUMsRUFBbUIsS0FBSyxrQkFDOUIsS0FBSyxrQkFBb0IsSUFBSSxJQUM3QixLQUFLLGtCQUFrQixNQUFLLEVBQzVCLEtBQUssV0FBYSxRQUNsQkMsRUFBQSxLQUFLLFdBQU8sTUFBQUEsSUFBQSxRQUFBQSxFQUFBLEtBQUEsSUFBQSxFQUVaLElBQU1ILEVBQVEsSUFBSUksR0FBU0MsR0FBVSxpQkFBa0IsbUJBQW1CLEVBQzFFLFFBQVdDLEtBQVdKLEVBQWlCLE9BQU0sRUFDM0NJLEVBQVFOLENBQUssQ0FFakIsQ0FFUSxTQUFTQSxFQUFZLFFBQzNCRyxFQUFBLEtBQUssV0FBTyxNQUFBQSxJQUFBLFFBQUFBLEVBQUEsS0FBQSxLQUFHSCxDQUFLLENBQ3RCLENBRVEsZ0JBQWdCTixFQUFpQyxPQUN2RCxJQUFNWSxHQUNKSCxFQUFBLEtBQUssc0JBQXNCLElBQUlULEVBQWEsTUFBTSxLQUFDLE1BQUFTLElBQUEsT0FBQUEsRUFDbkQsS0FBSyw0QkFHSEcsSUFBWSxRQUtoQixRQUFRLFFBQU8sRUFDWixLQUFLLElBQU1BLEVBQVFaLENBQVksQ0FBQyxFQUNoQyxNQUFPTSxHQUNOLEtBQUssU0FDSCxJQUFJLE1BQU0sMkNBQTJDQSxDQUFLLEVBQUUsQ0FBQyxDQUM5RCxDQUVQLENBRVEsV0FBV08sRUFBdUIsU0FDeEMsSUFBTUQsR0FDSkgsRUFBQSxLQUFLLGlCQUFpQixJQUFJSSxFQUFRLE1BQU0sS0FBQyxNQUFBSixJQUFBLE9BQUFBLEVBQUksS0FBSyx1QkFFcEQsR0FBSUcsSUFBWSxPQUFXLEVBQ3pCRSxFQUFBLEtBQUssY0FBVSxNQUFBQSxJQUFBLFFBQUFBLEVBQ1gsS0FBSyxDQUNMLFFBQVMsTUFDVCxHQUFJRCxFQUFRLEdBQ1osTUFBTyxDQUNMLEtBQU1GLEdBQVUsZUFDaEIsUUFBUyxvQkFFWixFQUNBLE1BQU9MLEdBQ04sS0FBSyxTQUNILElBQUksTUFBTSxxQ0FBcUNBLENBQUssRUFBRSxDQUFDLENBQ3hELEVBRUwsTUFDRixDQUVBLElBQU1TLEVBQWtCLElBQUksZ0JBQzVCLEtBQUssZ0NBQWdDLElBQUlGLEVBQVEsR0FBSUUsQ0FBZSxFQUdwRSxRQUFRLFFBQU8sRUFDWixLQUFLLElBQU1ILEVBQVFDLEVBQVMsQ0FBRSxPQUFRRSxFQUFnQixNQUFNLENBQUUsQ0FBQyxFQUMvRCxLQUNFQyxHQUFVLE9BQ1QsR0FBSSxDQUFBRCxFQUFnQixPQUFPLFFBSTNCLE9BQU9OLEVBQUEsS0FBSyxjQUFVLE1BQUFBLElBQUEsT0FBQSxPQUFBQSxFQUFFLEtBQUssQ0FDM0IsT0FBQU8sRUFDQSxRQUFTLE1BQ1QsR0FBSUgsRUFBUSxHQUNiLENBQ0gsRUFDQ1AsR0FBUyxTQUNSLEdBQUksQ0FBQVMsRUFBZ0IsT0FBTyxRQUkzQixPQUFPTixFQUFBLEtBQUssY0FBVSxNQUFBQSxJQUFBLE9BQUEsT0FBQUEsRUFBRSxLQUFLLENBQzNCLFFBQVMsTUFDVCxHQUFJSSxFQUFRLEdBQ1osTUFBTyxDQUNMLEtBQU0sT0FBTyxjQUFjUCxFQUFNLElBQU8sRUFDcENBLEVBQU0sS0FDTkssR0FBVSxjQUNkLFNBQVNHLEVBQUFSLEVBQU0sV0FBTyxNQUFBUSxJQUFBLE9BQUFBLEVBQUksa0JBRTdCLENBQ0gsQ0FBQyxFQUVGLE1BQU9SLEdBQ04sS0FBSyxTQUFTLElBQUksTUFBTSw0QkFBNEJBLENBQUssRUFBRSxDQUFDLENBQUMsRUFFOUQsUUFBUSxJQUFLLENBQ1osS0FBSyxnQ0FBZ0MsT0FBT08sRUFBUSxFQUFFLENBQ3hELENBQUMsQ0FDTCxDQUVRLFlBQVliLEVBQWtDLENBQ3BELEdBQU0sQ0FBRSxTQUFBaUIsRUFBVSxNQUFBQyxFQUFPLGNBQUFDLENBQWEsRUFBS25CLEVBQWEsT0FDbERZLEVBQVUsS0FBSyxrQkFBa0IsSUFBSSxPQUFPTyxDQUFhLENBQUMsRUFDaEUsR0FBSVAsSUFBWSxPQUFXLENBQ3pCLEtBQUssU0FDSCxJQUFJLE1BQ0YsMERBQTBELEtBQUssVUFBVVosQ0FBWSxDQUFDLEVBQUUsQ0FDekYsRUFFSCxNQUNGLENBRUFZLEVBQVEsQ0FBRSxTQUFBSyxFQUFVLE1BQUFDLENBQUssQ0FBRSxDQUM3QixDQUVRLFlBQVlFLEVBQXdDLENBQzFELElBQU1DLEVBQVlELEVBQVMsR0FDckJSLEVBQVUsS0FBSyxrQkFBa0IsSUFBSSxPQUFPUyxDQUFTLENBQUMsRUFDNUQsR0FBSVQsSUFBWSxPQUFXLENBQ3pCLEtBQUssU0FDSCxJQUFJLE1BQ0Ysa0RBQWtELEtBQUssVUFBVVEsQ0FBUSxDQUFDLEVBQUUsQ0FDN0UsRUFFSCxNQUNGLENBSUEsR0FGQSxLQUFLLGtCQUFrQixPQUFPLE9BQU9DLENBQVMsQ0FBQyxFQUMvQyxLQUFLLGtCQUFrQixPQUFPLE9BQU9BLENBQVMsQ0FBQyxFQUMzQyxXQUFZRCxFQUNkUixFQUFRUSxDQUFRLE1BQ1gsQ0FDTCxJQUFNZCxFQUFRLElBQUlJLEdBQ2hCVSxFQUFTLE1BQU0sS0FDZkEsRUFBUyxNQUFNLFFBQ2ZBLEVBQVMsTUFBTSxJQUFJLEVBRXJCUixFQUFRTixDQUFLLENBQ2YsQ0FDRixDQUVBLElBQUksV0FBUyxDQUNYLE9BQU8sS0FBSyxVQUNkLENBS0EsTUFBTSxPQUFLLE9BQ1QsT0FBTUcsRUFBQSxLQUFLLGNBQVUsTUFBQUEsSUFBQSxPQUFBLE9BQUFBLEVBQUUsTUFBSyxFQUM5QixDQWdDQSxRQUNFSSxFQUNBUyxFQUNBQyxFQUF3QixDQUV4QixPQUFPLElBQUksUUFBUSxDQUFDQyxFQUFTQyxJQUFVLGFBQ3JDLEdBQUksQ0FBQyxLQUFLLFdBQVksQ0FDcEJBLEVBQU8sSUFBSSxNQUFNLGVBQWUsQ0FBQyxFQUNqQyxNQUNGLEdBRUloQixFQUFBLEtBQUssWUFBUSxNQUFBQSxJQUFBLE9BQUEsT0FBQUEsRUFBRSw2QkFBOEIsSUFDL0MsS0FBSywwQkFBMEJJLEVBQVEsTUFBTSxHQUcvQ0MsRUFBQVMsR0FBUyxVQUFNLE1BQUFULElBQUEsUUFBQUEsRUFBRSxlQUFjLEVBRS9CLElBQU1PLEVBQVksS0FBSyxvQkFDakJLLEVBQWlDLENBQ3JDLEdBQUdiLEVBQ0gsUUFBUyxNQUNULEdBQUlRLEdBR0ZFLEdBQVMsYUFDWCxLQUFLLGtCQUFrQixJQUFJRixFQUFXRSxFQUFRLFVBQVUsRUFDeERHLEVBQWUsT0FBUyxDQUN0QixHQUFHYixFQUFRLE9BQ1gsTUFBTyxDQUFFLGNBQWVRLENBQVMsSUFJckMsSUFBSU0sRUFFSixLQUFLLGtCQUFrQixJQUFJTixFQUFZRCxHQUFZLE9BS2pELEdBSklPLElBQWMsUUFDaEIsYUFBYUEsQ0FBUyxFQUdwQixLQUFBbEIsRUFBQWMsR0FBUyxVQUFNLE1BQUFkLElBQUEsU0FBQUEsRUFBRSxTQUlyQixJQUFJVyxhQUFvQixNQUN0QixPQUFPSyxFQUFPTCxDQUFRLEVBR3hCLEdBQUksQ0FDRixJQUFNSixFQUFTTSxFQUFhLE1BQU1GLEVBQVMsTUFBTSxFQUNqREksRUFBUVIsQ0FBTSxDQUNoQixPQUFTVixFQUFPLENBQ2RtQixFQUFPbkIsQ0FBSyxDQUNkLEVBQ0YsQ0FBQyxFQUVELElBQU1zQixFQUFVQyxHQUFtQixPQUNqQyxLQUFLLGtCQUFrQixPQUFPUixDQUFTLEVBQ3ZDLEtBQUssa0JBQWtCLE9BQU9BLENBQVMsR0FFdkNaLEVBQUEsS0FBSyxjQUFVLE1BQUFBLElBQUEsUUFBQUEsRUFDWCxLQUFLLENBQ0wsUUFBUyxNQUNULE9BQVEsWUFDUixPQUFRLENBQ04sVUFBV1ksRUFDWCxPQUFRLE9BQU9RLENBQU0sR0FFeEIsRUFDQSxNQUFPdkIsR0FDTixLQUFLLFNBQVMsSUFBSSxNQUFNLGdDQUFnQ0EsQ0FBSyxFQUFFLENBQUMsQ0FBQyxFQUdyRW1CLEVBQU9JLENBQU0sQ0FDZixHQUVBQyxFQUFBUCxHQUFTLFVBQU0sTUFBQU8sSUFBQSxRQUFBQSxFQUFFLGlCQUFpQixRQUFTLElBQUssT0FDMUNILElBQWMsUUFDaEIsYUFBYUEsQ0FBUyxFQUd4QkMsR0FBT25CLEVBQUFjLEdBQVMsVUFBTSxNQUFBZCxJQUFBLE9BQUEsT0FBQUEsRUFBRSxNQUFNLENBQ2hDLENBQUMsRUFFRCxJQUFNc0IsR0FBVUMsRUFBQVQsR0FBUyxXQUFPLE1BQUFTLElBQUEsT0FBQUEsRUFBSXBDLEdBQ3BDK0IsRUFBWSxXQUNWLElBQ0VDLEVBQ0UsSUFBSWxCLEdBQVNDLEdBQVUsZUFBZ0Isb0JBQXFCLENBQzFELFFBQUFvQixFQUNELENBQUMsRUFFTkEsQ0FBTyxFQUdULEtBQUssV0FBVyxLQUFLTCxDQUFjLEVBQUUsTUFBT3BCLEdBQVMsQ0FDL0NxQixJQUFjLFFBQ2hCLGFBQWFBLENBQVMsRUFHeEJGLEVBQU9uQixDQUFLLENBQ2QsQ0FBQyxDQUNILENBQUMsQ0FDSCxDQUtBLE1BQU0sYUFBYU4sRUFBK0IsQ0FDaEQsR0FBSSxDQUFDLEtBQUssV0FDUixNQUFNLElBQUksTUFBTSxlQUFlLEVBR2pDLEtBQUssNkJBQTZCQSxFQUFhLE1BQU0sRUFFckQsSUFBTWlDLEVBQTJDLENBQy9DLEdBQUdqQyxFQUNILFFBQVMsT0FHWCxNQUFNLEtBQUssV0FBVyxLQUFLaUMsQ0FBbUIsQ0FDaEQsQ0FPQSxrQkFLRUMsRUFDQXRCLEVBR3VDLENBRXZDLElBQU11QixFQUFTRCxFQUFjLE1BQU0sT0FBTyxNQUMxQyxLQUFLLCtCQUErQkMsQ0FBTSxFQUMxQyxLQUFLLGlCQUFpQixJQUFJQSxFQUFRLENBQUN0QixFQUFTdUIsSUFDMUMsUUFBUSxRQUFReEIsRUFBUXNCLEVBQWMsTUFBTXJCLENBQU8sRUFBR3VCLENBQUssQ0FBQyxDQUFDLENBRWpFLENBS0EscUJBQXFCRCxFQUFjLENBQ2pDLEtBQUssaUJBQWlCLE9BQU9BLENBQU0sQ0FDckMsQ0FPQSx1QkFLRUUsRUFDQXpCLEVBQTJELENBRTNELEtBQUssc0JBQXNCLElBQ3pCeUIsRUFBbUIsTUFBTSxPQUFPLE1BQy9CckMsR0FDQyxRQUFRLFFBQVFZLEVBQVF5QixFQUFtQixNQUFNckMsQ0FBWSxDQUFDLENBQUMsQ0FBQyxDQUV0RSxDQUtBLDBCQUEwQm1DLEVBQWMsQ0FDdEMsS0FBSyxzQkFBc0IsT0FBT0EsQ0FBTSxDQUMxQyxHQzVkSSxJQUFPRyxHQUFQLGNBSUlDLEVBSVQsQ0FhQyxZQUNVQyxFQUNSQyxFQUFzQixDQUV0QixNQUFNQSxDQUFPLEVBSEwsS0FBQSxZQUFBRCxFQUlSLEtBQUssY0FBZ0JDLEVBQVEsYUFFN0IsS0FBSyxrQkFBa0JDLEdBQTBCQyxHQUMvQyxLQUFLLGNBQWNBLENBQU8sQ0FBQyxFQUU3QixLQUFLLHVCQUF1QkMsR0FBK0IsSUFBSyxDQUFBLElBQUFDLEVBQzlELE9BQUFBLEVBQUEsS0FBSyxpQkFBYSxNQUFBQSxJQUFBLE9BQUEsT0FBQUEsRUFBQSxLQUFBLElBQUEsQ0FBSSxDQUFBLENBRTFCLENBRVUsMEJBQTBCQyxFQUEwQixTQUM1RCxPQUFRQSxFQUFtQyxDQUN6QyxJQUFLLHlCQUNILEdBQUksRUFBQyxHQUFBRCxFQUFBLEtBQUssdUJBQW1CLE1BQUFBLElBQUEsU0FBQUEsRUFBRSxVQUM3QixNQUFNLElBQUksTUFDUixrREFBa0RDLENBQU0sR0FBRyxFQUcvRCxNQUVGLElBQUssYUFDSCxHQUFJLEVBQUMsR0FBQUMsRUFBQSxLQUFLLHVCQUFtQixNQUFBQSxJQUFBLFNBQUFBLEVBQUUsT0FDN0IsTUFBTSxJQUFJLE1BQ1IsdURBQXVERCxDQUFNLEdBQUcsRUFHcEUsTUFFRixJQUFLLE9BRUgsS0FDSixDQUNGLENBRVUsNkJBQ1JBLEVBQXNELENBRXRELE9BQVFBLEVBQXdDLENBQzlDLElBQUssd0JBQ0gsR0FBSSxDQUFDLEtBQUssY0FBYyxRQUN0QixNQUFNLElBQUksTUFDUixpREFBaURBLENBQU0sR0FBRyxFQUc5RCxNQUVGLElBQUssa0NBQ0wsSUFBSyx1Q0FDSCxHQUFJLENBQUMsS0FBSyxjQUFjLFVBQ3RCLE1BQU0sSUFBSSxNQUNSLG1FQUFtRUEsQ0FBTSxHQUFHLEVBR2hGLE1BRUYsSUFBSyxtQ0FDSCxHQUFJLENBQUMsS0FBSyxjQUFjLE1BQ3RCLE1BQU0sSUFBSSxNQUNSLHdFQUF3RUEsQ0FBTSxHQUFHLEVBR3JGLE1BRUYsSUFBSyxxQ0FDSCxHQUFJLENBQUMsS0FBSyxjQUFjLFFBQ3RCLE1BQU0sSUFBSSxNQUNSLDBFQUEwRUEsQ0FBTSxHQUFHLEVBR3ZGLE1BRUYsSUFBSywwQkFFSCxNQUVGLElBQUsseUJBRUgsS0FDSixDQUNGLENBRVUsK0JBQStCQSxFQUFjLENBQ3JELE9BQVFBLEVBQVEsQ0FDZCxJQUFLLHlCQUNILEdBQUksQ0FBQyxLQUFLLGNBQWMsU0FDdEIsTUFBTSxJQUFJLE1BQ1Isa0RBQWtEQSxDQUFNLEdBQUcsRUFHL0QsTUFFRixJQUFLLG1CQUNILEdBQUksQ0FBQyxLQUFLLGNBQWMsUUFDdEIsTUFBTSxJQUFJLE1BQ1IsaURBQWlEQSxDQUFNLEdBQUcsRUFHOUQsTUFFRixJQUFLLGNBQ0wsSUFBSyxlQUNILEdBQUksQ0FBQyxLQUFLLGNBQWMsUUFDdEIsTUFBTSxJQUFJLE1BQ1IsaURBQWlEQSxDQUFNLEdBQUcsRUFHOUQsTUFFRixJQUFLLGlCQUNMLElBQUssMkJBQ0wsSUFBSyxpQkFDSCxHQUFJLENBQUMsS0FBSyxjQUFjLFVBQ3RCLE1BQU0sSUFBSSxNQUNSLG1EQUFtREEsQ0FBTSxHQUFHLEVBR2hFLE1BRUYsSUFBSyxhQUNMLElBQUssYUFDSCxHQUFJLENBQUMsS0FBSyxjQUFjLE1BQ3RCLE1BQU0sSUFBSSxNQUNSLCtDQUErQ0EsQ0FBTSxHQUFHLEVBRzVELE1BRUYsSUFBSyxPQUNMLElBQUssYUFFSCxLQUNKLENBQ0YsQ0FFUSxNQUFNLGNBQ1pILEVBQTBCLENBRTFCLElBQU1LLEVBQW1CTCxFQUFRLE9BQU8sZ0JBRXhDLFlBQUssb0JBQXNCQSxFQUFRLE9BQU8sYUFDMUMsS0FBSyxlQUFpQkEsRUFBUSxPQUFPLFdBRTlCLENBQ0wsZ0JBQWlCTSxHQUE0QixTQUFTRCxDQUFnQixFQUNsRUEsRUFDQUUsR0FDSixhQUFjLEtBQUssZ0JBQWUsRUFDbEMsV0FBWSxLQUFLLFlBRXJCLENBS0EsdUJBQXFCLENBQ25CLE9BQU8sS0FBSyxtQkFDZCxDQUtBLGtCQUFnQixDQUNkLE9BQU8sS0FBSyxjQUNkLENBRVEsaUJBQWUsQ0FDckIsT0FBTyxLQUFLLGFBQ2QsQ0FFQSxNQUFNLE1BQUksQ0FDUixPQUFPLEtBQUssUUFBUSxDQUFFLE9BQVEsTUFBTSxFQUFJQyxFQUFpQixDQUMzRCxDQUVBLE1BQU0sY0FDSkMsRUFDQVgsRUFBd0IsQ0FFeEIsT0FBTyxLQUFLLFFBQ1YsQ0FBRSxPQUFRLHlCQUEwQixPQUFBVyxDQUFNLEVBQzFDQyxHQUNBWixDQUFPLENBRVgsQ0FFQSxNQUFNLFVBQ0pXLEVBQ0FYLEVBQXdCLENBRXhCLE9BQU8sS0FBSyxRQUNWLENBQUUsT0FBUSxhQUFjLE9BQUFXLENBQU0sRUFDOUJFLEdBQ0FiLENBQU8sQ0FFWCxDQUVBLE1BQU0sbUJBQW1CVyxFQUE0QyxDQUNuRSxPQUFPLEtBQUssYUFBYSxDQUFFLE9BQVEsd0JBQXlCLE9BQUFBLENBQU0sQ0FBRSxDQUN0RSxDQUVBLE1BQU0sb0JBQW9CQSxFQUE2QyxDQUNyRSxPQUFPLEtBQUssYUFBYSxDQUN2QixPQUFRLGtDQUNSLE9BQUFBLEVBQ0QsQ0FDSCxDQUVBLE1BQU0seUJBQXVCLENBQzNCLE9BQU8sS0FBSyxhQUFhLENBQ3ZCLE9BQVEsdUNBQ1QsQ0FDSCxDQUVBLE1BQU0scUJBQW1CLENBQ3ZCLE9BQU8sS0FBSyxhQUFhLENBQUUsT0FBUSxrQ0FBa0MsQ0FBRSxDQUN6RSxDQUVBLE1BQU0sdUJBQXFCLENBQ3pCLE9BQU8sS0FBSyxhQUFhLENBQUUsT0FBUSxvQ0FBb0MsQ0FBRSxDQUMzRSxHQ2xURixPQUFPRyxPQUFhLGVDS2QsSUFBT0MsR0FBUCxLQUFpQixDQUdyQixPQUFPQyxFQUFhLENBQ2xCLEtBQUssUUFBVSxLQUFLLFFBQVUsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFTQSxDQUFLLENBQUMsRUFBSUEsQ0FDdkUsQ0FFQSxhQUFXLENBQ1QsR0FBSSxDQUFDLEtBQUssUUFDUixPQUFPLEtBR1QsSUFBTUMsRUFBUSxLQUFLLFFBQVEsUUFBUTtDQUFJLEVBQ3ZDLEdBQUlBLElBQVUsR0FDWixPQUFPLEtBR1QsSUFBTUMsRUFBTyxLQUFLLFFBQVEsU0FBUyxPQUFRLEVBQUdELENBQUssRUFDbkQsWUFBSyxRQUFVLEtBQUssUUFBUSxTQUFTQSxFQUFRLENBQUMsRUFDdkNFLEdBQW1CRCxDQUFJLENBQ2hDLENBRUEsT0FBSyxDQUNILEtBQUssUUFBVSxNQUNqQixHQUdJLFNBQVVDLEdBQW1CRCxFQUFZLENBQzdDLE9BQU9FLEdBQXFCLE1BQU0sS0FBSyxNQUFNRixDQUFJLENBQUMsQ0FDcEQsQ0FFTSxTQUFVRyxHQUFpQkMsRUFBdUIsQ0FDdEQsT0FBTyxLQUFLLFVBQVVBLENBQU8sRUFBSTtDQUNuQyxDRDNCTSxJQUFPQyxHQUFQLEtBQTJCLENBSS9CLFlBQ1VDLEVBQW1CQyxHQUFRLE1BQzNCQyxFQUFvQkQsR0FBUSxPQUFNLENBRGxDLEtBQUEsT0FBQUQsRUFDQSxLQUFBLFFBQUFFLEVBTEYsS0FBQSxZQUEwQixJQUFJQyxHQUM5QixLQUFBLFNBQVcsR0FZbkIsS0FBQSxRQUFXQyxHQUFpQixDQUMxQixLQUFLLFlBQVksT0FBT0EsQ0FBSyxFQUM3QixLQUFLLGtCQUFpQixDQUN4QixFQUNBLEtBQUEsU0FBWUMsR0FBZ0IsUUFDMUJDLEVBQUEsS0FBSyxXQUFPLE1BQUFBLElBQUEsUUFBQUEsRUFBQSxLQUFBLEtBQUdELENBQUssQ0FDdEIsQ0FiRyxDQWtCSCxNQUFNLE9BQUssQ0FDVCxHQUFJLEtBQUssU0FDUCxNQUFNLElBQUksTUFDUiwrR0FBK0csRUFJbkgsS0FBSyxTQUFXLEdBQ2hCLEtBQUssT0FBTyxHQUFHLE9BQVEsS0FBSyxPQUFPLEVBQ25DLEtBQUssT0FBTyxHQUFHLFFBQVMsS0FBSyxRQUFRLENBQ3ZDLENBRVEsbUJBQWlCLENBQ3ZCLGNBQ0UsR0FBSSxDQUNGLElBQU1FLEVBQVUsS0FBSyxZQUFZLFlBQVcsRUFDNUMsR0FBSUEsSUFBWSxLQUNkLE9BR0ZELEVBQUEsS0FBSyxhQUFTLE1BQUFBLElBQUEsUUFBQUEsRUFBQSxLQUFBLEtBQUdDLENBQU8sQ0FDMUIsT0FBU0YsRUFBTyxFQUNkRyxFQUFBLEtBQUssV0FBTyxNQUFBQSxJQUFBLFFBQUFBLEVBQUEsS0FBQSxLQUFHSCxDQUFjLENBQy9CLENBRUosQ0FFQSxNQUFNLE9BQUssT0FDVCxLQUFLLE9BQU8sSUFBSSxPQUFRLEtBQUssT0FBTyxFQUNwQyxLQUFLLE9BQU8sSUFBSSxRQUFTLEtBQUssUUFBUSxFQUN0QyxLQUFLLFlBQVksTUFBSyxHQUN0QkMsRUFBQSxLQUFLLFdBQU8sTUFBQUEsSUFBQSxRQUFBQSxFQUFBLEtBQUEsSUFBQSxDQUNkLENBRUEsS0FBS0MsRUFBdUIsQ0FDMUIsT0FBTyxJQUFJLFFBQVNFLEdBQVcsQ0FDN0IsSUFBTUMsRUFBT0MsR0FBaUJKLENBQU8sRUFDakMsS0FBSyxRQUFRLE1BQU1HLENBQUksRUFDekJELEVBQU8sRUFFUCxLQUFLLFFBQVEsS0FBSyxRQUFTQSxDQUFPLENBRXRDLENBQUMsQ0FDSCxHRS9FRixJQUFBRyxHQUFBLEdBQUFDLEdBQUFELEdBQUEsY0FBQUUsR0FBQSx3QkFBQUMsR0FBQSxlQUFBQyxHQUFBLDBCQUFBQyxHQUFBLGFBQUFDLEtDUUEsT0FBUyxTQUFBQyxPQUFhLHFCQUt0QixJQUFNQyxHQUFxQixJQWFwQixTQUFTQyxHQUFPQyxFQUFNLENBQUUsUUFBQUMsRUFBVUosR0FBTyxVQUFBSyxFQUFZSixHQUFvQixNQUFBSyxFQUFRLEtBQU0sRUFBSSxDQUFDLEVBQUcsQ0FDcEcsT0FBTyxJQUFJLFFBQVEsQ0FBQ0MsRUFBU0MsSUFBVyxDQUN0QyxJQUFNQyxFQUFRTCxFQUFRLE1BQU9ELEVBQU0sQ0FDakMsTUFBTyxRQUFRLFdBQWEsUUFDNUIsWUFBYSxHQUNiLElBQUssQ0FBRSxHQUFHLFFBQVEsSUFBSyxjQUFlLElBQUssYUFBYyxHQUFJLENBQy9ELENBQUMsRUFDR08sRUFBUyxHQUNUQyxFQUFTLEdBQ2JGLEVBQU0sT0FBTyxHQUFHLE9BQVNHLEdBQU0sQ0FBRUYsR0FBVUUsRUFBRSxTQUFTLE1BQU0sQ0FBRyxDQUFDLEVBQ2hFSCxFQUFNLE9BQU8sR0FBRyxPQUFTRyxHQUFNLENBQUVELEdBQVVDLEVBQUUsU0FBUyxNQUFNLENBQUcsQ0FBQyxFQUVoRSxJQUFNQyxFQUFRLFdBQVcsSUFBTSxDQUM3QkosRUFBTSxLQUFLLFNBQVMsRUFDcEJELEVBQU8sSUFBSSxNQUFNLEdBQUdGLENBQUssVUFBVUgsRUFBSyxLQUFLLEdBQUcsQ0FBQyxxQkFBcUJFLENBQVMsSUFBSSxDQUFDLENBQ3RGLEVBQUdBLENBQVMsRUFFWkksRUFBTSxHQUFHLE9BQVNLLEdBQVMsQ0FDekIsYUFBYUQsQ0FBSyxFQUNkQyxJQUFTLEVBQUdOLEVBQU8sSUFBSSxNQUFNLFFBQVFMLEVBQUssS0FBSyxHQUFHLENBQUMsWUFBWVcsQ0FBSSxLQUFLSCxFQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFDdkZKLEVBQVFHLENBQU0sQ0FDckIsQ0FBQyxFQUNERCxFQUFNLEdBQUcsUUFBVU0sR0FBUSxDQUN6QixhQUFhRixDQUFLLEVBQ2xCTCxFQUFPTyxDQUFHLENBQ1osQ0FBQyxDQUNILENBQUMsQ0FDSCxDQVlPLFNBQVNDLEdBQWNDLEVBQVEsQ0FDcEMsSUFBTUMsRUFBMEJELEVBQzFCRSxFQUFVLE1BQU0sUUFBUUQsQ0FBRyxFQUFJQSxFQUFPQSxHQUFLLFFBQVVBLEdBQUssTUFBUSxDQUFDLEVBR3pFLE9BRnNCQyxFQUFRLE9BQVMsR0FBS0EsRUFBUSxDQUFDLEdBQUssTUFBTSxRQUFRQSxFQUFRLENBQUMsRUFBRSxNQUFNLEVBR2hGQSxFQUFRLFFBQVNDLElBQVNBLEVBQUksUUFBVSxDQUFDLEdBQUcsSUFBSyxJQUFPLENBQzdELEdBQUksRUFBRSxTQUFXLEVBQUUsSUFBTSxFQUFFLElBQzNCLEtBQU0sRUFBRSxNQUFRLEtBQ2hCLE1BQU9BLEVBQUksT0FBU0EsRUFBSSxJQUFNQSxFQUFJLEtBQU8sS0FDekMsUUFBU0EsRUFBSSxNQUFRQSxFQUFJLGdCQUFrQixLQUMzQyxXQUFZLEVBQUUsWUFBYyxJQUM5QixFQUFFLENBQUMsRUFFRUQsRUFBUSxJQUFLRSxJQUFPLENBQ3pCLEdBQUlBLEVBQUUsU0FBV0EsRUFBRSxJQUFNQSxFQUFFLElBQzNCLEtBQU1BLEVBQUUsTUFBUSxLQUNoQixNQUFPQSxFQUFFLE9BQVMsS0FDbEIsUUFBU0EsRUFBRSxTQUFXLEtBQ3RCLFdBQVlBLEVBQUUsWUFBYyxJQUM5QixFQUFFLENBQ0osQ0FPQSxlQUFzQkMsR0FBaUIsQ0FBRSxRQUFBbEIsRUFBUyxNQUFBRSxFQUFRLGFBQWMsRUFBSSxDQUFDLEVBQUcsQ0FDOUUsSUFBTUksRUFBUyxNQUFNUixHQUFPLENBQUMsU0FBVSxTQUFVLE1BQU0sRUFBRyxDQUFFLFFBQUFFLEVBQVMsTUFBQUUsQ0FBTSxDQUFDLEVBQ3hFVyxFQUNKLEdBQUksQ0FDRkEsRUFBUyxLQUFLLE1BQU1QLENBQU0sQ0FDNUIsT0FBU0ssRUFBSyxDQUNaLE1BQU0sSUFBSSxNQUFNLEdBQUdULENBQUssaURBQWlEUyxFQUFJLE9BQU8sRUFBRSxDQUN4RixDQUNBLE9BQU9DLEdBQWNDLENBQU0sQ0FDN0IsQ0NqR08sSUFBTU0sR0FBYSxDQUN4QixLQUFNLENBQ0osS0FBTSxjQUNOLFlBQWEsa1ZBQ2IsWUFBYSxDQUNYLEtBQU0sU0FDTixXQUFZLENBQUMsRUFDYixTQUFVLENBQUMsQ0FDYixDQUNGLEVBQ0EsTUFBTSxRQUFRQyxFQUFPQyxFQUFPLENBQUMsRUFBRyxDQUM5QixJQUFNQyxFQUFVLE1BQU1DLEdBQWlCLENBQUUsUUFBU0YsRUFBSyxRQUFTLE1BQU8sYUFBYyxDQUFDLEVBQ3RGLE1BQU8sQ0FDTCxRQUFTLENBQUMsQ0FBRSxLQUFNLE9BQVEsS0FBTSxLQUFLLFVBQVVDLEVBQVMsS0FBTSxDQUFDLENBQUUsQ0FBQyxDQUNwRSxDQUNGLENBQ0YsRUNaTyxJQUFNRSxHQUFXLENBQ3RCLEtBQU0sQ0FDSixLQUFNLFlBQ04sWUFBYSwrS0FDYixZQUFhLENBQ1gsS0FBTSxTQUNOLFdBQVksQ0FDVixRQUFTLENBQUUsS0FBTSxTQUFVLFlBQWEsb0ZBQXFGLENBQy9ILEVBQ0EsU0FBVSxDQUFDLFNBQVMsQ0FDdEIsQ0FDRixFQUNBLE1BQU0sUUFBUSxDQUFFLFFBQUFDLENBQVEsRUFBR0MsRUFBTyxDQUFDLEVBQUcsQ0FDcEMsR0FBSSxDQUFDRCxFQUFTLE1BQU0sSUFBSSxNQUFNLHFCQUFxQixFQUVuRCxJQUFNRSxHQURTLE1BQU1DLEdBQWlCLENBQUUsUUFBU0YsRUFBSyxRQUFTLE1BQU8sV0FBWSxDQUFDLEdBQzlELEtBQU1HLEdBQU1BLEVBQUUsS0FBT0osQ0FBTyxHQUFLLEtBRXRELEdBQUksQ0FBQ0UsRUFDSCxNQUFNLElBQUksTUFBTSxnQ0FBZ0NGLENBQU8scUdBQXFHLEVBRzlKLE1BQU8sQ0FDTCxRQUFTLENBQUMsQ0FBRSxLQUFNLE9BQVEsS0FBTSxLQUFLLFVBQVVFLEVBQU8sS0FBTSxDQUFDLENBQUUsQ0FBQyxDQUNsRSxDQUNGLENBQ0YsRUNYQSxPQUFTLFlBQUFHLEdBQVUsV0FBQUMsR0FBUyxRQUFBQyxPQUFZLG1CQUN4QyxPQUFTLFFBQUFDLEdBQU0sV0FBQUMsT0FBZSxZQUM5QixPQUFTLFdBQUFDLE9BQWUsVUFFeEIsSUFBTUMsR0FBa0Isd0JBQ2xCQyxHQUF1Qiw4Q0FDdkJDLEdBQXFCLEtBQ3JCQyxHQUFrQixJQUlsQkMsR0FBMkIsQ0FDL0IsZ0JBQ0EsZ0JBQ0EsaUJBQ0Esd0JBQ0EscUJBQ0EsdUJBQ0YsRUFHTUMsR0FBYSxJQUFJLElBZWhCLFNBQVNDLEdBQWtCQyxFQUFTLENBQ3pDLFFBQVdDLEtBQVdELEVBQVEsTUFBTSxPQUFPLEVBQUcsQ0FDNUMsSUFBTUUsRUFBSUQsRUFBUSxNQUFNLDJDQUEyQyxFQUNuRSxHQUFJLENBQUNDLEVBQUcsU0FDUixJQUFJQyxFQUFRRCxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQ2hCRSxFQUFTRCxFQUFNLE1BQU0sZ0NBQWdDLEVBQzNELE9BQUlDLEVBQVFELEVBQVFDLEVBQU8sQ0FBQyxFQUN2QkQsRUFBUUEsRUFBTSxRQUFRLFVBQVcsRUFBRSxFQUFFLEtBQUssRUFDeENBLEdBQVMsSUFDbEIsQ0FDQSxPQUFPLElBQ1QsQ0FVQSxlQUFzQkUsR0FBZ0IsQ0FBRSxZQUFBQyxFQUFhLE9BQUFDLENBQU8sRUFBRyxDQUM3RCxJQUFJQyxFQUNKLEdBQUksQ0FDRkEsRUFBUSxNQUFNQyxHQUFRSCxDQUFXLENBQ25DLE1BQVEsQ0FDTixPQUFPLElBQ1QsQ0FDQSxJQUFNSSxFQUFhLENBQUMsRUFDcEIsUUFBV0MsS0FBUUgsRUFBTyxDQUN4QixHQUFJLENBQUNHLEVBQUssU0FBUyxPQUFPLEdBQUtBLEVBQUssV0FBVyxHQUFHLEVBQUcsU0FDckQsSUFBTUMsRUFBT0MsR0FBS1AsRUFBYUssQ0FBSSxFQUNuQyxHQUFJLENBQ0YsSUFBTUcsRUFBVSxLQUFLLE1BQU0sTUFBTUMsR0FBU0gsRUFBTSxNQUFNLENBQUMsRUFJdkQsR0FISUUsR0FBUyxPQUFTLG9CQUFzQkEsR0FBUyxVQUFZLEdBQzdELE9BQU9BLEVBQVEsY0FBaUIsVUFBWSxDQUFDQSxFQUFRLGNBQ3JELE9BQU9BLEVBQVEsbUJBQXNCLFVBQVksQ0FBQ0EsRUFBUSxtQkFDMURBLEVBQVEsU0FBV1AsRUFBUSxTQUMvQixHQUFNLENBQUUsUUFBQVMsQ0FBUSxFQUFJLE1BQU1DLEdBQUtMLENBQUksRUFDbkNGLEVBQVcsS0FBSyxDQUFFLEtBQUFFLEVBQU0sUUFBQUUsRUFBUyxRQUFBRSxDQUFRLENBQUMsQ0FDNUMsTUFBUSxDQUVSLENBQ0YsQ0FDQSxPQUFJTixFQUFXLFNBQVcsRUFBVSxNQUNwQ0EsRUFBVyxLQUFLLENBQUNRLEVBQUdDLElBQU1BLEVBQUUsUUFBVUQsRUFBRSxPQUFPLEVBQ3hDLENBQUUsS0FBTVIsRUFBVyxDQUFDLEVBQUUsS0FBTSxRQUFTQSxFQUFXLENBQUMsRUFBRSxPQUFRLEVBQ3BFLENBU0EsZUFBc0JVLEdBQXFCLENBQUUsS0FBQVIsRUFBTSxRQUFBRSxFQUFTLFFBQUFPLEVBQVUsV0FBVyxNQUFPLElBQUFDLEVBQU0sS0FBSyxHQUFJLEVBQUcsQ0FDeEcsSUFBTUMsRUFBU0MsR0FBVyxJQUFJWixDQUFJLEVBQ2xDLEdBQUlXLEdBQVVBLEVBQU8sVUFBWUQsRUFBSSxFQUFJRyxHQUFpQixPQUFPRixFQUFPLFFBRXhFLElBQU1HLEVBQWEsSUFBSSxnQkFDakJDLEVBQVEsV0FBVyxJQUFNRCxFQUFXLE1BQU0sRUFBR0UsRUFBa0IsRUFDakVDLEVBQ0osR0FBSSxDQUNGQSxFQUFNLE1BQU1SLEVBQVEsR0FBR1MsRUFBb0IsUUFBUSxtQkFBbUJoQixFQUFRLGlCQUFpQixDQUFDLEdBQUksQ0FDbEcsT0FBUSxPQUNSLFFBQVMsQ0FBRSxlQUFnQixtQ0FBb0MsRUFDL0QsS0FBTSxJQUFJLGdCQUFnQixDQUFFLFdBQVksZ0JBQWlCLGNBQWVBLEVBQVEsWUFBYSxDQUFDLEVBQUUsU0FBUyxFQUN6RyxPQUFRWSxFQUFXLE1BQ3JCLENBQUMsQ0FDSCxPQUFTSyxFQUFLLENBQ1osTUFBTSxJQUFJLE1BQ1IsZ0VBQWdFQSxHQUFLLE9BQVMsYUFBZSxZQUFjQSxFQUFJLE9BQU8sa0VBRXhILENBQ0YsUUFBRSxDQUNBLGFBQWFKLENBQUssQ0FDcEIsQ0FFQSxHQUFJLENBQUNFLEVBQUksR0FBSSxDQUNYLElBQUlHLEVBQVNILEVBQUksWUFBYyxPQUFPQSxFQUFJLE1BQU0sRUFDaEQsR0FBSSxDQUVGLElBQU1JLEdBRE8sTUFBTUosRUFBSSxLQUFLLElBQ04sT0FBTyxRQUN6QixPQUFPSSxHQUFZLFVBQVlBLElBQVNELEVBQVNDLEVBQVEsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFDbEYsTUFBUSxDQUF3QixDQUNoQyxJQUFNQyxFQUFXTCxFQUFJLE9BQVMsS0FBT00sR0FBeUIsS0FBTUMsR0FBTUosRUFBTyxZQUFZLEVBQUUsU0FBU0ksQ0FBQyxDQUFDLEVBQzFHLE1BQUlGLEVBQ0ksSUFBSSxNQUNSLHdEQUF3REEsQ0FBUSwrSUFHbEUsRUFFSSxJQUFJLE1BQU0seURBQXlETCxFQUFJLE1BQU0sSUFBSUcsQ0FBTSx1QkFBdUIsQ0FDdEgsQ0FFQSxJQUFNSyxFQUFPLE1BQU1SLEVBQUksS0FBSyxFQUN0QlMsRUFBVUQsR0FBTSxTQUNoQkUsRUFBWSxPQUFPRixHQUFNLFVBQVUsRUFDekMsR0FBSSxPQUFPQyxHQUFZLFVBQVksQ0FBQ0EsR0FBVyxDQUFDLE9BQU8sU0FBU0MsQ0FBUyxHQUFLQSxHQUFhLEVBQ3pGLE1BQU0sSUFBSSxNQUFNLHNHQUFzRyxFQUV4SCxPQUFBZixHQUFXLElBQUlaLEVBQU0sQ0FBRSxRQUFBMEIsRUFBUyxVQUFXaEIsRUFBSSxFQUFJaUIsRUFBWSxHQUFLLENBQUMsRUFDOURELENBQ1QsQ0FRQSxlQUFzQkUsR0FBYyxDQUNsQyxJQUFBQyxFQUFNLFFBQVEsSUFDZCxnQkFBQUMsRUFBa0JELEVBQUksc0JBQXdCNUIsR0FBSzhCLEdBQVEsRUFBRyxXQUFZLGFBQWEsRUFDdkYsWUFBQXJDLEVBQWNtQyxFQUFJLGtCQUFvQjVCLEdBQUsrQixHQUFRRixDQUFlLEVBQUcsVUFBVSxFQUMvRSxJQUFBRyxFQUFNLFFBQVEsSUFBSSxFQUNsQixPQUFBdEMsRUFBU2tDLEVBQUksYUFBZUssR0FDNUIsUUFBQXpCLEVBQVUsV0FBVyxNQUNyQixJQUFBQyxFQUFNLEtBQUssR0FDYixFQUFJLENBQUMsRUFBRyxDQUVOLEdBQUltQixFQUFJLGFBQWVBLEVBQUksWUFBWSxLQUFLLEVBQUcsT0FBT0EsRUFBSSxZQUFZLEtBQUssRUFJM0UsR0FBSSxDQUNGLElBQU1NLEVBQWFoRCxHQUFrQixNQUFNZ0IsR0FBU0YsR0FBS2dDLEVBQUssTUFBTSxFQUFHLE1BQU0sQ0FBQyxFQUM5RSxHQUFJRSxFQUFZLE9BQU9BLENBQ3pCLE1BQVEsQ0FBK0IsQ0FHdkMsSUFBTUMsRUFBUSxNQUFNM0MsR0FBZ0IsQ0FBRSxZQUFBQyxFQUFhLE9BQUFDLENBQU8sQ0FBQyxFQUMzRCxHQUFJeUMsRUFBTyxPQUFPNUIsR0FBcUIsQ0FBRSxHQUFHNEIsRUFBTyxRQUFBM0IsRUFBUyxJQUFBQyxDQUFJLENBQUMsRUFHakUsR0FBSSxDQUNGLElBQU0yQixHQUFPLE1BQU1sQyxHQUFTMkIsRUFBaUIsTUFBTSxHQUFHLEtBQUssRUFDM0QsR0FBSU8sRUFBSyxDQUNQLEdBQUlBLEVBQUksV0FBVyxHQUFHLEVBQ3BCLEdBQUksQ0FDRixJQUFNQyxFQUFTLEtBQUssTUFBTUQsQ0FBRyxFQUM3QixHQUFJQyxHQUFRLE9BQVEsT0FBT0EsRUFBTyxNQUNwQyxNQUFRLENBQXVDLENBRWpELE9BQU9ELENBQ1QsQ0FDRixNQUFRLENBQTRDLENBRXBELE1BQU0sSUFBSSxNQUNSLDBMQUVGLENBQ0YsQ0MzTUEsSUFBTUUsR0FBbUIsd0JBQ25CQyxHQUFxQixJQWNkQyxHQUFlLE9BQU8sT0FBTyxDQUN4QyxPQUFRLG1CQUNSLFNBQVUsbUJBQ1YsS0FBTSxtQkFDTixTQUFVLG1CQUNWLGNBQWUsbUJBQ2YsZUFBZ0IsbUJBQ2hCLFVBQVcsaUJBQ1gsUUFBUyxjQUNULEtBQU0sZ0JBQ1IsQ0FBQyxFQUVLQyxHQUNKLHVLQU9GLGVBQXNCQyxHQUFXQyxFQUFNLENBQ3JDLE9BQUFDLEVBQVMsTUFDVCxLQUFBQyxFQUNBLE1BQUFDLEVBQ0EsUUFBQUMsRUFBVSxXQUFXLE1BQ3JCLFFBQUFDLEVBQVUsUUFBUSxJQUFJLGFBQWVWLEdBQ3JDLFVBQUFXLEVBQVlWLEVBQ2QsRUFBSSxDQUFDLEVBQUcsQ0FDTixJQUFNVyxFQUFTLE1BQU1DLEdBQWMsRUFNN0JDLEVBQU0sSUFBSSxJQUFJSixFQUFRLFFBQVEsTUFBTyxFQUFFLEVBQUlMLENBQUksRUFDckQsR0FBSUcsRUFBTyxPQUFXLENBQUNPLEVBQUdDLENBQUMsSUFBSyxPQUFPLFFBQVFSLENBQUssRUFBR00sRUFBSSxhQUFhLElBQUlDLEVBQUcsT0FBT0MsQ0FBQyxDQUFDLEVBRXhGLElBQU1DLEVBQWEsSUFBSSxnQkFDakJDLEVBQVEsV0FBVyxJQUFNRCxFQUFXLE1BQU0sRUFBR04sQ0FBUyxFQUU1RCxHQUFJLENBQ0YsSUFBTVEsRUFBTSxNQUFNVixFQUFRSyxFQUFJLFNBQVMsRUFBRyxDQUN4QyxPQUFBUixFQUNBLFFBQVMsQ0FDUCxjQUFpQixVQUFVTSxDQUFNLEdBQ2pDLGVBQWdCLG1CQUNoQixlQUFnQixzQkFDbEIsRUFDQSxLQUFNTCxFQUFPLEtBQUssVUFBVUEsQ0FBSSxFQUFJLE9BQ3BDLE9BQVFVLEVBQVcsTUFDckIsQ0FBQyxFQUVELEdBQUlFLEVBQUksU0FBVyxJQUNqQixNQUFNLElBQUksTUFDUiwyT0FHRixFQUVGLEdBQUlBLEVBQUksU0FBVyxJQUNqQixNQUFNLElBQUksTUFDUiwyQ0FBMkNkLENBQUksa0ZBQzNCRixFQUFtQiw4SUFFekMsRUFFRixHQUFJLENBQUNnQixFQUFJLEdBQUksQ0FJWCxJQUFNQyxFQUFNLE1BQU1ELEVBQUksS0FBSyxFQUN2QkUsRUFBY0QsRUFDbEIsR0FBSSxDQUNGLElBQU1FLEVBQVMsS0FBSyxNQUFNRixDQUFHLEVBQzdCQyxFQUFjQyxHQUFRLE9BQU8sU0FBV0EsR0FBUSxTQUFXRixFQUMzRCxJQUFNRyxFQUFPRCxHQUFRLE9BQU8sS0FDeEIsT0FBT0MsR0FBUyxVQUFZQSxHQUFRLENBQUMsT0FBT0YsQ0FBVyxFQUFFLFNBQVNFLENBQUksSUFBR0YsRUFBYyxHQUFHRSxDQUFJLEtBQUtGLENBQVcsR0FDcEgsTUFBUSxDQUE4QixDQUN0QyxNQUFNLElBQUksTUFBTSxXQUFXRixFQUFJLE1BQU0sS0FBS0UsQ0FBVyxFQUFFLENBQ3pELENBRUEsT0FBTyxNQUFNRixFQUFJLEtBQUssQ0FDeEIsT0FBU0ssRUFBSyxDQUNaLE1BQUlBLEVBQUksT0FBUyxhQUFvQixJQUFJLE1BQU0sZ0JBQWdCbkIsQ0FBSSx1QkFBdUJNLENBQVMsSUFBSSxFQUNqR2EsQ0FDUixRQUFFLENBQ0EsYUFBYU4sQ0FBSyxDQUNwQixDQUNGLENDakZBLElBQU1PLEdBQWtCLENBQ3RCLE1BQWdCLEdBQU0sR0FBRyxRQUFVLENBQUMsRUFDcEMsUUFBZ0IsR0FBTSxHQUFHLE1BQU0sVUFBWSxDQUFDLEVBQzVDLElBQWdCLEdBQU0sR0FBRyxNQUFNLE1BQVEsQ0FBQyxFQUN4QyxRQUFnQixHQUFNLEdBQUcsTUFBTSxVQUFZLENBQUMsRUFDNUMsYUFBZ0IsR0FBTSxHQUFHLE1BQU0sZUFBaUIsQ0FBQyxFQUNqRCxjQUFnQixHQUFNLEdBQUcsTUFBTSxnQkFBa0IsQ0FBQyxFQUNsRCxTQUFnQixHQUFNLEdBQUcsTUFBTSxXQUFhLENBQUMsQ0FDL0MsRUFFTUMsR0FBc0IsQ0FDMUIsTUFBZ0IsR0FBTSxHQUFHLFVBQVksQ0FBQyxFQUN0QyxRQUFnQixHQUFNLEdBQUcsTUFBTSxVQUFZLENBQUMsRUFDNUMsSUFBZ0IsR0FBTyxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUksRUFBRSxLQUFPLENBQUMsRUFDMUQsUUFBZ0IsR0FBTSxHQUFHLE1BQU0sVUFBWSxDQUFDLEVBQzVDLGFBQWdCLEdBQU0sR0FBRyxNQUFNLFVBQVksQ0FBQyxFQUM1QyxjQUFnQixHQUFNLEdBQUcsTUFBTSxVQUFZLENBQUMsRUFDNUMsU0FBZ0IsR0FBTyxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUksRUFBRSxLQUFPLENBQUMsRUFDMUQsUUFBZ0IsR0FBTSxHQUFHLFVBQVksQ0FBQyxDQUN4QyxFQUdhQyxHQUFhLENBQ3hCLE1BQU8sU0FDUCxRQUFTLFdBQ1QsSUFBSyxPQUNMLFFBQVMsV0FDVCxhQUFjLGdCQUNkLGNBQWUsaUJBQ2YsU0FBVSxXQUNaLEVBTU8sU0FBU0MsR0FBWUMsRUFBTUMsRUFBVSxDQUMxQyxJQUFNQyxFQUFLTixHQUFnQkksQ0FBSSxFQUMvQixHQUFJLENBQUNFLEVBQUksTUFBTSxJQUFJLE1BQU0sd0NBQXdDRixDQUFJLGFBQWEsT0FBTyxLQUFLSixFQUFlLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUMzSCxPQUFPTSxFQUFHRCxDQUFRLENBQ3BCLENBTU8sU0FBU0UsR0FBZ0JILEVBQU1DLEVBQVUsQ0FDOUMsSUFBTUMsRUFBS0wsR0FBb0JHLENBQUksRUFDbkMsR0FBSSxDQUFDRSxFQUFJLE1BQU0sSUFBSSxNQUFNLDRDQUE0Q0YsQ0FBSSxhQUFhLE9BQU8sS0FBS0gsRUFBbUIsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQ25JLE9BQU9LLEVBQUdELENBQVEsQ0FDcEIsQ0FNTyxTQUFTRyxHQUF1QkgsRUFBVSxDQUMvQyxJQUFNSSxFQUFLSixHQUFVLE1BQU0sZ0JBQzNCLE9BQU8sT0FBT0ksR0FBTyxVQUFZQSxFQUFLQSxFQUFLLElBQzdDLENBU08sU0FBU0MsR0FBZ0JOLEVBQU1PLEVBQVNOLEVBQVUsQ0FDdkQsR0FBSSxDQUFDTSxHQUFXLE9BQU9BLEdBQVksU0FBVSxNQUFPLEdBQ3BELE9BQVFQLEVBQU0sQ0FDWixJQUFLLFFBQ0wsSUFBSyxVQUNILE9BQU9PLEVBQVEsWUFBYyxHQUMvQixJQUFLLE1BQ0wsSUFBSyxXQUNILE9BQU9BLEVBQVEsU0FBVyxHQUM1QixJQUFLLFVBQ0wsSUFBSyxVQUNMLElBQUssZUFDTCxJQUFLLGdCQUFpQixDQUNwQixHQUFJQSxFQUFRLFdBQWEsR0FBTSxNQUFPLEdBQ3RDLElBQU1DLEVBQVdKLEdBQXVCSCxDQUFRLEVBQzFDUSxFQUFRRixFQUFRLFdBQWFBLEVBQVEsSUFBTSxLQUNqRCxNQUFPLENBQUMsQ0FBQ0MsR0FBWUMsSUFBVUQsQ0FDakMsQ0FDQSxRQUNFLE1BQU8sRUFDWCxDQUNGLENBTU8sU0FBU0UsR0FBaUJILEVBQVMsQ0FDeEMsR0FBSSxDQUFDQSxHQUFXLE9BQU9BLEdBQVksU0FBVSxPQUFPLEtBQ3BELElBQU1JLEVBQU1KLEVBQVEsV0FBYUEsRUFBUSxhQUFlLEtBQ3hELE9BQUlJLEdBQU8sS0FBYSxLQUNwQixPQUFPQSxHQUFRLFNBQWlCLE9BQU8sU0FBU0EsQ0FBRyxFQUFJLElBQUksS0FBS0EsQ0FBRyxFQUFFLFlBQVksRUFBSSxLQUNsRixPQUFPQSxDQUFHLENBQ25CLENBR08sU0FBU0MsR0FBVUwsRUFBUyxDQUNqQyxNQUFJLENBQUNBLEdBQVcsT0FBT0EsR0FBWSxTQUFpQixLQUM3Q0EsRUFBUSxXQUFhQSxFQUFRLElBQU0sSUFDNUMsQ0FFTyxJQUFNTSxHQUF1QixPQUFPLEtBQUtqQixFQUFlLEVBQ2xEa0IsR0FBMEIsT0FBTyxLQUFLakIsRUFBbUIsRUNsSXRFLElBQU1rQixHQUFjLElBQUksSUFBSUMsRUFBdUIsRUFFdENDLEdBQXdCLENBQ25DLEtBQU0sQ0FDSixLQUFNLDBCQWFOLFlBQWEsb3NCQUNiLFlBQWEsQ0FDWCxLQUFNLFNBQ04sV0FBWSxDQUNWLFFBQVMsQ0FBRSxLQUFNLFFBQVMsRUFDMUIsS0FBTSxDQUFFLEtBQU0sU0FBVSxLQUFNLENBQUMsR0FBR0YsRUFBVyxDQUFFLEVBQy9DLEtBQU0sQ0FBRSxLQUFNLFNBQVUsWUFBYSw2RkFBeUYsQ0FDaEksRUFDQSxTQUFVLENBQUMsVUFBVyxNQUFNLENBQzlCLENBQ0YsRUFDQSxNQUFNLFFBQVEsQ0FBRSxRQUFBRyxFQUFTLEtBQUFDLEVBQU0sS0FBQUMsQ0FBSyxFQUFHQyxFQUFPLENBQUMsRUFBRyxDQUNoRCxHQUFJLENBQUNILEdBQVcsQ0FBQ0MsRUFBTSxNQUFNLElBQUksTUFBTSwrQkFBK0IsRUFDdEUsR0FBSSxDQUFDSixHQUFZLElBQUlJLENBQUksRUFBRyxNQUFNLElBQUksTUFBTSxpQkFBaUJBLENBQUksWUFBWSxDQUFDLEdBQUdKLEVBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQzFHLEdBQUlJLElBQVMsV0FBYSxDQUFDQyxFQUFNLE1BQU0sSUFBSSxNQUFNLCtDQUErQyxFQU1oRyxJQUFJRSxFQUNKLEdBQUlILElBQVMsVUFDWEcsRUFBTyxxQkFBcUIsbUJBQW1CSixDQUFPLENBQUMsd0JBQ2xELENBQ0wsSUFBTUssRUFBSyxNQUFNQyxHQUFnQixDQUFFLFFBQUFOLEVBQVMsS0FBQUMsRUFBTSxLQUFBQyxFQUFNLFFBQVNDLEVBQUssT0FBUSxDQUFDLEVBQy9FQyxFQUFPLGNBQWNHLEdBQVdOLENBQUksQ0FBQyxJQUFJLG1CQUFtQkQsQ0FBTyxDQUFDLElBQUksbUJBQW1CSyxDQUFFLENBQUMsV0FDaEcsQ0FFQSxJQUFNRyxFQUFPLE1BQU1DLEdBQVdMLEVBQU0sQ0FBRSxRQUFTRCxFQUFLLE9BQVEsQ0FBQyxFQUV2RE8sRUFEV0MsR0FBZ0JWLEVBQU1PLENBQUksRUFDbEIsSUFBS0ksSUFBTyxDQUNuQyxRQUFTQSxFQUFFLFFBQ1gsVUFBV0MsR0FBVUQsQ0FBQyxFQUN0QixPQUFRRSxHQUFnQmIsRUFBTVcsRUFBR0osQ0FBSSxFQUNyQyxVQUFXTyxHQUFpQkgsQ0FBQyxDQUMvQixFQUFFLEVBQ0lJLEVBQVMsQ0FBRSxRQUFBaEIsRUFBUyxLQUFBQyxFQUFNLEtBQU1BLElBQVMsVUFBWSxLQUFPQyxFQUFNLGdCQUFpQmUsR0FBdUJULENBQUksRUFBRyxTQUFVRSxDQUFRLEVBQ3pJLE1BQU8sQ0FBRSxRQUFTLENBQUMsQ0FBRSxLQUFNLE9BQVEsS0FBTSxLQUFLLFVBQVVNLEVBQVEsS0FBTSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQzlFLENBQ0YsRUFFQSxlQUFlVixHQUFnQixDQUFFLFFBQUFOLEVBQVMsS0FBQUMsRUFBTSxLQUFBQyxFQUFNLFFBQUFnQixDQUFRLEVBQUcsQ0FDL0QsSUFBTUMsRUFBVyxjQUFjWixHQUFXTixDQUFJLENBQUMsSUFBSSxtQkFBbUJELENBQU8sQ0FBQyxHQUN4RW9CLEVBQWUsTUFBTVgsR0FBV1UsRUFBVSxDQUFFLFFBQUFELENBQVEsQ0FBQyxFQUNyREcsRUFBUUMsR0FBWXJCLEVBQU1tQixDQUFZLEVBQ3RDRyxFQUFRRixFQUFNLEtBQU1HLEdBQU1BLEVBQUUsT0FBU3RCLENBQUksRUFDL0MsR0FBSSxDQUFDcUIsRUFBTyxDQUNWLElBQU1FLEVBQVlKLEVBQU0sSUFBS0csR0FBTUEsRUFBRSxJQUFJLEVBQUUsT0FBTyxPQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUssU0FDekUsTUFBTSxJQUFJLE1BQU0sK0JBQStCdkIsQ0FBSSxXQUFXQyxDQUFJLGNBQWNGLENBQU8sZ0JBQWdCeUIsQ0FBUyxFQUFFLENBQ3BILENBQ0EsSUFBTXBCLEVBQUtrQixFQUFNLElBQU1BLEVBQU0sSUFDN0IsR0FBSSxDQUFDbEIsRUFBSSxNQUFNLElBQUksTUFBTSw0QkFBNEJKLENBQUksS0FBS0MsQ0FBSSw4QkFBOEIsRUFDaEcsT0FBT0csQ0FDVCxDQ3JEQSxJQUFNcUIsR0FBa0IsQ0FBQyxRQUFTLFVBQVcsTUFBTyxVQUFXLGVBQWdCLGdCQUFpQixVQUFVLEVBQ3BHQyxHQUFzQixFQUN0QkMsR0FBb0IsS0FFYkMsR0FBc0IsQ0FDakMsS0FBTSxDQUNKLEtBQU0sd0JBQ04sWUFBYSx3aUJBQ2IsWUFBYSxDQUNYLEtBQU0sU0FDTixXQUFZLENBQ1YsUUFBUyxDQUFFLEtBQU0sUUFBUyxDQUM1QixFQUNBLFNBQVUsQ0FBQyxTQUFTLENBQ3RCLENBQ0YsRUFDQSxNQUFNLFFBQVEsQ0FBRSxRQUFBQyxDQUFRLEVBQUdDLEVBQU8sQ0FBQyxFQUFHLENBQ3BDLEdBQUksQ0FBQ0QsRUFBUyxNQUFNLElBQUksTUFBTSxxQkFBcUIsRUFDbkQsSUFBTUUsRUFBSyxtQkFBbUJGLENBQU8sRUFDL0JHLEVBQVcsT0FBTyxTQUFTRixFQUFLLFFBQVEsRUFBSUEsRUFBSyxTQUFXSCxHQUM1RE0sRUFBWSxLQUFLLElBQUksRUFDckJDLEVBQWEsSUFBTSxLQUFLLElBQUksRUFBSUQsRUFBWUQsRUFDNUNHLEVBQU9DLEdBQVNDLEdBQVdELEVBQU0sQ0FBRSxRQUFTTixFQUFLLE9BQVEsQ0FBQyxFQUUxRFEsRUFBUyxDQUFFLFFBQUFULEVBQVMsUUFBUyxLQUFNLFdBQVksQ0FBQyxDQUFFLEVBRXhELFFBQVdVLEtBQVFkLEdBQWlCYSxFQUFPLFdBQVdDLENBQUksRUFBSSxDQUFDLEVBSS9ELEdBQU0sQ0FBQ0MsRUFBZ0IsR0FBR0MsQ0FBWSxFQUFJLE1BQU0sUUFBUSxXQUFXLENBQ2pFTixFQUFJLHFCQUFxQkosQ0FBRSxtQkFBbUIsRUFDOUMsR0FBR04sR0FBZ0IsSUFBS2MsR0FBU0osRUFBSSxjQUFjTyxHQUFXSCxDQUFJLENBQUMsSUFBSVIsQ0FBRSxFQUFFLENBQUMsQ0FDOUUsQ0FBQyxFQUVELEdBQUlTLEVBQWUsU0FBVyxZQUFhLENBQ3pDLElBQU1HLEVBQWtCSCxFQUFlLE1BQ2pDSSxFQUFXQyxHQUFnQixVQUFXRixDQUFlLEVBQ3JERyxFQUFTRixFQUFTLEtBQU1HLEdBQU1DLEdBQWdCLFVBQVdELEVBQUdKLENBQWUsQ0FBQyxHQUFLLEtBQ3ZGTCxFQUFPLFFBQVUsQ0FDZixjQUFlUSxHQUFRLFNBQVcsS0FDbEMsdUJBQXdCRyxHQUFpQkgsQ0FBTSxFQUMvQyxhQUFjRixFQUFTLE1BQ3pCLENBQ0YsTUFDRU4sRUFBTyxRQUFVLENBQUUsTUFBT0UsRUFBZSxRQUFRLFNBQVcsT0FBT0EsRUFBZSxNQUFNLENBQUUsRUFNNUYsSUFBSVUsRUFBa0IsR0FDbEJDLEVBQVUsRUFDVkMsRUFBUSxFQUVaLFFBQVNDLEVBQUksRUFBR0EsRUFBSTVCLEdBQWdCLE9BQVE0QixJQUFLLENBQy9DLElBQU1kLEVBQU9kLEdBQWdCNEIsQ0FBQyxFQUN4QmpCLEVBQU9NLEdBQVdILENBQUksRUFDdEJlLEVBQVViLEVBQWFZLENBQUMsRUFDOUIsR0FBSUMsRUFBUSxTQUFXLFlBQWEsQ0FDbENoQixFQUFPLFdBQVdDLENBQUksRUFBSSxDQUFFLE1BQU9lLEVBQVEsUUFBUSxTQUFXLE9BQU9BLEVBQVEsTUFBTSxDQUFFLEVBQ3JGLFFBQ0YsQ0FJQSxJQUFNQyxFQUFVQyxHQUFZakIsRUFBTWUsRUFBUSxLQUFLLEVBQzVDLElBQUtHLElBQU8sQ0FBRSxFQUFBQSxFQUFHLE9BQVFBLEVBQUUsSUFBTUEsRUFBRSxJQUFLLEtBQU1BLEVBQUUsTUFBUUEsRUFBRSxJQUFNQSxFQUFFLEdBQUksRUFBRSxFQUN4RSxPQUFRQyxHQUFRQSxFQUFJLE1BQU0sRUFDN0JOLEdBQVNHLEVBQVEsT0FFakIsUUFBU0ksRUFBSSxFQUFHQSxFQUFJSixFQUFRLE9BQVFJLEdBQUtqQyxHQUFxQixDQUM1RCxJQUFNa0MsR0FBUUwsRUFBUSxNQUFNSSxFQUFHQSxFQUFJakMsRUFBbUIsRUFFdEQsR0FBSXdCLEdBQW1CaEIsRUFBVyxFQUFHLENBQ25DZ0IsRUFBa0IsR0FDbEJDLEdBQVdTLEdBQU0sT0FDakIsT0FBVyxDQUFFLEtBQUFDLEVBQU0sT0FBQUMsRUFBTyxJQUFLRixHQUM3QnRCLEVBQU8sV0FBV0MsQ0FBSSxFQUFFLEtBQUssQ0FDM0IsS0FBQXNCLEVBQU0sR0FBSUMsR0FDVixNQUFPLGlDQUFpQzlCLENBQVEsb0RBQ2xELENBQUMsRUFFSCxRQUNGLEVBRWlCLE1BQU0sUUFBUSxXQUM3QjRCLEdBQU0sSUFBSSxDQUFDLENBQUUsT0FBQUUsQ0FBTyxJQUFNM0IsRUFBSSxjQUFjQyxDQUFJLElBQUlMLENBQUUsSUFBSSxtQkFBbUIrQixDQUFNLENBQUMsV0FBVyxDQUFDLENBQ2xHLEdBRVMsUUFBUSxDQUFDQyxFQUFJQyxLQUFNLENBQzFCLEdBQU0sQ0FBRSxFQUFBUCxHQUFHLE9BQUFLLEdBQVEsS0FBQUQsRUFBSyxFQUFJRCxHQUFNSSxFQUFDLEVBQ25DLEdBQUlELEVBQUcsU0FBVyxZQUFhLENBQzdCekIsRUFBTyxXQUFXQyxDQUFJLEVBQUUsS0FBSyxDQUFFLEtBQUFzQixHQUFNLEdBQUlDLEdBQVEsTUFBT0MsRUFBRyxRQUFRLFNBQVcsT0FBT0EsRUFBRyxNQUFNLENBQUUsQ0FBQyxFQUNqRyxNQUNGLENBQ0EsSUFBTUUsR0FBbUJGLEVBQUcsTUFDdEJuQixHQUFXQyxHQUFnQk4sRUFBTTBCLEVBQWdCLEVBQ2pEbkIsR0FBU0YsR0FBUyxLQUFNRyxJQUFNQyxHQUFnQlQsRUFBTVEsR0FBR2tCLEVBQWdCLENBQUMsR0FBSyxLQUU3RUMsR0FBUSxDQUNaLEtBQUFMLEdBQ0EsR0FBSUMsR0FDSixjQUFlaEIsSUFBUSxTQUFXLEtBQ2xDLGdCQUFpQnFCLEdBQVVyQixFQUFNLEdBQUtzQixHQUF1QkgsRUFBZ0IsRUFDN0UsdUJBQXdCaEIsR0FBaUJILEVBQU0sRUFDL0MsYUFBY0YsR0FBUyxNQUN6QixFQUVJLE9BQU9hLEdBQUUsUUFBVyxZQUFXUyxHQUFNLFFBQVVULEdBQUUsUUFDakRsQixJQUFTLFlBQWMsT0FBT2tCLEdBQUUsU0FBWSxZQUFXUyxHQUFNLFFBQVVULEdBQUUsU0FDN0VuQixFQUFPLFdBQVdDLENBQUksRUFBRSxLQUFLMkIsRUFBSyxDQUNwQyxDQUFDLENBQ0gsQ0FDRixDQUVBLE9BQUlmLEVBQVUsSUFDWmIsRUFBTyxRQUFVLEdBQ2pCQSxFQUFPLGNBQ0wsd0JBQXdCTixDQUFRLHFCQUFxQixLQUFLLElBQUksRUFBSUMsQ0FBUyxPQUN4RWtCLENBQU8sT0FBT0MsQ0FBSyw4RUFHbkIsQ0FDTCxRQUFTLENBQUMsQ0FBRSxLQUFNLE9BQVEsS0FBTSxLQUFLLFVBQVVkLEVBQVEsS0FBTSxDQUFDLENBQUUsQ0FBQyxDQUNuRSxDQUNGLENBQ0YsRUN0Sk8sSUFBTStCLEdBQWMsQ0FDekIsUUFBUyxNQUFPLFVBQVcsVUFBVyxlQUFnQixnQkFDdEQsZUFBZ0IsaUJBQWtCLGNBQWUsVUFBVyxNQUFPLE1BQ25FLFNBQVUsaUJBQWtCLGlCQUM1QixnQkFBaUIsa0JBQW1CLFVBQ3RDLEVBVWFDLEdBQVksQ0FBQyxRQUFTLE9BQVEsT0FBUSxRQUFTLFFBQVMsVUFBVSxFQUV6RUMsR0FBYyxJQUFJLElBQUksQ0FBQyxNQUFPLEdBQUdGLEVBQVcsQ0FBQyxFQUM3Q0csR0FBa0IsSUFBSSxJQUFJRixFQUFTLEVBRTVCRyxHQUFXLENBQ3RCLEtBQU0sQ0FDSixLQUFNLFlBQ04sWUFBYSwwWkFDYixZQUFhLENBQ1gsS0FBTSxTQUNOLFdBQVksQ0FDVixRQUFTLENBQUUsS0FBTSxRQUFTLEVBQzFCLEtBQU0sQ0FDSixLQUFNLFNBQ04sS0FBTSxDQUFDLEdBQUdGLEVBQVcsRUFDckIsUUFBUyxNQUNULFlBQWEscUVBQ2YsRUFDQSxLQUFNLENBQUUsS0FBTSxTQUFVLFlBQWEsOERBQStELEVBQ3BHLFFBQVMsQ0FDUCxLQUFNLFNBQ04sS0FBTUQsR0FDTixZQUFhLGlJQUNmLEVBSUEsTUFBTyxDQUFFLEtBQU0sU0FBVSxRQUFTLEdBQUksUUFBUyxFQUFHLFFBQVMsR0FBSSxFQUMvRCxLQUFNLENBQUUsS0FBTSxTQUFVLFFBQVMsRUFBRyxZQUFhLHVDQUF3QyxDQUMzRixFQUNBLFNBQVUsQ0FBQyxTQUFTLENBQ3RCLENBQ0YsRUFDQSxNQUFNLFFBQVEsQ0FBRSxRQUFBSSxFQUFTLEtBQUFDLEVBQU8sTUFBTyxLQUFBQyxFQUFNLFFBQUFDLEVBQVMsTUFBQUMsRUFBUSxHQUFJLEtBQUFDLENBQUssRUFBR0MsRUFBTyxDQUFDLEVBQUcsQ0FDbkYsR0FBSSxDQUFDTixFQUFTLE1BQU0sSUFBSSxNQUFNLHFCQUFxQixFQUNuRCxHQUFJLENBQUNILEdBQVksSUFBSUksQ0FBSSxFQUFHLE1BQU0sSUFBSSxNQUFNLGlCQUFpQkEsQ0FBSSxZQUFZLENBQUMsR0FBR0osRUFBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFDMUcsR0FBSU0sSUFBWSxRQUFhLENBQUNMLEdBQWdCLElBQUlLLENBQU8sRUFDdkQsTUFBTSxJQUFJLE1BQU0sb0JBQW9CQSxDQUFPLFlBQVlQLEdBQVUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUkvRSxHQUFJUSxFQUFRLElBQUssTUFBTSxJQUFJLE1BQU0sa0JBQWtCQSxDQUFLLDhDQUE4QyxFQUt0RyxJQUFNRyxFQUFRLENBQUUsTUFBQUgsQ0FBTSxFQUNsQkgsSUFBUyxRQUFPTSxFQUFNLFVBQVlOLEdBQ2xDQyxJQUFNSyxFQUFNLGNBQWdCTCxHQUM1QkMsSUFBU0ksRUFBTSxRQUFVSixHQUN6QkUsSUFBTUUsRUFBTSxLQUFPRixHQUN2QixJQUFNRyxFQUFPLE1BQU1DLEdBQ2pCLHFCQUFxQixtQkFBbUJULENBQU8sQ0FBQyxRQUNoRCxDQUFFLE1BQUFPLEVBQU8sUUFBU0QsRUFBSyxPQUFRLENBQ2pDLEVBQ0EsTUFBTyxDQUFFLFFBQVMsQ0FBQyxDQUFFLEtBQU0sT0FBUSxLQUFNLEtBQUssVUFBVUUsRUFBTSxLQUFNLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FDNUUsQ0FDRixFQ3JFQSxJQUFNRSxHQUFnQixPQUFPLE9BQU9DLEVBQUssRUFFbkNDLEdBQVMsSUFBSUMsR0FDakIsQ0FBRSxLQUFNLGVBQWdCLFFBQVMsUUFBUyxFQUMxQyxDQUFFLGFBQWMsQ0FBRSxNQUFPLENBQUMsQ0FBRSxDQUFFLENBQ2hDLEVBRUFELEdBQU8sa0JBQWtCRSxHQUF3QixVQUFhLENBQzVELE1BQU9KLEdBQWMsSUFBS0ssR0FBTUEsRUFBRSxJQUFJLENBQ3hDLEVBQUUsRUFFRkgsR0FBTyxrQkFBa0JJLEdBQXVCLE1BQU9DLEdBQVEsQ0FDN0QsSUFBTUMsRUFBT1IsR0FBYyxLQUFNLEdBQU0sRUFBRSxLQUFLLE9BQVNPLEVBQUksT0FBTyxJQUFJLEVBQ3RFLEdBQUksQ0FBQ0MsRUFBTSxNQUFNLElBQUksTUFBTSxpQkFBaUJELEVBQUksT0FBTyxJQUFJLEVBQUUsRUFDN0QsR0FBSSxDQUNGLE9BQU8sTUFBTUMsRUFBSyxRQUFRRCxFQUFJLE9BQU8sV0FBYSxDQUFDLENBQUMsQ0FDdEQsT0FBU0UsRUFBSyxDQUNaLE1BQU8sQ0FDTCxRQUFTLENBQUMsQ0FBRSxLQUFNLE9BQVEsS0FBTSxVQUFVQSxFQUFJLE9BQU8sRUFBRyxDQUFDLEVBQ3pELFFBQVMsRUFDWCxDQUNGLENBQ0YsQ0FBQyxFQU1ELFNBQVNDLEdBQW1CQyxFQUFTLENBQ25DLFFBQVEsT0FBTyxNQUFNLEtBQUssVUFBVUEsQ0FBTyxFQUFJO0FBQUEsRUFBTSxJQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FDNUUsQ0FFQSxRQUFRLEdBQUcsb0JBQXNCRixHQUFRLENBQ3ZDQyxHQUFtQixDQUNqQixNQUFPLG1CQUNQLEtBQU0sb0JBQ04sUUFBU0QsR0FBSyxRQUNkLE1BQU9BLEdBQUssTUFDWixlQUFnQixTQUNoQixnQkFBaUIsUUFBUSxJQUFJLGlCQUFtQixLQUNoRCxTQUFVLFFBQVEsU0FDbEIsR0FBSSxJQUFJLEtBQUssRUFBRSxZQUFZLENBQzdCLENBQUMsQ0FDSCxDQUFDLEVBRUQsUUFBUSxHQUFHLHFCQUF1QkcsR0FBVyxDQUMzQ0YsR0FBbUIsQ0FDakIsTUFBTyxtQkFDUCxLQUFNLHFCQUNOLE9BQVEsT0FBT0UsQ0FBTSxFQUNyQixNQUEyQkEsR0FBUyxNQUNwQyxlQUFnQixTQUNoQixnQkFBaUIsUUFBUSxJQUFJLGlCQUFtQixLQUNoRCxTQUFVLFFBQVEsU0FDbEIsR0FBSSxJQUFJLEtBQUssRUFBRSxZQUFZLENBQzdCLENBQUMsQ0FDSCxDQUFDLEVBRUQsTUFBTVYsR0FBTyxRQUFRLElBQUlXLEVBQXNCIiwKICAibmFtZXMiOiBbImV4dGVybmFsX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiQlJBTkQiLCAiRElSVFkiLCAiRU1QVFlfUEFUSCIsICJJTlZBTElEIiwgIk5FVkVSIiwgIk9LIiwgIlBhcnNlU3RhdHVzIiwgIlpvZFR5cGUiLCAiWm9kQW55IiwgIlpvZEFycmF5IiwgIlpvZEJpZ0ludCIsICJab2RCb29sZWFuIiwgIlpvZEJyYW5kZWQiLCAiWm9kQ2F0Y2giLCAiWm9kRGF0ZSIsICJab2REZWZhdWx0IiwgIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsICJab2RFZmZlY3RzIiwgIlpvZEVudW0iLCAiWm9kRXJyb3IiLCAiWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIiwgIlpvZEZ1bmN0aW9uIiwgIlpvZEludGVyc2VjdGlvbiIsICJab2RJc3N1ZUNvZGUiLCAiWm9kTGF6eSIsICJab2RMaXRlcmFsIiwgIlpvZE1hcCIsICJab2ROYU4iLCAiWm9kTmF0aXZlRW51bSIsICJab2ROZXZlciIsICJab2ROdWxsIiwgIlpvZE51bGxhYmxlIiwgIlpvZE51bWJlciIsICJab2RPYmplY3QiLCAiWm9kT3B0aW9uYWwiLCAiWm9kUGFyc2VkVHlwZSIsICJab2RQaXBlbGluZSIsICJab2RQcm9taXNlIiwgIlpvZFJlYWRvbmx5IiwgIlpvZFJlY29yZCIsICJab2RTZXQiLCAiWm9kU3RyaW5nIiwgIlpvZFN5bWJvbCIsICJab2RUdXBsZSIsICJab2RVbmRlZmluZWQiLCAiWm9kVW5pb24iLCAiWm9kVW5rbm93biIsICJab2RWb2lkIiwgImFkZElzc3VlVG9Db250ZXh0IiwgImFueVR5cGUiLCAiYXJyYXlUeXBlIiwgImJpZ0ludFR5cGUiLCAiYm9vbGVhblR5cGUiLCAiY29lcmNlIiwgImN1c3RvbSIsICJkYXRlVHlwZSIsICJkYXRldGltZVJlZ2V4IiwgImVuX2RlZmF1bHQiLCAiZGlzY3JpbWluYXRlZFVuaW9uVHlwZSIsICJlZmZlY3RzVHlwZSIsICJlbnVtVHlwZSIsICJmdW5jdGlvblR5cGUiLCAiZ2V0RXJyb3JNYXAiLCAiZ2V0UGFyc2VkVHlwZSIsICJpbnN0YW5jZU9mVHlwZSIsICJpbnRlcnNlY3Rpb25UeXBlIiwgImlzQWJvcnRlZCIsICJpc0FzeW5jIiwgImlzRGlydHkiLCAiaXNWYWxpZCIsICJsYXRlIiwgImxhenlUeXBlIiwgImxpdGVyYWxUeXBlIiwgIm1ha2VJc3N1ZSIsICJtYXBUeXBlIiwgIm5hblR5cGUiLCAibmF0aXZlRW51bVR5cGUiLCAibmV2ZXJUeXBlIiwgIm51bGxUeXBlIiwgIm51bGxhYmxlVHlwZSIsICJudW1iZXJUeXBlIiwgIm9iamVjdFR5cGUiLCAib2JqZWN0VXRpbCIsICJvYm9vbGVhbiIsICJvbnVtYmVyIiwgIm9wdGlvbmFsVHlwZSIsICJvc3RyaW5nIiwgInBpcGVsaW5lVHlwZSIsICJwcmVwcm9jZXNzVHlwZSIsICJwcm9taXNlVHlwZSIsICJxdW90ZWxlc3NKc29uIiwgInJlY29yZFR5cGUiLCAic2V0VHlwZSIsICJzZXRFcnJvck1hcCIsICJzdHJpY3RPYmplY3RUeXBlIiwgInN0cmluZ1R5cGUiLCAic3ltYm9sVHlwZSIsICJ0dXBsZVR5cGUiLCAidW5kZWZpbmVkVHlwZSIsICJ1bmlvblR5cGUiLCAidW5rbm93blR5cGUiLCAidXRpbCIsICJ2b2lkVHlwZSIsICJ1dGlsIiwgIl8iLCAiYXNzZXJ0SXMiLCAiX2FyZyIsICJhc3NlcnROZXZlciIsICJfeCIsICJpdGVtcyIsICJvYmoiLCAiaXRlbSIsICJ2YWxpZEtleXMiLCAiayIsICJmaWx0ZXJlZCIsICJlIiwgIm9iamVjdCIsICJrZXlzIiwgImtleSIsICJhcnIiLCAiY2hlY2tlciIsICJ2YWwiLCAiam9pblZhbHVlcyIsICJhcnJheSIsICJzZXBhcmF0b3IiLCAidmFsdWUiLCAib2JqZWN0VXRpbCIsICJmaXJzdCIsICJzZWNvbmQiLCAiWm9kUGFyc2VkVHlwZSIsICJnZXRQYXJzZWRUeXBlIiwgImRhdGEiLCAiWm9kSXNzdWVDb2RlIiwgInV0aWwiLCAicXVvdGVsZXNzSnNvbiIsICJvYmoiLCAiWm9kRXJyb3IiLCAiX1pvZEVycm9yIiwgImlzc3VlcyIsICJzdWIiLCAic3VicyIsICJhY3R1YWxQcm90byIsICJfbWFwcGVyIiwgIm1hcHBlciIsICJpc3N1ZSIsICJmaWVsZEVycm9ycyIsICJwcm9jZXNzRXJyb3IiLCAiZXJyb3IiLCAiY3VyciIsICJpIiwgImVsIiwgInZhbHVlIiwgImZvcm1FcnJvcnMiLCAiZmlyc3RFbCIsICJlcnJvck1hcCIsICJpc3N1ZSIsICJfY3R4IiwgIm1lc3NhZ2UiLCAiWm9kSXNzdWVDb2RlIiwgIlpvZFBhcnNlZFR5cGUiLCAidXRpbCIsICJlbl9kZWZhdWx0IiwgIm92ZXJyaWRlRXJyb3JNYXAiLCAiZW5fZGVmYXVsdCIsICJzZXRFcnJvck1hcCIsICJtYXAiLCAib3ZlcnJpZGVFcnJvck1hcCIsICJnZXRFcnJvck1hcCIsICJtYWtlSXNzdWUiLCAicGFyYW1zIiwgImRhdGEiLCAicGF0aCIsICJlcnJvck1hcHMiLCAiaXNzdWVEYXRhIiwgImZ1bGxQYXRoIiwgImZ1bGxJc3N1ZSIsICJlcnJvck1lc3NhZ2UiLCAibWFwcyIsICJtIiwgIm1hcCIsICJFTVBUWV9QQVRIIiwgImFkZElzc3VlVG9Db250ZXh0IiwgImN0eCIsICJvdmVycmlkZU1hcCIsICJnZXRFcnJvck1hcCIsICJpc3N1ZSIsICJlbl9kZWZhdWx0IiwgIngiLCAiUGFyc2VTdGF0dXMiLCAiX1BhcnNlU3RhdHVzIiwgInN0YXR1cyIsICJyZXN1bHRzIiwgImFycmF5VmFsdWUiLCAicyIsICJJTlZBTElEIiwgInBhaXJzIiwgInN5bmNQYWlycyIsICJwYWlyIiwgImtleSIsICJ2YWx1ZSIsICJmaW5hbE9iamVjdCIsICJESVJUWSIsICJPSyIsICJpc0Fib3J0ZWQiLCAiaXNEaXJ0eSIsICJpc1ZhbGlkIiwgImlzQXN5bmMiLCAiZXJyb3JVdGlsIiwgIm1lc3NhZ2UiLCAiUGFyc2VJbnB1dExhenlQYXRoIiwgInBhcmVudCIsICJ2YWx1ZSIsICJwYXRoIiwgImtleSIsICJoYW5kbGVSZXN1bHQiLCAiY3R4IiwgInJlc3VsdCIsICJpc1ZhbGlkIiwgImVycm9yIiwgIlpvZEVycm9yIiwgInByb2Nlc3NDcmVhdGVQYXJhbXMiLCAicGFyYW1zIiwgImVycm9yTWFwIiwgImludmFsaWRfdHlwZV9lcnJvciIsICJyZXF1aXJlZF9lcnJvciIsICJkZXNjcmlwdGlvbiIsICJpc3MiLCAibWVzc2FnZSIsICJab2RUeXBlIiwgImlucHV0IiwgImdldFBhcnNlZFR5cGUiLCAiUGFyc2VTdGF0dXMiLCAiaXNBc3luYyIsICJkYXRhIiwgImVyciIsICJtYXliZUFzeW5jUmVzdWx0IiwgImNoZWNrIiwgImdldElzc3VlUHJvcGVydGllcyIsICJ2YWwiLCAic2V0RXJyb3IiLCAiWm9kSXNzdWVDb2RlIiwgInJlZmluZW1lbnREYXRhIiwgInJlZmluZW1lbnQiLCAiWm9kRWZmZWN0cyIsICJab2RGaXJzdFBhcnR5VHlwZUtpbmQiLCAiZGVmIiwgIlpvZE9wdGlvbmFsIiwgIlpvZE51bGxhYmxlIiwgIlpvZEFycmF5IiwgIlpvZFByb21pc2UiLCAib3B0aW9uIiwgIlpvZFVuaW9uIiwgImluY29taW5nIiwgIlpvZEludGVyc2VjdGlvbiIsICJ0cmFuc2Zvcm0iLCAiZGVmYXVsdFZhbHVlRnVuYyIsICJab2REZWZhdWx0IiwgIlpvZEJyYW5kZWQiLCAiY2F0Y2hWYWx1ZUZ1bmMiLCAiWm9kQ2F0Y2giLCAiVGhpcyIsICJ0YXJnZXQiLCAiWm9kUGlwZWxpbmUiLCAiWm9kUmVhZG9ubHkiLCAiY3VpZFJlZ2V4IiwgImN1aWQyUmVnZXgiLCAidWxpZFJlZ2V4IiwgInV1aWRSZWdleCIsICJuYW5vaWRSZWdleCIsICJqd3RSZWdleCIsICJkdXJhdGlvblJlZ2V4IiwgImVtYWlsUmVnZXgiLCAiX2Vtb2ppUmVnZXgiLCAiZW1vamlSZWdleCIsICJpcHY0UmVnZXgiLCAiaXB2NENpZHJSZWdleCIsICJpcHY2UmVnZXgiLCAiaXB2NkNpZHJSZWdleCIsICJiYXNlNjRSZWdleCIsICJiYXNlNjR1cmxSZWdleCIsICJkYXRlUmVnZXhTb3VyY2UiLCAiZGF0ZVJlZ2V4IiwgInRpbWVSZWdleFNvdXJjZSIsICJhcmdzIiwgInNlY29uZHNSZWdleFNvdXJjZSIsICJzZWNvbmRzUXVhbnRpZmllciIsICJ0aW1lUmVnZXgiLCAiZGF0ZXRpbWVSZWdleCIsICJyZWdleCIsICJvcHRzIiwgImlzVmFsaWRJUCIsICJpcCIsICJ2ZXJzaW9uIiwgImlzVmFsaWRKV1QiLCAiand0IiwgImFsZyIsICJoZWFkZXIiLCAiYmFzZTY0IiwgImRlY29kZWQiLCAiaXNWYWxpZENpZHIiLCAiWm9kU3RyaW5nIiwgIl9ab2RTdHJpbmciLCAiWm9kUGFyc2VkVHlwZSIsICJhZGRJc3N1ZVRvQ29udGV4dCIsICJJTlZBTElEIiwgInN0YXR1cyIsICJ0b29CaWciLCAidG9vU21hbGwiLCAidXRpbCIsICJ2YWxpZGF0aW9uIiwgImVycm9yVXRpbCIsICJvcHRpb25zIiwgIm1pbkxlbmd0aCIsICJtYXhMZW5ndGgiLCAibGVuIiwgImNoIiwgIm1pbiIsICJtYXgiLCAiZmxvYXRTYWZlUmVtYWluZGVyIiwgInN0ZXAiLCAidmFsRGVjQ291bnQiLCAic3RlcERlY0NvdW50IiwgImRlY0NvdW50IiwgInZhbEludCIsICJzdGVwSW50IiwgIlpvZE51bWJlciIsICJfWm9kTnVtYmVyIiwgImtpbmQiLCAiaW5jbHVzaXZlIiwgIlpvZEJpZ0ludCIsICJfWm9kQmlnSW50IiwgIlpvZEJvb2xlYW4iLCAiT0siLCAiWm9kRGF0ZSIsICJfWm9kRGF0ZSIsICJtaW5EYXRlIiwgIm1heERhdGUiLCAiWm9kU3ltYm9sIiwgIlpvZFVuZGVmaW5lZCIsICJab2ROdWxsIiwgIlpvZEFueSIsICJab2RVbmtub3duIiwgIlpvZE5ldmVyIiwgIlpvZFZvaWQiLCAiX1pvZEFycmF5IiwgIml0ZW0iLCAiaSIsICJzY2hlbWEiLCAiZGVlcFBhcnRpYWxpZnkiLCAiWm9kT2JqZWN0IiwgIm5ld1NoYXBlIiwgImZpZWxkU2NoZW1hIiwgIlpvZFR1cGxlIiwgIl9ab2RPYmplY3QiLCAic2hhcGUiLCAia2V5cyIsICJzaGFwZUtleXMiLCAiZXh0cmFLZXlzIiwgInBhaXJzIiwgImtleVZhbGlkYXRvciIsICJ1bmtub3duS2V5cyIsICJjYXRjaGFsbCIsICJzeW5jUGFpcnMiLCAicGFpciIsICJpc3N1ZSIsICJkZWZhdWx0RXJyb3IiLCAiYXVnbWVudGF0aW9uIiwgIm1lcmdpbmciLCAiaW5kZXgiLCAibWFzayIsICJuZXdGaWVsZCIsICJjcmVhdGVab2RFbnVtIiwgImhhbmRsZVJlc3VsdHMiLCAicmVzdWx0cyIsICJ1bmlvbkVycm9ycyIsICJjaGlsZEN0eCIsICJkaXJ0eSIsICJpc3N1ZXMiLCAidHlwZXMiLCAiZ2V0RGlzY3JpbWluYXRvciIsICJ0eXBlIiwgIlpvZExhenkiLCAiWm9kTGl0ZXJhbCIsICJab2RFbnVtIiwgIlpvZE5hdGl2ZUVudW0iLCAiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwgIl9ab2REaXNjcmltaW5hdGVkVW5pb24iLCAiZGlzY3JpbWluYXRvciIsICJkaXNjcmltaW5hdG9yVmFsdWUiLCAib3B0aW9uc01hcCIsICJkaXNjcmltaW5hdG9yVmFsdWVzIiwgIm1lcmdlVmFsdWVzIiwgImEiLCAiYiIsICJhVHlwZSIsICJiVHlwZSIsICJiS2V5cyIsICJzaGFyZWRLZXlzIiwgIm5ld09iaiIsICJzaGFyZWRWYWx1ZSIsICJuZXdBcnJheSIsICJpdGVtQSIsICJpdGVtQiIsICJoYW5kbGVQYXJzZWQiLCAicGFyc2VkTGVmdCIsICJwYXJzZWRSaWdodCIsICJpc0Fib3J0ZWQiLCAibWVyZ2VkIiwgImlzRGlydHkiLCAibGVmdCIsICJyaWdodCIsICJfWm9kVHVwbGUiLCAiaXRlbXMiLCAiaXRlbUluZGV4IiwgIngiLCAicmVzdCIsICJzY2hlbWFzIiwgIlpvZFJlY29yZCIsICJfWm9kUmVjb3JkIiwgImtleVR5cGUiLCAidmFsdWVUeXBlIiwgImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIsICJab2RNYXAiLCAiZmluYWxNYXAiLCAiWm9kU2V0IiwgIl9ab2RTZXQiLCAiZmluYWxpemVTZXQiLCAiZWxlbWVudHMiLCAicGFyc2VkU2V0IiwgImVsZW1lbnQiLCAibWluU2l6ZSIsICJtYXhTaXplIiwgInNpemUiLCAiWm9kRnVuY3Rpb24iLCAiX1pvZEZ1bmN0aW9uIiwgIm1ha2VBcmdzSXNzdWUiLCAibWFrZUlzc3VlIiwgImdldEVycm9yTWFwIiwgImVuX2RlZmF1bHQiLCAibWFrZVJldHVybnNJc3N1ZSIsICJyZXR1cm5zIiwgImZuIiwgIm1lIiwgInBhcnNlZEFyZ3MiLCAiZSIsICJwYXJzZWRSZXR1cm5zIiwgInJldHVyblR5cGUiLCAiZnVuYyIsICJnZXR0ZXIiLCAidmFsdWVzIiwgIl9ab2RFbnVtIiwgImV4cGVjdGVkVmFsdWVzIiwgImVudW1WYWx1ZXMiLCAibmV3RGVmIiwgIm9wdCIsICJuYXRpdmVFbnVtVmFsdWVzIiwgInByb21pc2lmaWVkIiwgImVmZmVjdCIsICJjaGVja0N0eCIsICJhcmciLCAicHJvY2Vzc2VkIiwgIkRJUlRZIiwgImV4ZWN1dGVSZWZpbmVtZW50IiwgImFjYyIsICJpbm5lciIsICJiYXNlIiwgInByZXByb2Nlc3MiLCAiWm9kT3B0aW9uYWwiLCAiWm9kVHlwZSIsICJpbnB1dCIsICJab2RQYXJzZWRUeXBlIiwgIk9LIiwgInR5cGUiLCAicGFyYW1zIiwgIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsICJwcm9jZXNzQ3JlYXRlUGFyYW1zIiwgIlpvZE51bGxhYmxlIiwgIlpvZERlZmF1bHQiLCAiY3R4IiwgImRhdGEiLCAiWm9kQ2F0Y2giLCAibmV3Q3R4IiwgInJlc3VsdCIsICJpc0FzeW5jIiwgIlpvZEVycm9yIiwgIlpvZE5hTiIsICJhZGRJc3N1ZVRvQ29udGV4dCIsICJab2RJc3N1ZUNvZGUiLCAiSU5WQUxJRCIsICJCUkFORCIsICJab2RCcmFuZGVkIiwgIlpvZFBpcGVsaW5lIiwgIl9ab2RQaXBlbGluZSIsICJzdGF0dXMiLCAiaW5SZXN1bHQiLCAiRElSVFkiLCAiYSIsICJiIiwgIlpvZFJlYWRvbmx5IiwgImZyZWV6ZSIsICJpc1ZhbGlkIiwgImNsZWFuUGFyYW1zIiwgInAiLCAiY3VzdG9tIiwgImNoZWNrIiwgIl9wYXJhbXMiLCAiZmF0YWwiLCAiWm9kQW55IiwgInIiLCAiX2ZhdGFsIiwgImxhdGUiLCAiWm9kT2JqZWN0IiwgIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsICJpbnN0YW5jZU9mVHlwZSIsICJjbHMiLCAicGFyYW1zIiwgImN1c3RvbSIsICJkYXRhIiwgInN0cmluZ1R5cGUiLCAiWm9kU3RyaW5nIiwgIm51bWJlclR5cGUiLCAiWm9kTnVtYmVyIiwgIm5hblR5cGUiLCAiWm9kTmFOIiwgImJpZ0ludFR5cGUiLCAiWm9kQmlnSW50IiwgImJvb2xlYW5UeXBlIiwgIlpvZEJvb2xlYW4iLCAiZGF0ZVR5cGUiLCAiWm9kRGF0ZSIsICJzeW1ib2xUeXBlIiwgIlpvZFN5bWJvbCIsICJ1bmRlZmluZWRUeXBlIiwgIlpvZFVuZGVmaW5lZCIsICJudWxsVHlwZSIsICJab2ROdWxsIiwgImFueVR5cGUiLCAiWm9kQW55IiwgInVua25vd25UeXBlIiwgIlpvZFVua25vd24iLCAibmV2ZXJUeXBlIiwgIlpvZE5ldmVyIiwgInZvaWRUeXBlIiwgIlpvZFZvaWQiLCAiYXJyYXlUeXBlIiwgIlpvZEFycmF5IiwgIm9iamVjdFR5cGUiLCAiWm9kT2JqZWN0IiwgInN0cmljdE9iamVjdFR5cGUiLCAidW5pb25UeXBlIiwgIlpvZFVuaW9uIiwgImRpc2NyaW1pbmF0ZWRVbmlvblR5cGUiLCAiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwgImludGVyc2VjdGlvblR5cGUiLCAiWm9kSW50ZXJzZWN0aW9uIiwgInR1cGxlVHlwZSIsICJab2RUdXBsZSIsICJyZWNvcmRUeXBlIiwgIlpvZFJlY29yZCIsICJtYXBUeXBlIiwgIlpvZE1hcCIsICJzZXRUeXBlIiwgIlpvZFNldCIsICJmdW5jdGlvblR5cGUiLCAiWm9kRnVuY3Rpb24iLCAibGF6eVR5cGUiLCAiWm9kTGF6eSIsICJsaXRlcmFsVHlwZSIsICJab2RMaXRlcmFsIiwgImVudW1UeXBlIiwgIlpvZEVudW0iLCAibmF0aXZlRW51bVR5cGUiLCAiWm9kTmF0aXZlRW51bSIsICJwcm9taXNlVHlwZSIsICJab2RQcm9taXNlIiwgImVmZmVjdHNUeXBlIiwgIlpvZEVmZmVjdHMiLCAib3B0aW9uYWxUeXBlIiwgIlpvZE9wdGlvbmFsIiwgIm51bGxhYmxlVHlwZSIsICJab2ROdWxsYWJsZSIsICJwcmVwcm9jZXNzVHlwZSIsICJwaXBlbGluZVR5cGUiLCAiWm9kUGlwZWxpbmUiLCAib3N0cmluZyIsICJvbnVtYmVyIiwgIm9ib29sZWFuIiwgImNvZXJjZSIsICJhcmciLCAiTkVWRVIiLCAiSU5WQUxJRCIsICJMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTiIsICJTVVBQT1JURURfUFJPVE9DT0xfVkVSU0lPTlMiLCAiSlNPTlJQQ19WRVJTSU9OIiwgIlByb2dyZXNzVG9rZW5TY2hlbWEiLCAiZXh0ZXJuYWxfZXhwb3J0cyIsICJDdXJzb3JTY2hlbWEiLCAiQmFzZVJlcXVlc3RQYXJhbXNTY2hlbWEiLCAiUmVxdWVzdFNjaGVtYSIsICJCYXNlTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hIiwgIk5vdGlmaWNhdGlvblNjaGVtYSIsICJSZXN1bHRTY2hlbWEiLCAiUmVxdWVzdElkU2NoZW1hIiwgIkpTT05SUENSZXF1ZXN0U2NoZW1hIiwgIkpTT05SUENOb3RpZmljYXRpb25TY2hlbWEiLCAiSlNPTlJQQ1Jlc3BvbnNlU2NoZW1hIiwgIkVycm9yQ29kZSIsICJKU09OUlBDRXJyb3JTY2hlbWEiLCAiSlNPTlJQQ01lc3NhZ2VTY2hlbWEiLCAiRW1wdHlSZXN1bHRTY2hlbWEiLCAiQ2FuY2VsbGVkTm90aWZpY2F0aW9uU2NoZW1hIiwgIkltcGxlbWVudGF0aW9uU2NoZW1hIiwgIkNsaWVudENhcGFiaWxpdGllc1NjaGVtYSIsICJJbml0aWFsaXplUmVxdWVzdFNjaGVtYSIsICJTZXJ2ZXJDYXBhYmlsaXRpZXNTY2hlbWEiLCAiSW5pdGlhbGl6ZVJlc3VsdFNjaGVtYSIsICJJbml0aWFsaXplZE5vdGlmaWNhdGlvblNjaGVtYSIsICJQaW5nUmVxdWVzdFNjaGVtYSIsICJQcm9ncmVzc1NjaGVtYSIsICJQcm9ncmVzc05vdGlmaWNhdGlvblNjaGVtYSIsICJQYWdpbmF0ZWRSZXF1ZXN0U2NoZW1hIiwgIlBhZ2luYXRlZFJlc3VsdFNjaGVtYSIsICJSZXNvdXJjZUNvbnRlbnRzU2NoZW1hIiwgIlRleHRSZXNvdXJjZUNvbnRlbnRzU2NoZW1hIiwgIkJsb2JSZXNvdXJjZUNvbnRlbnRzU2NoZW1hIiwgIlJlc291cmNlU2NoZW1hIiwgIlJlc291cmNlVGVtcGxhdGVTY2hlbWEiLCAiTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEiLCAiTGlzdFJlc291cmNlc1Jlc3VsdFNjaGVtYSIsICJMaXN0UmVzb3VyY2VUZW1wbGF0ZXNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RSZXNvdXJjZVRlbXBsYXRlc1Jlc3VsdFNjaGVtYSIsICJSZWFkUmVzb3VyY2VSZXF1ZXN0U2NoZW1hIiwgIlJlYWRSZXNvdXJjZVJlc3VsdFNjaGVtYSIsICJSZXNvdXJjZUxpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hIiwgIlN1YnNjcmliZVJlcXVlc3RTY2hlbWEiLCAiVW5zdWJzY3JpYmVSZXF1ZXN0U2NoZW1hIiwgIlJlc291cmNlVXBkYXRlZE5vdGlmaWNhdGlvblNjaGVtYSIsICJQcm9tcHRBcmd1bWVudFNjaGVtYSIsICJQcm9tcHRTY2hlbWEiLCAiTGlzdFByb21wdHNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RQcm9tcHRzUmVzdWx0U2NoZW1hIiwgIkdldFByb21wdFJlcXVlc3RTY2hlbWEiLCAiVGV4dENvbnRlbnRTY2hlbWEiLCAiSW1hZ2VDb250ZW50U2NoZW1hIiwgIkVtYmVkZGVkUmVzb3VyY2VTY2hlbWEiLCAiUHJvbXB0TWVzc2FnZVNjaGVtYSIsICJHZXRQcm9tcHRSZXN1bHRTY2hlbWEiLCAiUHJvbXB0TGlzdENoYW5nZWROb3RpZmljYXRpb25TY2hlbWEiLCAiVG9vbFNjaGVtYSIsICJMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RUb29sc1Jlc3VsdFNjaGVtYSIsICJDYWxsVG9vbFJlc3VsdFNjaGVtYSIsICJDb21wYXRpYmlsaXR5Q2FsbFRvb2xSZXN1bHRTY2hlbWEiLCAiQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hIiwgIlRvb2xMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSIsICJMb2dnaW5nTGV2ZWxTY2hlbWEiLCAiU2V0TGV2ZWxSZXF1ZXN0U2NoZW1hIiwgIkxvZ2dpbmdNZXNzYWdlTm90aWZpY2F0aW9uU2NoZW1hIiwgIk1vZGVsSGludFNjaGVtYSIsICJNb2RlbFByZWZlcmVuY2VzU2NoZW1hIiwgIlNhbXBsaW5nTWVzc2FnZVNjaGVtYSIsICJDcmVhdGVNZXNzYWdlUmVxdWVzdFNjaGVtYSIsICJDcmVhdGVNZXNzYWdlUmVzdWx0U2NoZW1hIiwgIlJlc291cmNlUmVmZXJlbmNlU2NoZW1hIiwgIlByb21wdFJlZmVyZW5jZVNjaGVtYSIsICJDb21wbGV0ZVJlcXVlc3RTY2hlbWEiLCAiQ29tcGxldGVSZXN1bHRTY2hlbWEiLCAiUm9vdFNjaGVtYSIsICJMaXN0Um9vdHNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RSb290c1Jlc3VsdFNjaGVtYSIsICJSb290c0xpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hIiwgIkNsaWVudFJlcXVlc3RTY2hlbWEiLCAiQ2xpZW50Tm90aWZpY2F0aW9uU2NoZW1hIiwgIkNsaWVudFJlc3VsdFNjaGVtYSIsICJTZXJ2ZXJSZXF1ZXN0U2NoZW1hIiwgIlNlcnZlck5vdGlmaWNhdGlvblNjaGVtYSIsICJTZXJ2ZXJSZXN1bHRTY2hlbWEiLCAiTWNwRXJyb3IiLCAiY29kZSIsICJtZXNzYWdlIiwgImRhdGEiLCAiREVGQVVMVF9SRVFVRVNUX1RJTUVPVVRfTVNFQyIsICJQcm90b2NvbCIsICJfb3B0aW9ucyIsICJDYW5jZWxsZWROb3RpZmljYXRpb25TY2hlbWEiLCAibm90aWZpY2F0aW9uIiwgImNvbnRyb2xsZXIiLCAiUHJvZ3Jlc3NOb3RpZmljYXRpb25TY2hlbWEiLCAiUGluZ1JlcXVlc3RTY2hlbWEiLCAiX3JlcXVlc3QiLCAidHJhbnNwb3J0IiwgImVycm9yIiwgIm1lc3NhZ2UiLCAicmVzcG9uc2VIYW5kbGVycyIsICJfYSIsICJNY3BFcnJvciIsICJFcnJvckNvZGUiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgIl9iIiwgImFib3J0Q29udHJvbGxlciIsICJyZXN1bHQiLCAicHJvZ3Jlc3MiLCAidG90YWwiLCAicHJvZ3Jlc3NUb2tlbiIsICJyZXNwb25zZSIsICJtZXNzYWdlSWQiLCAicmVzdWx0U2NoZW1hIiwgIm9wdGlvbnMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAianNvbnJwY1JlcXVlc3QiLCAidGltZW91dElkIiwgImNhbmNlbCIsICJyZWFzb24iLCAiX2MiLCAidGltZW91dCIsICJfZCIsICJqc29ucnBjTm90aWZpY2F0aW9uIiwgInJlcXVlc3RTY2hlbWEiLCAibWV0aG9kIiwgImV4dHJhIiwgIm5vdGlmaWNhdGlvblNjaGVtYSIsICJTZXJ2ZXIiLCAiUHJvdG9jb2wiLCAiX3NlcnZlckluZm8iLCAib3B0aW9ucyIsICJJbml0aWFsaXplUmVxdWVzdFNjaGVtYSIsICJyZXF1ZXN0IiwgIkluaXRpYWxpemVkTm90aWZpY2F0aW9uU2NoZW1hIiwgIl9hIiwgIm1ldGhvZCIsICJfYiIsICJyZXF1ZXN0ZWRWZXJzaW9uIiwgIlNVUFBPUlRFRF9QUk9UT0NPTF9WRVJTSU9OUyIsICJMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTiIsICJFbXB0eVJlc3VsdFNjaGVtYSIsICJwYXJhbXMiLCAiQ3JlYXRlTWVzc2FnZVJlc3VsdFNjaGVtYSIsICJMaXN0Um9vdHNSZXN1bHRTY2hlbWEiLCAicHJvY2VzcyIsICJSZWFkQnVmZmVyIiwgImNodW5rIiwgImluZGV4IiwgImxpbmUiLCAiZGVzZXJpYWxpemVNZXNzYWdlIiwgIkpTT05SUENNZXNzYWdlU2NoZW1hIiwgInNlcmlhbGl6ZU1lc3NhZ2UiLCAibWVzc2FnZSIsICJTdGRpb1NlcnZlclRyYW5zcG9ydCIsICJfc3RkaW4iLCAicHJvY2VzcyIsICJfc3Rkb3V0IiwgIlJlYWRCdWZmZXIiLCAiY2h1bmsiLCAiZXJyb3IiLCAiX2EiLCAibWVzc2FnZSIsICJfYiIsICJyZXNvbHZlIiwgImpzb24iLCAic2VyaWFsaXplTWVzc2FnZSIsICJ0b29sc19leHBvcnRzIiwgIl9fZXhwb3J0IiwgImdldEFnZW50IiwgImdldERlcGxveW1lbnRTdGF0dXMiLCAibGlzdEFnZW50cyIsICJsaXN0UHJpbWl0aXZlVmVyc2lvbnMiLCAidGFpbExvZ3MiLCAic3Bhd24iLCAiREVGQVVMVF9USU1FT1VUX01TIiwgInJ1bkx1YSIsICJhcmdzIiwgInNwYXduRm4iLCAidGltZW91dE1zIiwgImxhYmVsIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImNoaWxkIiwgInN0ZG91dCIsICJzdGRlcnIiLCAiZCIsICJ0aW1lciIsICJjb2RlIiwgImVyciIsICJmbGF0dGVuQWdlbnRzIiwgInBhcnNlZCIsICJvYmoiLCAiZW50cmllcyIsICJvcmciLCAiYSIsICJsaXN0QWdlbnRzVmlhQ2xpIiwgImxpc3RBZ2VudHMiLCAiX2FyZ3MiLCAiZGVwcyIsICJjb21wYWN0IiwgImxpc3RBZ2VudHNWaWFDbGkiLCAiZ2V0QWdlbnQiLCAiYWdlbnRJZCIsICJkZXBzIiwgIm1hdGNoIiwgImxpc3RBZ2VudHNWaWFDbGkiLCAiYSIsICJyZWFkRmlsZSIsICJyZWFkZGlyIiwgInN0YXQiLCAiam9pbiIsICJkaXJuYW1lIiwgImhvbWVkaXIiLCAiREVGQVVMVF9BUElfVVJMIiwgIkZJUkVCQVNFX1JFRlJFU0hfVVJMIiwgIlJFRlJFU0hfVElNRU9VVF9NUyIsICJSRUZSRVNIX1NLRVdfTVMiLCAiUkVKRUNURURfUkVGUkVTSF9SRUFTT05TIiwgInRva2VuQ2FjaGUiLCAicGFyc2VEb3RlbnZBcGlLZXkiLCAiY29udGVudCIsICJyYXdMaW5lIiwgIm0iLCAidmFsdWUiLCAicXVvdGVkIiwgImZpbmRTZXNzaW9uRmlsZSIsICJzZXNzaW9uc0RpciIsICJhcGlVcmwiLCAibmFtZXMiLCAicmVhZGRpciIsICJjYW5kaWRhdGVzIiwgIm5hbWUiLCAicGF0aCIsICJqb2luIiwgInNlc3Npb24iLCAicmVhZEZpbGUiLCAibXRpbWVNcyIsICJzdGF0IiwgImEiLCAiYiIsICJyZWZyZXNoU2Vzc2lvbkJlYXJlciIsICJmZXRjaEZuIiwgIm5vdyIsICJjYWNoZWQiLCAidG9rZW5DYWNoZSIsICJSRUZSRVNIX1NLRVdfTVMiLCAiY29udHJvbGxlciIsICJ0aW1lciIsICJSRUZSRVNIX1RJTUVPVVRfTVMiLCAicmVzIiwgIkZJUkVCQVNFX1JFRlJFU0hfVVJMIiwgImVyciIsICJyZWFzb24iLCAibWVzc2FnZSIsICJyZWplY3RlZCIsICJSRUpFQ1RFRF9SRUZSRVNIX1JFQVNPTlMiLCAiciIsICJib2R5IiwgImlkVG9rZW4iLCAiZXhwaXJlc0luIiwgInJlc29sdmVBcGlLZXkiLCAiZW52IiwgImNyZWRlbnRpYWxzUGF0aCIsICJob21lZGlyIiwgImRpcm5hbWUiLCAiY3dkIiwgIkRFRkFVTFRfQVBJX1VSTCIsICJmcm9tRG90ZW52IiwgImZvdW5kIiwgInJhdyIsICJwYXJzZWQiLCAiREVGQVVMVF9CQVNFX1VSTCIsICJERUZBVUxUX1RJTUVPVVRfTVMiLCAiUk9VVEVfU0NPUEVTIiwgIlJPVVRFX1NDT1BFX1NVTU1BUlkiLCAiYXBpUmVxdWVzdCIsICJwYXRoIiwgIm1ldGhvZCIsICJib2R5IiwgInF1ZXJ5IiwgImZldGNoRm4iLCAiYmFzZVVybCIsICJ0aW1lb3V0TXMiLCAiYXBpS2V5IiwgInJlc29sdmVBcGlLZXkiLCAidXJsIiwgImsiLCAidiIsICJjb250cm9sbGVyIiwgInRpbWVyIiwgInJlcyIsICJyYXciLCAiZnJpZW5kbHlNc2ciLCAicGFyc2VkIiwgImNvZGUiLCAiZXJyIiwgIkxJU1RfRVhUUkFDVE9SUyIsICJWRVJTSU9OU19FWFRSQUNUT1JTIiwgIkxJU1RfUEFUSFMiLCAiZXh0cmFjdExpc3QiLCAidHlwZSIsICJyZXNwb25zZSIsICJmbiIsICJleHRyYWN0VmVyc2lvbnMiLCAiZXh0cmFjdEFjdGl2ZVZlcnNpb25JZCIsICJpZCIsICJpc0FjdGl2ZVZlcnNpb24iLCAidmVyc2lvbiIsICJhY3RpdmVJZCIsICJvd25JZCIsICJ2ZXJzaW9uQ3JlYXRlZEF0IiwgInJhdyIsICJ2ZXJzaW9uSWQiLCAiU1VQUE9SVEVEX0xJU1RfVFlQRVMiLCAiU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMiLCAiVkFMSURfVFlQRVMiLCAiU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMiLCAibGlzdFByaW1pdGl2ZVZlcnNpb25zIiwgImFnZW50SWQiLCAidHlwZSIsICJuYW1lIiwgImRlcHMiLCAicGF0aCIsICJpZCIsICJyZXNvbHZlTmFtZVRvSWQiLCAiTElTVF9QQVRIUyIsICJkYXRhIiwgImFwaVJlcXVlc3QiLCAiY29tcGFjdCIsICJleHRyYWN0VmVyc2lvbnMiLCAidiIsICJ2ZXJzaW9uSWQiLCAiaXNBY3RpdmVWZXJzaW9uIiwgInZlcnNpb25DcmVhdGVkQXQiLCAicmVzdWx0IiwgImV4dHJhY3RBY3RpdmVWZXJzaW9uSWQiLCAiZmV0Y2hGbiIsICJsaXN0UGF0aCIsICJsaXN0UmVzcG9uc2UiLCAiaXRlbXMiLCAiZXh0cmFjdExpc3QiLCAibWF0Y2giLCAicCIsICJhdmFpbGFibGUiLCAiUFJJTUlUSVZFX1RZUEVTIiwgIlZFUlNJT05TX0NIVU5LX1NJWkUiLCAiREVGQVVMVF9CVURHRVRfTVMiLCAiZ2V0RGVwbG95bWVudFN0YXR1cyIsICJhZ2VudElkIiwgImRlcHMiLCAiaWQiLCAiYnVkZ2V0TXMiLCAic3RhcnRlZEF0IiwgIm92ZXJCdWRnZXQiLCAiZ2V0IiwgInBhdGgiLCAiYXBpUmVxdWVzdCIsICJyZXN1bHQiLCAidHlwZSIsICJwZXJzb25hT3V0Y29tZSIsICJsaXN0T3V0Y29tZXMiLCAiTElTVF9QQVRIUyIsICJwZXJzb25hUmVzcG9uc2UiLCAidmVyc2lvbnMiLCAiZXh0cmFjdFZlcnNpb25zIiwgImFjdGl2ZSIsICJ2IiwgImlzQWN0aXZlVmVyc2lvbiIsICJ2ZXJzaW9uQ3JlYXRlZEF0IiwgImJ1ZGdldEV4aGF1c3RlZCIsICJza2lwcGVkIiwgInRvdGFsIiwgInQiLCAib3V0Y29tZSIsICJ0YXJnZXRzIiwgImV4dHJhY3RMaXN0IiwgInAiLCAidGd0IiwgImkiLCAiY2h1bmsiLCAibmFtZSIsICJwcmltSWQiLCAidm8iLCAiaiIsICJ2ZXJzaW9uc1Jlc3BvbnNlIiwgImVudHJ5IiwgInZlcnNpb25JZCIsICJleHRyYWN0QWN0aXZlVmVyc2lvbklkIiwgIkxPR19TT1VSQ0VTIiwgIkxPR19UWVBFUyIsICJWQUxJRF9UWVBFUyIsICJWQUxJRF9MT0dfVFlQRVMiLCAidGFpbExvZ3MiLCAiYWdlbnRJZCIsICJ0eXBlIiwgIm5hbWUiLCAibG9nVHlwZSIsICJsaW1pdCIsICJwYWdlIiwgImRlcHMiLCAicXVlcnkiLCAiZGF0YSIsICJhcGlSZXF1ZXN0IiwgIlRPT0xfUkVHSVNUUlkiLCAidG9vbHNfZXhwb3J0cyIsICJzZXJ2ZXIiLCAiU2VydmVyIiwgIkxpc3RUb29sc1JlcXVlc3RTY2hlbWEiLCAidCIsICJDYWxsVG9vbFJlcXVlc3RTY2hlbWEiLCAicmVxIiwgInRvb2wiLCAiZXJyIiwgInJlcG9ydENyYXNoQW5kRXhpdCIsICJwYXlsb2FkIiwgInJlYXNvbiIsICJTdGRpb1NlcnZlclRyYW5zcG9ydCJdCn0K +`}var tt=class{constructor(e=rr.stdin,t=rr.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new et,this._started=!1,this._ondata=s=>{this._readBuffer.append(s),this.processReadBuffer()},this._onerror=s=>{var n;(n=this.onerror)===null||n===void 0||n.call(this,s)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(var e,t;;)try{let s=this._readBuffer.readMessage();if(s===null)break;(e=this.onmessage)===null||e===void 0||e.call(this,s)}catch(s){(t=this.onerror)===null||t===void 0||t.call(this,s)}}async close(){var e;this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._readBuffer.clear(),(e=this.onclose)===null||e===void 0||e.call(this)}send(e){return new Promise(t=>{let s=tr(e);this._stdout.write(s)?t():this._stdout.once("drain",t)})}};var Et={};Nt(Et,{getAgent:()=>nr,getDeploymentStatus:()=>dr,listAgents:()=>sr,listPrimitiveVersions:()=>cr,tailLogs:()=>ur});import{spawn as vn}from"node:child_process";var xn=6e4;function bn(r,{spawnFn:e=vn,timeoutMs:t=xn,label:s="lua"}={}){return new Promise((n,a)=>{let c=e("lua",r,{shell:process.platform==="win32",windowsHide:!0,env:{...process.env,LUA_NO_BANNER:"1",LUA_NO_HINTS:"1"}}),o="",l="";c.stdout.on("data",f=>{o+=f.toString("utf8")}),c.stderr.on("data",f=>{l+=f.toString("utf8")});let d=setTimeout(()=>{c.kill("SIGTERM"),a(new Error(`${s}: 'lua ${r.join(" ")}' timed out after ${t}ms`))},t);c.on("exit",f=>{clearTimeout(d),f!==0?a(new Error(`'lua ${r.join(" ")}' exited ${f}: ${l.trim()}`)):n(o)}),c.on("error",f=>{clearTimeout(d),a(f)})})}function wn(r){let e=r,t=Array.isArray(e)?e:e?.agents??e?.orgs??[];return t.length>0&&t[0]&&Array.isArray(t[0].agents)?t.flatMap(n=>(n.agents??[]).map(a=>({id:a.agentId??a.id??a._id,name:a.name??null,orgId:n.orgId??n.id??n._id??null,orgName:n.name??n.registeredName??null,visibility:a.visibility??null}))):t.map(n=>({id:n.agentId??n.id??n._id,name:n.name??null,orgId:n.orgId??null,orgName:n.orgName??null,visibility:n.visibility??null}))}async function rt({spawnFn:r,label:e="list_agents"}={}){let t=await bn(["agents","--json","--ci"],{spawnFn:r,label:e}),s;try{s=JSON.parse(t)}catch(n){throw new Error(`${e}: could not parse 'lua agents --json' output: ${n.message}`)}return wn(s)}var sr={spec:{name:"list_agents",description:"List all Lua agents the authenticated credential can reach. Returns a compact array of {id, name, orgId, orgName, visibility} flattened across all organisations. Same data as `lua agents --json` \u2014 it resolves every organisation, so on accounts with many orgs this takes 20 s or more; prefer get_agent when you already know the id.",inputSchema:{type:"object",properties:{},required:[]}},async handler(r,e={}){let t=await rt({spawnFn:e.spawnFn,label:"list_agents"});return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}};var nr={spec:{name:"get_agent",description:"Look up one Lua agent by ID and return {id, name, orgId, orgName, visibility}. For what is live use get_deployment_status / list_primitive_versions; for logs use tail_logs.",inputSchema:{type:"object",properties:{agentId:{type:"string",description:"Agent ID (the `id` field from list_agents; also `agent.agentId` in lua.skill.yaml)"}},required:["agentId"]}},async handler({agentId:r},e={}){if(!r)throw new Error("agentId is required");let s=(await rt({spawnFn:e.spawnFn,label:"get_agent"})).find(n=>n.id===r)??null;if(!s)throw new Error(`get_agent: no agent with id "${r}" found in the authenticated credential's accessible orgs. Run list_agents to see available agents.`);return{content:[{type:"text",text:JSON.stringify(s,null,2)}]}}};import{readFile as bt,readdir as kn,stat as Sn}from"node:fs/promises";import{join as st,dirname as Tn}from"node:path";import{homedir as Rn}from"node:os";var En="https://api.heylua.ai",Cn="https://securetoken.googleapis.com/v1/token",In=15e3,An=6e4,On=["TOKEN_EXPIRED","USER_DISABLED","USER_NOT_FOUND","INVALID_REFRESH_TOKEN","INVALID_GRANT_TYPE","MISSING_REFRESH_TOKEN"],ar=new Map;function Nn(r){for(let e of r.split(/\r?\n/)){let t=e.match(/^\s*(?:export\s+)?LUA_API_KEY\s*=\s*(.*)$/);if(!t)continue;let s=t[1].trim(),n=s.match(/^(['"`])(.*?)\1(?:\s+#.*)?\s*$/);return n?s=n[2]:s=s.replace(/\s+#.*$/,"").trim(),s||null}return null}async function jn({sessionsDir:r,apiUrl:e}){let t;try{t=await kn(r)}catch{return null}let s=[];for(let n of t){if(!n.endsWith(".json")||n.startsWith("."))continue;let a=st(r,n);try{let c=JSON.parse(await bt(a,"utf8"));if(c?.kind!=="firebase-session"||c?.version!==1||typeof c.refreshToken!="string"||!c.refreshToken||typeof c.firebaseWebApiKey!="string"||!c.firebaseWebApiKey||c.apiUrl!==e)continue;let{mtimeMs:o}=await Sn(a);s.push({path:a,session:c,mtimeMs:o})}catch{}}return s.length===0?null:(s.sort((n,a)=>a.mtimeMs-n.mtimeMs),{path:s[0].path,session:s[0].session})}async function $n({path:r,session:e,fetchFn:t=globalThis.fetch,now:s=Date.now}){let n=ar.get(r);if(n&&n.expiresAt-s()>An)return n.idToken;let a=new AbortController,c=setTimeout(()=>a.abort(),In),o;try{o=await t(`${Cn}?key=${encodeURIComponent(e.firebaseWebApiKey)}`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e.refreshToken}).toString(),signal:a.signal})}catch(x){throw new Error(`MCP_AUTH_UNAVAILABLE: could not refresh the lua-cli session (${x?.name==="AbortError"?"timed out":x.message}). Check your network, or set LUA_API_KEY to bypass the session.`)}finally{clearTimeout(c)}if(!o.ok){let x=o.statusText??String(o.status);try{let k=(await o.json())?.error?.message;typeof k=="string"&&k&&(x=k.split(":")[0].trim())}catch{}let S=o.status<500&&On.find(w=>x.toUpperCase().includes(w));throw S?new Error(`MCP_AUTH_STALE: your lua-cli session was signed out (${S}). Signing out of the Lua dashboard, desktop or mobile app also ends CLI sessions. Run \`lua auth configure\` in a terminal to sign in again.`):new Error(`MCP_AUTH_UNAVAILABLE: lua-cli session refresh failed (${o.status} ${x}). Retry in a moment.`)}let l=await o.json(),d=l?.id_token,f=Number(l?.expires_in);if(typeof d!="string"||!d||!Number.isFinite(f)||f<=0)throw new Error("MCP_AUTH_UNAVAILABLE: the session refresh returned an invalid token. Run `lua auth configure` again.");return ar.set(r,{idToken:d,expiresAt:s()+f*1e3}),d}async function ir({env:r=process.env,credentialsPath:e=r.LUA_CREDENTIALS_PATH??st(Rn(),".lua-cli","credentials"),sessionsDir:t=r.LUA_SESSIONS_DIR??st(Tn(e),"sessions"),cwd:s=process.cwd(),apiUrl:n=r.LUA_API_URL||En,fetchFn:a=globalThis.fetch,now:c=Date.now}={}){if(r.LUA_API_KEY&&r.LUA_API_KEY.trim())return r.LUA_API_KEY.trim();try{let l=Nn(await bt(st(s,".env"),"utf8"));if(l)return l}catch{}let o=await jn({sessionsDir:t,apiUrl:n});if(o)return $n({...o,fetchFn:a,now:c});try{let l=(await bt(e,"utf8")).trim();if(l){if(l.startsWith("{"))try{let d=JSON.parse(l);if(d?.apiKey)return d.apiKey}catch{}return l}}catch{}throw new Error("MCP_AUTH_STALE: No lua-cli credentials found in LUA_API_KEY, .env, ~/.lua-cli/sessions, or ~/.lua-cli/credentials. Run `lua auth configure` in a terminal (or /lua-auth in Claude Code).")}var Ln="https://api.heylua.ai",Pn=1e4,Ba=Object.freeze({skills:"automations:read",webhooks:"automations:read",jobs:"automations:read",triggers:"automations:read",preprocessors:"automations:read",postprocessors:"automations:read",workflows:"workflows:read",persona:"agents:read",logs:"knowledge:read"}),Mn="skills/webhooks/jobs/triggers/preprocessors/postprocessors need automations:read, workflows need workflows:read, persona needs agents:read, logs need knowledge:read";async function ge(r,{method:e="GET",body:t,query:s,fetchFn:n=globalThis.fetch,baseUrl:a=process.env.LUA_API_URL||Ln,timeoutMs:c=Pn}={}){let o=await ir(),l=new URL(a.replace(/\/$/,"")+r);if(s)for(let[x,S]of Object.entries(s))l.searchParams.set(x,String(S));let d=new AbortController,f=setTimeout(()=>d.abort(),c);try{let x=await n(l.toString(),{method:e,headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","X-Lua-Client":"claude-plugin/1.13.0"},body:t?JSON.stringify(t):void 0,signal:d.signal});if(x.status===401)throw new Error("MCP_AUTH_STALE: lua-api returned 401. The credential is missing, expired, or the session was signed out (signing out of the Lua dashboard or apps also ends CLI sessions). Run `lua auth configure` in a terminal, or re-run /lua-doctor.");if(x.status===403)throw new Error(`MCP_FORBIDDEN: lua-api returned 403 for ${r}. The credential cannot access this agent or org, or it lacks the route scope (${Mn} \u2014 typed keys are scoped to the agents and role chosen at \`lua auth configure\`). Re-run /lua-doctor or check the LUA_API_KEY env var.`);if(!x.ok){let S=await x.text(),w=S;try{let k=JSON.parse(S);w=k?.error?.message??k?.message??S;let T=k?.error?.code;typeof T=="string"&&T&&!String(w).includes(T)&&(w=`${T}: ${w}`)}catch{}throw new Error(`lua-api ${x.status}: ${w}`)}return await x.json()}catch(x){throw x.name==="AbortError"?new Error(`MCP_TIMEOUT: ${r} did not respond in ${c}ms`):x}finally{clearTimeout(f)}}var wt={skill:r=>r?.skills??[],webhook:r=>r?.data?.webhooks??[],job:r=>r?.data?.jobs??[],trigger:r=>r?.data?.triggers??[],preprocessor:r=>r?.data?.preprocessors??[],postprocessor:r=>r?.data?.postprocessors??[],workflow:r=>r?.data?.workflows??[]},kt={skill:r=>r?.versions??[],webhook:r=>r?.data?.versions??[],job:r=>Array.isArray(r?.data)?r.data:[],trigger:r=>r?.data?.versions??[],preprocessor:r=>r?.data?.versions??[],postprocessor:r=>r?.data?.versions??[],workflow:r=>Array.isArray(r?.data)?r.data:[],persona:r=>r?.versions??[]},Re={skill:"skills",webhook:"webhooks",job:"jobs",trigger:"triggers",preprocessor:"preprocessors",postprocessor:"postprocessors",workflow:"workflows"};function nt(r,e){let t=wt[r];if(!t)throw new Error(`extractList: unknown primitive type "${r}". Valid: ${Object.keys(wt).join(", ")}`);return t(e)}function Oe(r,e){let t=kt[r];if(!t)throw new Error(`extractVersions: unknown primitive type "${r}". Valid: ${Object.keys(kt).join(", ")}`);return t(e)}function Ne(r){let e=r?.data?.activeVersionId;return typeof e=="string"&&e?e:null}function je(r,e,t){if(!e||typeof e!="object")return!1;switch(r){case"skill":case"persona":return e.isCurrent===!0;case"job":case"workflow":return e.active===!0;case"webhook":case"trigger":case"preprocessor":case"postprocessor":{if(e.isActive===!0)return!0;let s=Ne(t),n=e.versionId??e.id??null;return!!s&&n===s}default:return!1}}function $e(r){if(!r||typeof r!="object")return null;let e=r.createdAt??r.createdDate??null;return e==null?null:typeof e=="number"?Number.isFinite(e)?new Date(e).toISOString():null:String(e)}function at(r){return!r||typeof r!="object"?null:r.versionId??r.id??null}var Wa=Object.keys(wt),or=Object.keys(kt);var St=new Set(or),cr={spec:{name:"list_primitive_versions",description:"List the server-side versions of one primitive (skill, webhook, job, trigger, preprocessor, postprocessor, workflow) or the agent persona. Returns { activeVersionId, versions: [{version, versionId, active, createdAt}] } \u2014 `active` is the version currently live. `versionId` is null for types whose versions route carries no per-entry id: skill, persona and webhook (the webhook route exposes the row id only under a misnamed `webhookId` key). For those, identify a version by `version`; for webhooks the live row id is the top-level `activeVersionId`. `activeVersionId` is populated only for webhook, trigger, preprocessor and postprocessor envelopes and is null for skill, job, workflow and persona.",inputSchema:{type:"object",properties:{agentId:{type:"string"},type:{type:"string",enum:[...St]},name:{type:"string",description:"Primitive name as written in lua.skill.yaml (omit for persona \u2014 an agent has only one)"}},required:["agentId","type"]}},async handler({agentId:r,type:e,name:t},s={}){if(!r||!e)throw new Error("agentId and type are required");if(!St.has(e))throw new Error(`Invalid type: ${e}. Valid: ${[...St].join(", ")}`);if(e!=="persona"&&!t)throw new Error("name is required for all types except persona");let n;if(e==="persona")n=`/developer/agents/${encodeURIComponent(r)}/persona/versions`;else{let d=await Vn({agentId:r,type:e,name:t,fetchFn:s.fetchFn});n=`/developer/${Re[e]}/${encodeURIComponent(r)}/${encodeURIComponent(d)}/versions`}let a=await ge(n,{fetchFn:s.fetchFn}),o=Oe(e,a).map(d=>({version:d.version,versionId:at(d),active:je(e,d,a),createdAt:$e(d)})),l={agentId:r,type:e,name:e==="persona"?null:t,activeVersionId:Ne(a),versions:o};return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}}};async function Vn({agentId:r,type:e,name:t,fetchFn:s}){let n=`/developer/${Re[e]}/${encodeURIComponent(r)}`,a=await ge(n,{fetchFn:s}),c=nt(e,a),o=c.find(d=>d.name===t);if(!o){let d=c.map(f=>f.name).filter(Boolean).join(", ")||"(none)";throw new Error(`list_primitive_versions: no ${e} named "${t}" on agent ${r}. Available: ${d}`)}let l=o.id??o._id;if(!l)throw new Error(`list_primitive_versions: ${e} "${t}" exists but has no id field`);return l}var it=["skill","webhook","job","trigger","preprocessor","postprocessor","workflow"],lr=5,Un=45e3,dr={spec:{name:"get_deployment_status",description:'What is live right now for an agent: for every skill, webhook, job, trigger, preprocessor, postprocessor and workflow the active (deployed) version, plus the active persona version. Composed from the per-type lua-api version routes (list calls in parallel, then per-item version lookups in chunks of 5). Bounded by a 45 s wall-clock budget: if exceeded, remaining items are listed with `error: "skipped: \u2026"` and the result carries `partial: true` + `partialReason`. Inside a project, `lua status --json` additionally compares local vs deployed.',inputSchema:{type:"object",properties:{agentId:{type:"string"}},required:["agentId"]}},async handler({agentId:r},e={}){if(!r)throw new Error("agentId is required");let t=encodeURIComponent(r),s=Number.isFinite(e.budgetMs)?e.budgetMs:Un,n=Date.now(),a=()=>Date.now()-n>s,c=w=>ge(w,{fetchFn:e.fetchFn}),o={agentId:r,persona:null,primitives:{}};for(let w of it)o.primitives[w]=[];let[l,...d]=await Promise.allSettled([c(`/developer/agents/${t}/persona/versions`),...it.map(w=>c(`/developer/${Re[w]}/${t}`))]);if(l.status==="fulfilled"){let w=l.value,k=Oe("persona",w),T=k.find(C=>je("persona",C,w))??null;o.persona={activeVersion:T?.version??null,activeVersionCreatedAt:$e(T),versionCount:k.length}}else o.persona={error:l.reason?.message??String(l.reason)};let f=!1,x=0,S=0;for(let w=0;w({p:O,primId:O.id??O._id,name:O.name??O.id??O._id})).filter(O=>O.primId);S+=F.length;for(let O=0;Oc(`/developer/${T}/${t}/${encodeURIComponent(W)}/versions`)))).forEach((W,ot)=>{let{p:Pe,primId:It,name:At}=Le[ot];if(W.status!=="fulfilled"){o.primitives[k].push({name:At,id:It,error:W.reason?.message??String(W.reason)});return}let ct=W.value,Ot=Oe(k,ct),lt=Ot.find(fr=>je(k,fr,ct))??null,dt={name:At,id:It,activeVersion:lt?.version??null,activeVersionId:at(lt)??Ne(ct),activeVersionCreatedAt:$e(lt),versionCount:Ot.length};typeof Pe.active=="boolean"&&(dt.enabled=Pe.active),k==="workflow"&&typeof Pe.dynamic=="boolean"&&(dt.dynamic=Pe.dynamic),o.primitives[k].push(dt)})}}return x>0&&(o.partial=!0,o.partialReason=`Wall-clock budget of ${s}ms exceeded after ${Date.now()-n}ms; ${x} of ${S} version lookups were not issued (entries carry error: "skipped: \u2026").`),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}};var qn=["skill","job","webhook","trigger","preprocessor","postprocessor","user_message","agent_response","agent_error","runtime","mcp","rag","device","device-trigger","model-resolver","workflow-step","workflow-script","workflow"],Rt=["error","warn","info","debug","start","complete"],Tt=new Set(["all",...qn]),Dn=new Set(Rt),ur={spec:{name:"tail_logs",description:"Fetch recent execution logs for an agent (same data as `lua logs --json`). Returns { logs: LogEntry[], pagination }. Each LogEntry has `subType` (error | warn | info | debug | start | complete), `message`, `timestamp`, and `metadata.logSource` / `metadata.primitiveName` \u2014 there is NO `level` field. Filter by source (`type`), primitive (`name`) and/or severity (`logType`, which filters on `subType`).",inputSchema:{type:"object",properties:{agentId:{type:"string"},type:{type:"string",enum:[...Tt],default:"all",description:"Log source filter (maps to lua-api `logSource`). `all` = no filter."},name:{type:"string",description:"Filter by primitive name (optional; maps to `primitiveName`)"},logType:{type:"string",enum:Rt,description:"Filter by LogEntry `subType` (optional; maps to lua-api `logType`). Omit for every severity. e.g. `error` to see only failures."},limit:{type:"number",default:50,minimum:1,maximum:100},page:{type:"number",minimum:1,description:"Page number for pagination (optional)"}},required:["agentId"]}},async handler({agentId:r,type:e="all",name:t,logType:s,limit:n=50,page:a},c={}){if(!r)throw new Error("agentId is required");if(!Tt.has(e))throw new Error(`Invalid type: ${e}. Valid: ${[...Tt].join(", ")}`);if(s!==void 0&&!Dn.has(s))throw new Error(`Invalid logType: ${s}. Valid: ${Rt.join(", ")}`);if(n>100)throw new Error(`Invalid limit: ${n}. lua-api caps logs at 100 entries per call.`);let o={limit:n};e!=="all"&&(o.logSource=e),t&&(o.primitiveName=t),s&&(o.logType=s),a&&(o.page=a);let l=await ge(`/developer/agents/${encodeURIComponent(r)}/logs`,{query:o,fetchFn:c.fetchFn});return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}}};var pr=Object.values(Et),Ct=new Qe({name:"lua-platform",version:"1.13.0"},{capabilities:{tools:{}}});Ct.setRequestHandler(_t,async()=>({tools:pr.map(r=>r.spec)}));Ct.setRequestHandler(yt,async r=>{let e=pr.find(t=>t.spec.name===r.params.name);if(!e)throw new Error(`Unknown tool: ${r.params.name}`);try{return await e.handler(r.params.arguments??{})}catch(t){return{content:[{type:"text",text:`Error: ${t.message}`}],isError:!0}}});function hr(r){process.stderr.write(JSON.stringify(r)+` +`,()=>process.exit(1))}process.on("uncaughtException",r=>{hr({event:"mcp_server_crash",kind:"uncaughtException",message:r?.message,stack:r?.stack,plugin_version:"1.13.0",lua_cli_version:process.env.LUA_CLI_VERSION??null,platform:process.platform,ts:new Date().toISOString()})});process.on("unhandledRejection",r=>{hr({event:"mcp_server_crash",kind:"unhandledRejection",reason:String(r),stack:r?.stack,plugin_version:"1.13.0",lua_cli_version:process.env.LUA_CLI_VERSION??null,platform:process.platform,ts:new Date().toISOString()})});await Ct.connect(new tt); +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3pvZC92My9leHRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL2hlbHBlcnMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL1pvZEVycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy96b2QvdjMvbG9jYWxlcy9lbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvem9kL3YzL2hlbHBlcnMvcGFyc2VVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy96b2QvdjMvaGVscGVycy9lcnJvclV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3pvZC92My90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zcmMvdHlwZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc3JjL3NoYXJlZC9wcm90b2NvbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zcmMvc2VydmVyL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NyYy9zZXJ2ZXIvc3RkaW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc3JjL3NoYXJlZC9zdGRpby50cyIsICIuLi9zcmMvdG9vbHMvaW5kZXgubWpzIiwgIi4uL3NyYy9ydW4tbHVhLm1qcyIsICIuLi9zcmMvdG9vbHMvbGlzdC1hZ2VudHMubWpzIiwgIi4uL3NyYy90b29scy9nZXQtYWdlbnQubWpzIiwgIi4uL3NyYy9hdXRoLm1qcyIsICIuLi9zcmMvYXBpLWNsaWVudC5tanMiLCAiLi4vc3JjL3Jlc3BvbnNlLXNoYXBlcy5tanMiLCAiLi4vc3JjL3Rvb2xzL2xpc3QtcHJpbWl0aXZlLXZlcnNpb25zLm1qcyIsICIuLi9zcmMvdG9vbHMvZ2V0LWRlcGxveW1lbnQtc3RhdHVzLm1qcyIsICIuLi9zcmMvdG9vbHMvdGFpbC1sb2dzLm1qcyIsICIuLi9zcmMvc2VydmVyLm1qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9oZWxwZXJzL3BhcnNlVXRpbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscGVycy90eXBlQWxpYXNlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscGVycy91dGlsLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vWm9kRXJyb3IuanNcIjtcbiIsICJleHBvcnQgdmFyIHV0aWw7XG4oZnVuY3Rpb24gKHV0aWwpIHtcbiAgICB1dGlsLmFzc2VydEVxdWFsID0gKF8pID0+IHsgfTtcbiAgICBmdW5jdGlvbiBhc3NlcnRJcyhfYXJnKSB7IH1cbiAgICB1dGlsLmFzc2VydElzID0gYXNzZXJ0SXM7XG4gICAgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuICAgIHV0aWwuYXNzZXJ0TmV2ZXIgPSBhc3NlcnROZXZlcjtcbiAgICB1dGlsLmFycmF5VG9FbnVtID0gKGl0ZW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIG9ialtpdGVtXSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZEtleXMgPSB1dGlsLm9iamVjdEtleXMob2JqKS5maWx0ZXIoKGspID0+IHR5cGVvZiBvYmpbb2JqW2tdXSAhPT0gXCJudW1iZXJcIik7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiB2YWxpZEtleXMpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkW2tdID0gb2JqW2tdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyhmaWx0ZXJlZCk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdFZhbHVlcyA9IChvYmopID0+IHtcbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0S2V5cyhvYmopLm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtlXTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdEtleXMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09IFwiZnVuY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgPyAob2JqKSA9PiBPYmplY3Qua2V5cyhvYmopIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6IChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9O1xuICAgIHV0aWwuZmluZCA9IChhcnIsIGNoZWNrZXIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGNoZWNrZXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHV0aWwuaXNJbnRlZ2VyID0gdHlwZW9mIE51bWJlci5pc0ludGVnZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/ICh2YWwpID0+IE51bWJlci5pc0ludGVnZXIodmFsKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWwpICYmIE1hdGguZmxvb3IodmFsKSA9PT0gdmFsO1xuICAgIGZ1bmN0aW9uIGpvaW5WYWx1ZXMoYXJyYXksIHNlcGFyYXRvciA9IFwiIHwgXCIpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5Lm1hcCgodmFsKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAnJHt2YWx9J2AgOiB2YWwpKS5qb2luKHNlcGFyYXRvcik7XG4gICAgfVxuICAgIHV0aWwuam9pblZhbHVlcyA9IGpvaW5WYWx1ZXM7XG4gICAgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIgPSAoXywgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSh1dGlsIHx8ICh1dGlsID0ge30pKTtcbmV4cG9ydCB2YXIgb2JqZWN0VXRpbDtcbihmdW5jdGlvbiAob2JqZWN0VXRpbCkge1xuICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXMgPSAoZmlyc3QsIHNlY29uZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZmlyc3QsXG4gICAgICAgICAgICAuLi5zZWNvbmQsIC8vIHNlY29uZCBvdmVyd3JpdGVzIGZpcnN0XG4gICAgICAgIH07XG4gICAgfTtcbn0pKG9iamVjdFV0aWwgfHwgKG9iamVjdFV0aWwgPSB7fSkpO1xuZXhwb3J0IGNvbnN0IFpvZFBhcnNlZFR5cGUgPSB1dGlsLmFycmF5VG9FbnVtKFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibmFuXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcInVuZGVmaW5lZFwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwidW5rbm93blwiLFxuICAgIFwicHJvbWlzZVwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcIm1hcFwiLFxuICAgIFwic2V0XCIsXG5dKTtcbmV4cG9ydCBjb25zdCBnZXRQYXJzZWRUeXBlID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZDtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc3RyaW5nO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGEpID8gWm9kUGFyc2VkVHlwZS5uYW4gOiBab2RQYXJzZWRUeXBlLm51bWJlcjtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmJvb2xlYW47XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuZnVuY3Rpb247XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmJpZ2ludDtcbiAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc3ltYm9sO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmFycmF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5udWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEudGhlbiAmJiB0eXBlb2YgZGF0YS50aGVuID09PSBcImZ1bmN0aW9uXCIgJiYgZGF0YS5jYXRjaCAmJiB0eXBlb2YgZGF0YS5jYXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUucHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5tYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBEYXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm9iamVjdDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnVua25vd247XG4gICAgfVxufTtcbiIsICJpbXBvcnQgeyB1dGlsIH0gZnJvbSBcIi4vaGVscGVycy91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgWm9kSXNzdWVDb2RlID0gdXRpbC5hcnJheVRvRW51bShbXG4gICAgXCJpbnZhbGlkX3R5cGVcIixcbiAgICBcImludmFsaWRfbGl0ZXJhbFwiLFxuICAgIFwiY3VzdG9tXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3JcIixcbiAgICBcImludmFsaWRfZW51bV92YWx1ZVwiLFxuICAgIFwidW5yZWNvZ25pemVkX2tleXNcIixcbiAgICBcImludmFsaWRfYXJndW1lbnRzXCIsXG4gICAgXCJpbnZhbGlkX3JldHVybl90eXBlXCIsXG4gICAgXCJpbnZhbGlkX2RhdGVcIixcbiAgICBcImludmFsaWRfc3RyaW5nXCIsXG4gICAgXCJ0b29fc21hbGxcIixcbiAgICBcInRvb19iaWdcIixcbiAgICBcImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzXCIsXG4gICAgXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICBcIm5vdF9maW5pdGVcIixcbl0pO1xuZXhwb3J0IGNvbnN0IHF1b3RlbGVzc0pzb24gPSAob2JqKSA9PiB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLCBcIiQxOlwiKTtcbn07XG5leHBvcnQgY2xhc3MgWm9kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgZ2V0IGVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNzdWVzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZSA9IChzdWIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCBzdWJdO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZElzc3VlcyA9IChzdWJzID0gW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCAuLi5zdWJzXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0dWFsUHJvdG8gPSBuZXcudGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBhY3R1YWxQcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IGFjdHVhbFByb3RvO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBpc3N1ZXM7XG4gICAgfVxuICAgIGZvcm1hdChfbWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlciA9IF9tYXBwZXIgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpc3N1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWUudW5pb25FcnJvcnMubWFwKHByb2Nlc3NFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcihpc3N1ZS5yZXR1cm5UeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfYXJndW1lbnRzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLmFyZ3VtZW50c0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGlzc3VlLnBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGlzc3VlLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGlzc3VlLnBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAodHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHR5cGVvZiBlbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc3QgZXJyb3JBcnJheTogYW55ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlcnJvckFycmF5Ll9lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgZXJyb3JBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXS5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3VycltlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3NFcnJvcih0aGlzKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkRXJyb3JzO1xuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgWm9kRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIFpvZEVycm9yOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH1cbiAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgfVxuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICBmbGF0dGVuKG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBmb3JtRXJyb3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoc3ViLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSBzdWIucGF0aFswXTtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tmaXJzdEVsXSA9IGZpZWxkRXJyb3JzW2ZpcnN0RWxdIHx8IFtdO1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW2ZpcnN0RWxdLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybUVycm9ycy5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBmb3JtRXJyb3JzLCBmaWVsZEVycm9ycyB9O1xuICAgIH1cbiAgICBnZXQgZm9ybUVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhdHRlbigpO1xuICAgIH1cbn1cblpvZEVycm9yLmNyZWF0ZSA9IChpc3N1ZXMpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihpc3N1ZXMpO1xuICAgIHJldHVybiBlcnJvcjtcbn07XG4iLCAiaW1wb3J0IHsgWm9kSXNzdWVDb2RlIH0gZnJvbSBcIi4uL1pvZEVycm9yLmpzXCI7XG5pbXBvcnQgeyB1dGlsLCBab2RQYXJzZWRUeXBlIH0gZnJvbSBcIi4uL2hlbHBlcnMvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3JNYXAgPSAoaXNzdWUsIF9jdHgpID0+IHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnJlY2VpdmVkID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlJlcXVpcmVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEV4cGVjdGVkICR7aXNzdWUuZXhwZWN0ZWR9LCByZWNlaXZlZCAke2lzc3VlLnJlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGxpdGVyYWwgdmFsdWUsIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoaXNzdWUuZXhwZWN0ZWQsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBVbnJlY29nbml6ZWQga2V5KHMpIGluIG9iamVjdDogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb246XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBlbnVtIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX0sIHJlY2VpdmVkICcke2lzc3VlLnJlY2VpdmVkfSdgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGZ1bmN0aW9uIGFyZ3VtZW50c2A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBmdW5jdGlvbiByZXR1cm4gdHlwZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9kYXRlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGRhdGVgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwiaW5jbHVkZXNcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBpbmNsdWRlIFwiJHtpc3N1ZS52YWxpZGF0aW9uLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uLnBvc2l0aW9uID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYCR7bWVzc2FnZX0gYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2lzc3VlLnZhbGlkYXRpb24ucG9zaXRpb259YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcInN0YXJ0c1dpdGhcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBzdGFydCB3aXRoIFwiJHtpc3N1ZS52YWxpZGF0aW9uLnN0YXJ0c1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImVuZHNXaXRoXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3QgZW5kIHdpdGggXCIke2lzc3VlLnZhbGlkYXRpb24uZW5kc1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihpc3N1ZS52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS52YWxpZGF0aW9uICE9PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgJHtpc3N1ZS52YWxpZGF0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX3NtYWxsOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnR5cGUgPT09IFwiYXJyYXlcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEFycmF5IG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG1vcmUgdGhhbmB9ICR7aXNzdWUubWluaW11bX0gZWxlbWVudChzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgU3RyaW5nIG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG92ZXJgfSAke2lzc3VlLm1pbmltdW19IGNoYXJhY3RlcihzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5IGVxdWFsIHRvIGAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGAgOiBgZ3JlYXRlciB0aGFuIGB9JHtpc3N1ZS5taW5pbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImJpZ2ludFwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5IGVxdWFsIHRvIGAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGAgOiBgZ3JlYXRlciB0aGFuIGB9JHtpc3N1ZS5taW5pbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImRhdGVcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYERhdGUgbXVzdCBiZSAke2lzc3VlLmV4YWN0ID8gYGV4YWN0bHkgZXF1YWwgdG8gYCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYCA6IGBncmVhdGVyIHRoYW4gYH0ke25ldyBEYXRlKE51bWJlcihpc3N1ZS5taW5pbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX2JpZzpcbiAgICAgICAgICAgIGlmIChpc3N1ZS50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBcnJheSBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19IGVsZW1lbnQocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYFN0cmluZyBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGB1bmRlcmB9ICR7aXNzdWUubWF4aW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0ID8gYGV4YWN0bHlgIDogaXNzdWUuaW5jbHVzaXZlID8gYGxlc3MgdGhhbiBvciBlcXVhbCB0b2AgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImJpZ2ludFwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQmlnSW50IG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gIDogYGxlc3MgdGhhbmB9ICR7aXNzdWUubWF4aW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBEYXRlIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG9gIDogYHNtYWxsZXIgdGhhbmB9ICR7bmV3IERhdGUoTnVtYmVyKGlzc3VlLm1heGltdW0pKX1gO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5jdXN0b206XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnRlcnNlY3Rpb24gcmVzdWx0cyBjb3VsZCBub3QgYmUgbWVyZ2VkYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2Y6XG4gICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtpc3N1ZS5tdWx0aXBsZU9mfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X2Zpbml0ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIk51bWJlciBtdXN0IGJlIGZpbml0ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBtZXNzYWdlID0gX2N0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGVycm9yTWFwO1xuIiwgImltcG9ydCBkZWZhdWx0RXJyb3JNYXAgZnJvbSBcIi4vbG9jYWxlcy9lbi5qc1wiO1xubGV0IG92ZXJyaWRlRXJyb3JNYXAgPSBkZWZhdWx0RXJyb3JNYXA7XG5leHBvcnQgeyBkZWZhdWx0RXJyb3JNYXAgfTtcbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvck1hcChtYXApIHtcbiAgICBvdmVycmlkZUVycm9yTWFwID0gbWFwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTWFwKCkge1xuICAgIHJldHVybiBvdmVycmlkZUVycm9yTWFwO1xufVxuIiwgImltcG9ydCB7IGdldEVycm9yTWFwIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuaW1wb3J0IGRlZmF1bHRFcnJvck1hcCBmcm9tIFwiLi4vbG9jYWxlcy9lbi5qc1wiO1xuZXhwb3J0IGNvbnN0IG1ha2VJc3N1ZSA9IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IGRhdGEsIHBhdGgsIGVycm9yTWFwcywgaXNzdWVEYXRhIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBbLi4ucGF0aCwgLi4uKGlzc3VlRGF0YS5wYXRoIHx8IFtdKV07XG4gICAgY29uc3QgZnVsbElzc3VlID0ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgIH07XG4gICAgaWYgKGlzc3VlRGF0YS5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICAgICAgbWVzc2FnZTogaXNzdWVEYXRhLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGNvbnN0IG1hcHMgPSBlcnJvck1hcHNcbiAgICAgICAgLmZpbHRlcigobSkgPT4gISFtKVxuICAgICAgICAuc2xpY2UoKVxuICAgICAgICAucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgbWFwIG9mIG1hcHMpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gbWFwKGZ1bGxJc3N1ZSwgeyBkYXRhLCBkZWZhdWx0RXJyb3I6IGVycm9yTWVzc2FnZSB9KS5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgfTtcbn07XG5leHBvcnQgY29uc3QgRU1QVFlfUEFUSCA9IFtdO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgaXNzdWVEYXRhKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVNYXAgPSBnZXRFcnJvck1hcCgpO1xuICAgIGNvbnN0IGlzc3VlID0gbWFrZUlzc3VlKHtcbiAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZURhdGEsXG4gICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCwgLy8gY29udGV4dHVhbCBlcnJvciBtYXAgaXMgZmlyc3QgcHJpb3JpdHlcbiAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCwgLy8gdGhlbiBzY2hlbWEtYm91bmQgbWFwIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAsIC8vIHRoZW4gZ2xvYmFsIG92ZXJyaWRlIG1hcFxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAgPT09IGRlZmF1bHRFcnJvck1hcCA/IHVuZGVmaW5lZCA6IGRlZmF1bHRFcnJvck1hcCwgLy8gdGhlbiBnbG9iYWwgZGVmYXVsdCBtYXBcbiAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgfSk7XG4gICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaChpc3N1ZSk7XG59XG5leHBvcnQgY2xhc3MgUGFyc2VTdGF0dXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gXCJ2YWxpZFwiO1xuICAgIH1cbiAgICBkaXJ0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IFwidmFsaWRcIilcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBcImRpcnR5XCI7XG4gICAgfVxuICAgIGFib3J0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJhYm9ydGVkXCI7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0cykge1xuICAgICAgICBjb25zdCBhcnJheVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocy5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBhcnJheVZhbHVlLnB1c2gocy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBhcnJheVZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qgc3luY1BhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycykge1xuICAgICAgICBjb25zdCBmaW5hbE9iamVjdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcGFpcjtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmIChrZXkudmFsdWUgIT09IFwiX19wcm90b19fXCIgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiB8fCBwYWlyLmFsd2F5c1NldCkpIHtcbiAgICAgICAgICAgICAgICBmaW5hbE9iamVjdFtrZXkudmFsdWVdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE9iamVjdCB9O1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBJTlZBTElEID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgc3RhdHVzOiBcImFib3J0ZWRcIixcbn0pO1xuZXhwb3J0IGNvbnN0IERJUlRZID0gKHZhbHVlKSA9PiAoeyBzdGF0dXM6IFwiZGlydHlcIiwgdmFsdWUgfSk7XG5leHBvcnQgY29uc3QgT0sgPSAodmFsdWUpID0+ICh7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZSB9KTtcbmV4cG9ydCBjb25zdCBpc0Fib3J0ZWQgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiO1xuZXhwb3J0IGNvbnN0IGlzRGlydHkgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiZGlydHlcIjtcbmV4cG9ydCBjb25zdCBpc1ZhbGlkID0gKHgpID0+IHguc3RhdHVzID09PSBcInZhbGlkXCI7XG5leHBvcnQgY29uc3QgaXNBc3luYyA9ICh4KSA9PiB0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB4IGluc3RhbmNlb2YgUHJvbWlzZTtcbiIsICJleHBvcnQgdmFyIGVycm9yVXRpbDtcbihmdW5jdGlvbiAoZXJyb3JVdGlsKSB7XG4gICAgZXJyb3JVdGlsLmVyclRvT2JqID0gKG1lc3NhZ2UpID0+IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8geyBtZXNzYWdlIH0gOiBtZXNzYWdlIHx8IHt9O1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50OlxuICAgIGVycm9yVXRpbC50b1N0cmluZyA9IChtZXNzYWdlKSA9PiB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBtZXNzYWdlPy5tZXNzYWdlO1xufSkoZXJyb3JVdGlsIHx8IChlcnJvclV0aWwgPSB7fSkpO1xuIiwgImltcG9ydCB7IFpvZEVycm9yLCBab2RJc3N1ZUNvZGUsIH0gZnJvbSBcIi4vWm9kRXJyb3IuanNcIjtcbmltcG9ydCB7IGRlZmF1bHRFcnJvck1hcCwgZ2V0RXJyb3JNYXAgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmltcG9ydCB7IGVycm9yVXRpbCB9IGZyb20gXCIuL2hlbHBlcnMvZXJyb3JVdGlsLmpzXCI7XG5pbXBvcnQgeyBESVJUWSwgSU5WQUxJRCwgT0ssIFBhcnNlU3RhdHVzLCBhZGRJc3N1ZVRvQ29udGV4dCwgaXNBYm9ydGVkLCBpc0FzeW5jLCBpc0RpcnR5LCBpc1ZhbGlkLCBtYWtlSXNzdWUsIH0gZnJvbSBcIi4vaGVscGVycy9wYXJzZVV0aWwuanNcIjtcbmltcG9ydCB7IHV0aWwsIFpvZFBhcnNlZFR5cGUsIGdldFBhcnNlZFR5cGUgfSBmcm9tIFwiLi9oZWxwZXJzL3V0aWwuanNcIjtcbmNsYXNzIFBhcnNlSW5wdXRMYXp5UGF0aCB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCB2YWx1ZSwgcGF0aCwga2V5KSB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFBhdGggPSBbXTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRQYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLCAuLi50aGlzLl9rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsIHRoaXMuX2tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFBhdGg7XG4gICAgfVxufVxuY29uc3QgaGFuZGxlUmVzdWx0ID0gKGN0eCwgcmVzdWx0KSA9PiB7XG4gICAgaWYgKGlzVmFsaWQocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZXN1bHQudmFsdWUgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghY3R4LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWYWxpZGF0aW9uIGZhaWxlZCBidXQgbm8gaXNzdWVzIGRldGVjdGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59O1xuZnVuY3Rpb24gcHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcylcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHsgZXJyb3JNYXAsIGludmFsaWRfdHlwZV9lcnJvciwgcmVxdWlyZWRfZXJyb3IsIGRlc2NyaXB0aW9uIH0gPSBwYXJhbXM7XG4gICAgaWYgKGVycm9yTWFwICYmIChpbnZhbGlkX3R5cGVfZXJyb3IgfHwgcmVxdWlyZWRfZXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgdXNlIFwiaW52YWxpZF90eXBlX2Vycm9yXCIgb3IgXCJyZXF1aXJlZF9lcnJvclwiIGluIGNvbmp1bmN0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1hcC5gKTtcbiAgICB9XG4gICAgaWYgKGVycm9yTWFwKVxuICAgICAgICByZXR1cm4geyBlcnJvck1hcDogZXJyb3JNYXAsIGRlc2NyaXB0aW9uIH07XG4gICAgY29uc3QgY3VzdG9tTWFwID0gKGlzcywgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gcGFyYW1zO1xuICAgICAgICBpZiAoaXNzLmNvZGUgPT09IFwiaW52YWxpZF9lbnVtX3ZhbHVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG1lc3NhZ2UgPz8gY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGEgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG1lc3NhZ2UgPz8gcmVxdWlyZWRfZXJyb3IgPz8gY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc3MuY29kZSAhPT0gXCJpbnZhbGlkX3R5cGVcIilcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogbWVzc2FnZSA/PyBpbnZhbGlkX3R5cGVfZXJyb3IgPz8gY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgZXJyb3JNYXA6IGN1c3RvbU1hcCwgZGVzY3JpcHRpb24gfTtcbn1cbmV4cG9ydCBjbGFzcyBab2RUeXBlIHtcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIF9nZXRUeXBlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBfZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCkge1xuICAgICAgICByZXR1cm4gKGN0eCB8fCB7XG4gICAgICAgICAgICBjb21tb246IGlucHV0LnBhcmVudC5jb21tb24sXG4gICAgICAgICAgICBkYXRhOiBpbnB1dC5kYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IG5ldyBQYXJzZVN0YXR1cygpLFxuICAgICAgICAgICAgY3R4OiB7XG4gICAgICAgICAgICAgICAgY29tbW9uOiBpbnB1dC5wYXJlbnQuY29tbW9uLFxuICAgICAgICAgICAgICAgIGRhdGE6IGlucHV0LmRhdGEsXG4gICAgICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGFyc2VTeW5jKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3luY2hyb25vdXMgcGFyc2UgZW5jb3VudGVyZWQgcHJvbWlzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX3BhcnNlQXN5bmMoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuICAgIHBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNhZmVQYXJzZShkYXRhLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgc2FmZVBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGFzeW5jOiBwYXJhbXM/LmFzeW5jID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRleHR1YWxFcnJvck1hcDogcGFyYW1zPy5lcnJvck1hcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiBwYXJhbXM/LnBhdGggfHwgW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlU3luYyh7IGRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIFwifnZhbGlkYXRlXCIoZGF0YSkge1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGFzeW5jOiAhIXRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGlmICghdGhpc1tcIn5zdGFuZGFyZFwiXS5hc3luYykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZVN5bmMoeyBkYXRhLCBwYXRoOiBbXSwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGN0eC5jb21tb24uaXNzdWVzLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnI/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKFwiZW5jb3VudGVyZWRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tcIn5zdGFuZGFyZFwiXS5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5jb21tb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlQXN5bmMoeyBkYXRhLCBwYXRoOiBbXSwgcGFyZW50OiBjdHggfSkudGhlbigocmVzdWx0KSA9PiBpc1ZhbGlkKHJlc3VsdClcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQudmFsdWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IGN0eC5jb21tb24uaXNzdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHBhcnNlQXN5bmMoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2FmZVBhcnNlQXN5bmMoZGF0YSwgcGFyYW1zKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgfVxuICAgIGFzeW5jIHNhZmVQYXJzZUFzeW5jKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGNvbnRleHR1YWxFcnJvck1hcDogcGFyYW1zPy5lcnJvck1hcCxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiBwYXJhbXM/LnBhdGggfHwgW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1heWJlQXN5bmNSZXN1bHQgPSB0aGlzLl9wYXJzZSh7IGRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGlzQXN5bmMobWF5YmVBc3luY1Jlc3VsdCkgPyBtYXliZUFzeW5jUmVzdWx0IDogUHJvbWlzZS5yZXNvbHZlKG1heWJlQXN5bmNSZXN1bHQpKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJlZmluZShjaGVjaywgbWVzc2FnZSkge1xuICAgICAgICBjb25zdCBnZXRJc3N1ZVByb3BlcnRpZXMgPSAodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1lc3NhZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNoZWNrKHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzZXRFcnJvciA9ICgpID0+IGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgICAgICAuLi5nZXRJc3N1ZVByb3BlcnRpZXModmFsKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZmluZW1lbnQoY2hlY2ssIHJlZmluZW1lbnREYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KCh2YWwsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGVjayh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHR5cGVvZiByZWZpbmVtZW50RGF0YSA9PT0gXCJmdW5jdGlvblwiID8gcmVmaW5lbWVudERhdGEodmFsLCBjdHgpIDogcmVmaW5lbWVudERhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlZmluZW1lbnQocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwicmVmaW5lbWVudFwiLCByZWZpbmVtZW50IH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdXBlclJlZmluZShyZWZpbmVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KHJlZmluZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihkZWYpIHtcbiAgICAgICAgLyoqIEFsaWFzIG9mIHNhZmVQYXJzZUFzeW5jICovXG4gICAgICAgIHRoaXMuc3BhID0gdGhpcy5zYWZlUGFyc2VBc3luYztcbiAgICAgICAgdGhpcy5fZGVmID0gZGVmO1xuICAgICAgICB0aGlzLnBhcnNlID0gdGhpcy5wYXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZSA9IHRoaXMuc2FmZVBhcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGFyc2VBc3luYyA9IHRoaXMucGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZUFzeW5jID0gdGhpcy5zYWZlUGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNwYSA9IHRoaXMuc3BhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVmaW5lID0gdGhpcy5yZWZpbmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZpbmVtZW50ID0gdGhpcy5yZWZpbmVtZW50LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3VwZXJSZWZpbmUgPSB0aGlzLnN1cGVyUmVmaW5lLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGFibGUgPSB0aGlzLm51bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGlzaCA9IHRoaXMubnVsbGlzaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFycmF5ID0gdGhpcy5hcnJheS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLnByb21pc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vciA9IHRoaXMub3IuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hbmQgPSB0aGlzLmFuZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYnJhbmQgPSB0aGlzLmJyYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVmYXVsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNhdGNoID0gdGhpcy5jYXRjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlID0gdGhpcy5kZXNjcmliZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBpcGUgPSB0aGlzLnBpcGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHkuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc051bGxhYmxlID0gdGhpcy5pc051bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzW1wifnN0YW5kYXJkXCJdID0ge1xuICAgICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICAgIHZlbmRvcjogXCJ6b2RcIixcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoZGF0YSkgPT4gdGhpc1tcIn52YWxpZGF0ZVwiXShkYXRhKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBab2RPcHRpb25hbC5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBab2ROdWxsYWJsZS5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGlzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbGFibGUoKS5vcHRpb25hbCgpO1xuICAgIH1cbiAgICBhcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZEFycmF5LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG4gICAgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZFByb21pc2UuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIG9yKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gWm9kVW5pb24uY3JlYXRlKFt0aGlzLCBvcHRpb25dLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBhbmQoaW5jb21pbmcpIHtcbiAgICAgICAgcmV0dXJuIFpvZEludGVyc2VjdGlvbi5jcmVhdGUodGhpcywgaW5jb21pbmcsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInRyYW5zZm9ybVwiLCB0cmFuc2Zvcm0gfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlZmF1bHQoZGVmKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUZ1bmMgPSB0eXBlb2YgZGVmID09PSBcImZ1bmN0aW9uXCIgPyBkZWYgOiAoKSA9PiBkZWY7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRGVmYXVsdCh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBpbm5lclR5cGU6IHRoaXMsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZUZ1bmMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERlZmF1bHQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBicmFuZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCcmFuZGVkKHtcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQnJhbmRlZCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaChkZWYpIHtcbiAgICAgICAgY29uc3QgY2F0Y2hWYWx1ZUZ1bmMgPSB0eXBlb2YgZGVmID09PSBcImZ1bmN0aW9uXCIgPyBkZWYgOiAoKSA9PiBkZWY7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQ2F0Y2goe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgaW5uZXJUeXBlOiB0aGlzLFxuICAgICAgICAgICAgY2F0Y2hWYWx1ZTogY2F0Y2hWYWx1ZUZ1bmMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgY29uc3QgVGhpcyA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiBuZXcgVGhpcyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBpcGUodGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBab2RQaXBlbGluZS5jcmVhdGUodGhpcywgdGFyZ2V0KTtcbiAgICB9XG4gICAgcmVhZG9ubHkoKSB7XG4gICAgICAgIHJldHVybiBab2RSZWFkb25seS5jcmVhdGUodGhpcyk7XG4gICAgfVxuICAgIGlzT3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZSh1bmRlZmluZWQpLnN1Y2Nlc3M7XG4gICAgfVxuICAgIGlzTnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzO1xuICAgIH1cbn1cbmNvbnN0IGN1aWRSZWdleCA9IC9eY1teXFxzLV17OCx9JC9pO1xuY29uc3QgY3VpZDJSZWdleCA9IC9eWzAtOWEtel0rJC87XG5jb25zdCB1bGlkUmVnZXggPSAvXlswLTlBLUhKS01OUC1UVi1aXXsyNn0kL2k7XG4vLyBjb25zdCB1dWlkUmVnZXggPVxuLy8gICAvXihbYS1mMC05XXs4fS1bYS1mMC05XXs0fS1bMS01XVthLWYwLTldezN9LVthLWYwLTldezR9LVthLWYwLTldezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuY29uc3QgdXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kL2k7XG5jb25zdCBuYW5vaWRSZWdleCA9IC9eW2EtejAtOV8tXXsyMX0kL2k7XG5jb25zdCBqd3RSZWdleCA9IC9eW0EtWmEtejAtOS1fXStcXC5bQS1aYS16MC05LV9dK1xcLltBLVphLXowLTktX10qJC87XG5jb25zdCBkdXJhdGlvblJlZ2V4ID0gL15bLStdP1AoPyEkKSg/Oig/OlstK10/XFxkK1kpfCg/OlstK10/XFxkK1suLF1cXGQrWSQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86KD86Wy0rXT9cXGQrVyl8KD86Wy0rXT9cXGQrWy4sXVxcZCtXJCkpPyg/Oig/OlstK10/XFxkK0QpfCg/OlstK10/XFxkK1suLF1cXGQrRCQpKT8oPzpUKD89W1xcZCstXSkoPzooPzpbLStdP1xcZCtIKXwoPzpbLStdP1xcZCtbLixdXFxkK0gkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/OlstK10/XFxkKyg/OlsuLF1cXGQrKT9TKT8pPz8kLztcbi8vIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2MTgxLzE1NTAxNTVcbi8vIG9sZCB2ZXJzaW9uOiB0b28gc2xvdywgZGlkbid0IHN1cHBvcnQgdW5pY29kZVxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSQvaTtcbi8vb2xkIGVtYWlsIHJlZ2V4XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID0gL14oKFtePD4oKVtcXF0uLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXS4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKCg/IS0pKFtePD4oKVtcXF0uLDs6XFxzQFwiXStcXC4pK1tePD4oKVtcXF0uLDs6XFxzQFwiXXsxLH0pW14tPD4oKVtcXF0uLDs6XFxzQFwiXSQvaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcWygoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcXSl8KFxcW0lQdjY6KChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXFwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKVxcXSl8KFtBLVphLXowLTldKFtBLVphLXowLTktXSpbQS1aYS16MC05XSkqKFxcLltBLVphLXpdezIsfSkrKSkkLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXpBLVowLTlcXC5cXCFcXCNcXCRcXCVcXCZcXCdcXCpcXCtcXC9cXD1cXD9cXF5cXF9cXGBcXHtcXHxcXH1cXH5cXC1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKD86W2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKnxcIig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKlwiKUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/fFxcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/fFthLXowLTktXSpbYS16MC05XTooPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMS1cXHg1YVxceDUzLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkrKVxcXSkkL2k7XG5jb25zdCBlbWFpbFJlZ2V4ID0gL14oPyFcXC4pKD8hLipcXC5cXC4pKFtBLVowLTlfJytcXC1cXC5dKilbQS1aMC05XystXUAoW0EtWjAtOV1bQS1aMC05XFwtXSpcXC4pK1tBLVpdezIsfSQvaTtcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXowLTkuISMkJSZcdTIwMTkqKy89P15fYHt8fX4tXStAW2EtejAtOS1dKyg/OlxcLlthLXowLTlcXC1dKykqJC9pO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamlSZWdleCA9IGBeKFxcXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY318XFxcXHB7RW1vamlfQ29tcG9uZW50fSkrJGA7XG5sZXQgZW1vamlSZWdleDtcbi8vIGZhc3Rlciwgc2ltcGxlciwgc2FmZXJcbmNvbnN0IGlwdjRSZWdleCA9IC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC87XG5jb25zdCBpcHY0Q2lkclJlZ2V4ID0gL14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oM1swLTJdfFsxMl0/WzAtOV0pJC87XG4vLyBjb25zdCBpcHY2UmVnZXggPVxuLy8gL14oKFthLWYwLTldezEsNH06KXs3fXw6OihbYS1mMC05XXsxLDR9Oil7MCw2fXwoW2EtZjAtOV17MSw0fTopezF9OihbYS1mMC05XXsxLDR9Oil7MCw1fXwoW2EtZjAtOV17MSw0fTopezJ9OihbYS1mMC05XXsxLDR9Oil7MCw0fXwoW2EtZjAtOV17MSw0fTopezN9OihbYS1mMC05XXsxLDR9Oil7MCwzfXwoW2EtZjAtOV17MSw0fTopezR9OihbYS1mMC05XXsxLDR9Oil7MCwyfXwoW2EtZjAtOV17MSw0fTopezV9OihbYS1mMC05XXsxLDR9Oil7MCwxfSkoW2EtZjAtOV17MSw0fXwoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkpJC87XG5jb25zdCBpcHY2UmVnZXggPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezcsN31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdezAsNH0pezAsNH0lWzAtOWEtekEtWl17MSx9fDo6KGZmZmYoOjB7MSw0fSl7MCwxfTopezAsMX0oKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKSkkLztcbmNvbnN0IGlwdjZDaWRyUmVnZXggPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezcsN31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdezAsNH0pezAsNH0lWzAtOWEtekEtWl17MSx9fDo6KGZmZmYoOjB7MSw0fSl7MCwxfTopezAsMX0oKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKSlcXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg2MDM5Mi9kZXRlcm1pbmUtaWYtc3RyaW5nLWlzLWluLWJhc2U2NC11c2luZy1qYXZhc2NyaXB0XG5jb25zdCBiYXNlNjRSZWdleCA9IC9eKFswLTlhLXpBLVorL117NH0pKigoWzAtOWEtekEtWisvXXsyfT09KXwoWzAtOWEtekEtWisvXXszfT0pKT8kLztcbi8vIGh0dHBzOi8vYmFzZTY0Lmd1cnUvc3RhbmRhcmRzL2Jhc2U2NHVybFxuY29uc3QgYmFzZTY0dXJsUmVnZXggPSAvXihbMC05YS16QS1aLV9dezR9KSooKFswLTlhLXpBLVotX117Mn0oPT0pPyl8KFswLTlhLXpBLVotX117M30oPSk/KSk/JC87XG4vLyBzaW1wbGVcbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfWA7XG4vLyBubyBsZWFwIHllYXIgdmFsaWRhdGlvblxuLy8gY29uc3QgZGF0ZVJlZ2V4U291cmNlID0gYFxcXFxkezR9LSgoMFsxMzU3OF18MTB8MTIpLTMxfCgwWzEzLTldfDFbMC0yXSktMzB8KDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVxcXFxkfDJcXFxcZCkpYDtcbi8vIHdpdGggbGVhcCB5ZWFyIHZhbGlkYXRpb25cbmNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZGF0ZVJlZ2V4U291cmNlfSRgKTtcbmZ1bmN0aW9uIHRpbWVSZWdleFNvdXJjZShhcmdzKSB7XG4gICAgbGV0IHNlY29uZHNSZWdleFNvdXJjZSA9IGBbMC01XVxcXFxkYDtcbiAgICBpZiAoYXJncy5wcmVjaXNpb24pIHtcbiAgICAgICAgc2Vjb25kc1JlZ2V4U291cmNlID0gYCR7c2Vjb25kc1JlZ2V4U291cmNlfVxcXFwuXFxcXGR7JHthcmdzLnByZWNpc2lvbn19YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgICBzZWNvbmRzUmVnZXhTb3VyY2UgPSBgJHtzZWNvbmRzUmVnZXhTb3VyY2V9KFxcXFwuXFxcXGQrKT9gO1xuICAgIH1cbiAgICBjb25zdCBzZWNvbmRzUXVhbnRpZmllciA9IGFyZ3MucHJlY2lzaW9uID8gXCIrXCIgOiBcIj9cIjsgLy8gcmVxdWlyZSBzZWNvbmRzIGlmIHByZWNpc2lvbiBpcyBub256ZXJvXG4gICAgcmV0dXJuIGAoWzAxXVxcXFxkfDJbMC0zXSk6WzAtNV1cXFxcZCg6JHtzZWNvbmRzUmVnZXhTb3VyY2V9KSR7c2Vjb25kc1F1YW50aWZpZXJ9YDtcbn1cbmZ1bmN0aW9uIHRpbWVSZWdleChhcmdzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3RpbWVSZWdleFNvdXJjZShhcmdzKX0kYCk7XG59XG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzMxNDMyMzFcbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZVJlZ2V4KGFyZ3MpIHtcbiAgICBsZXQgcmVnZXggPSBgJHtkYXRlUmVnZXhTb3VyY2V9VCR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfWA7XG4gICAgY29uc3Qgb3B0cyA9IFtdO1xuICAgIG9wdHMucHVzaChhcmdzLmxvY2FsID8gYFo/YCA6IGBaYCk7XG4gICAgaWYgKGFyZ3Mub2Zmc2V0KVxuICAgICAgICBvcHRzLnB1c2goYChbKy1dXFxcXGR7Mn06P1xcXFxkezJ9KWApO1xuICAgIHJlZ2V4ID0gYCR7cmVnZXh9KCR7b3B0cy5qb2luKFwifFwiKX0pYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufVxuZnVuY3Rpb24gaXNWYWxpZElQKGlwLCB2ZXJzaW9uKSB7XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY0XCIgfHwgIXZlcnNpb24pICYmIGlwdjRSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY2XCIgfHwgIXZlcnNpb24pICYmIGlwdjZSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNWYWxpZEpXVChqd3QsIGFsZykge1xuICAgIGlmICghand0UmVnZXgudGVzdChqd3QpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgW2hlYWRlcl0gPSBqd3Quc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoIWhlYWRlcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gQ29udmVydCBiYXNlNjR1cmwgdG8gYmFzZTY0XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGhlYWRlclxuICAgICAgICAgICAgLnJlcGxhY2UoLy0vZywgXCIrXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXy9nLCBcIi9cIilcbiAgICAgICAgICAgIC5wYWRFbmQoaGVhZGVyLmxlbmd0aCArICgoNCAtIChoZWFkZXIubGVuZ3RoICUgNCkpICUgNCksIFwiPVwiKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IEpTT04ucGFyc2UoYXRvYihiYXNlNjQpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWNvZGVkICE9PSBcIm9iamVjdFwiIHx8IGRlY29kZWQgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChcInR5cFwiIGluIGRlY29kZWQgJiYgZGVjb2RlZD8udHlwICE9PSBcIkpXVFwiKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWRlY29kZWQuYWxnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYWxnICYmIGRlY29kZWQuYWxnICE9PSBhbGcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1ZhbGlkQ2lkcihpcCwgdmVyc2lvbikge1xuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NFwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY0Q2lkclJlZ2V4LnRlc3QoaXApKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoKHZlcnNpb24gPT09IFwidjZcIiB8fCAhdmVyc2lvbikgJiYgaXB2NkNpZHJSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IFN0cmluZyhpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA8IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gaW5wdXQuZGF0YS5sZW5ndGggPCBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW1haWxcIikge1xuICAgICAgICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVtb2ppXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVtb2ppUmVnZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1vamlSZWdleCA9IG5ldyBSZWdFeHAoX2Vtb2ppUmVnZXgsIFwidVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbW9qaVJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJlbW9qaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidXVpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dWlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInV1aWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW5vaWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwibmFub2lkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjdWlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1aWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgIGlmICghY3VpZDJSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdWxpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1bGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICBjaGVjay5yZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBjaGVjay5yZWdleC50ZXN0KGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInJlZ2V4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0cmltXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImluY2x1ZGVzXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuaW5jbHVkZXMoY2hlY2sudmFsdWUsIGNoZWNrLnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IGluY2x1ZGVzOiBjaGVjay52YWx1ZSwgcG9zaXRpb246IGNoZWNrLnBvc2l0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0b0xvd2VyQ2FzZVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidG9VcHBlckNhc2VcIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInN0YXJ0c1dpdGhcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5zdGFydHNXaXRoKGNoZWNrLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IHN0YXJ0c1dpdGg6IGNoZWNrLnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJlbmRzV2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLmVuZHNXaXRoKGNoZWNrLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiB7IGVuZHNXaXRoOiBjaGVjay52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZGF0ZXRpbWVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gZGF0ZXRpbWVSZWdleChjaGVjayk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImRhdGVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gZGF0ZVJlZ2V4O1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gdGltZVJlZ2V4KGNoZWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkdXJhdGlvblJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiaXBcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZElQKGlucHV0LmRhdGEsIGNoZWNrLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiaXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImp3dFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSldUKGlucHV0LmRhdGEsIGNoZWNrLmFsZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJqd3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImNpZHJcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZENpZHIoaW5wdXQuZGF0YSwgY2hlY2sudmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJjaWRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZTY0UmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImJhc2U2NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiYmFzZTY0dXJsXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NHVybFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJiYXNlNjR1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgX3JlZ2V4KHJlZ2V4LCB2YWxpZGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmluZW1lbnQoKGRhdGEpID0+IHJlZ2V4LnRlc3QoZGF0YSksIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW1haWwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImVtYWlsXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1cmxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBlbW9qaShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1vamlcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1dWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1dWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgbmFub2lkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJuYW5vaWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJjdWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgY3VpZDIobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWQyXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdWxpZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwidWxpZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGJhc2U2NChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiYmFzZTY0XCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgYmFzZTY0dXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gYmFzZTY0dXJsIGVuY29kaW5nIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGJhc2U2NCB0aGF0IGNhbiBzYWZlbHkgYmUgdXNlZCBpbiBVUkxzIGFuZCBmaWxlbmFtZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiYmFzZTY0dXJsXCIsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBqd3Qob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImp3dFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucykgfSk7XG4gICAgfVxuICAgIGlwKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJpcFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucykgfSk7XG4gICAgfVxuICAgIGNpZHIob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImNpZHJcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMpIH0pO1xuICAgIH1cbiAgICBkYXRldGltZShvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbG9jYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2Ygb3B0aW9ucz8ucHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnM/LnByZWNpc2lvbixcbiAgICAgICAgICAgIG9mZnNldDogb3B0aW9ucz8ub2Zmc2V0ID8/IGZhbHNlLFxuICAgICAgICAgICAgbG9jYWw6IG9wdGlvbnM/LmxvY2FsID8/IGZhbHNlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnM/Lm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGF0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZGF0ZVwiLCBtZXNzYWdlIH0pO1xuICAgIH1cbiAgICB0aW1lKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2Ygb3B0aW9ucz8ucHJlY2lzaW9uID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnM/LnByZWNpc2lvbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zPy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGR1cmF0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJkdXJhdGlvblwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHJlZ2V4KHJlZ2V4LCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInJlZ2V4XCIsXG4gICAgICAgICAgICByZWdleDogcmVnZXgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbmNsdWRlcyh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJpbmNsdWRlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcG9zaXRpb246IG9wdGlvbnM/LnBvc2l0aW9uLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnM/Lm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhcnRzV2l0aCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJzdGFydHNXaXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbmRzV2l0aCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJlbmRzV2l0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkxlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBtaW5MZW5ndGgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4TGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IG1heExlbmd0aCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxlbmd0aChsZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibGVuZ3RoXCIsXG4gICAgICAgICAgICB2YWx1ZTogbGVuLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXF1aXZhbGVudCB0byBgLm1pbigxKWBcbiAgICAgKi9cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBlcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkpO1xuICAgIH1cbiAgICB0cmltKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidHJpbVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9Mb3dlckNhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0b0xvd2VyQ2FzZVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9VcHBlckNhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0b1VwcGVyQ2FzZVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IGlzRGF0ZXRpbWUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZGF0ZXRpbWVcIik7XG4gICAgfVxuICAgIGdldCBpc0RhdGUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZGF0ZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVGltZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ0aW1lXCIpO1xuICAgIH1cbiAgICBnZXQgaXNEdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJkdXJhdGlvblwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1haWwoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZW1haWxcIik7XG4gICAgfVxuICAgIGdldCBpc1VSTCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1cmxcIik7XG4gICAgfVxuICAgIGdldCBpc0Vtb2ppKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImVtb2ppXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVVUlEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInV1aWRcIik7XG4gICAgfVxuICAgIGdldCBpc05BTk9JRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJuYW5vaWRcIik7XG4gICAgfVxuICAgIGdldCBpc0NVSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY3VpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQ1VJRDIoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY3VpZDJcIik7XG4gICAgfVxuICAgIGdldCBpc1VMSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidWxpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzSVAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiaXBcIik7XG4gICAgfVxuICAgIGdldCBpc0NJRFIoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY2lkclwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0dXJsKCkge1xuICAgICAgICAvLyBiYXNlNjR1cmwgZW5jb2RpbmcgaXMgYSBtb2RpZmljYXRpb24gb2YgYmFzZTY0IHRoYXQgY2FuIHNhZmVseSBiZSB1c2VkIGluIFVSTHMgYW5kIGZpbGVuYW1lc1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NHVybFwiKTtcbiAgICB9XG4gICAgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4TGVuZ3RoKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kU3RyaW5nLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3RyaW5nLFxuICAgICAgICBjb2VyY2U6IHBhcmFtcz8uY29lcmNlID8/IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzk2NjQ4NC93aHktZG9lcy1tb2R1bHVzLW9wZXJhdG9yLXJldHVybi1mcmFjdGlvbmFsLW51bWJlci1pbi1qYXZhc2NyaXB0LzMxNzExMDM0IzMxNzExMDM0XG5mdW5jdGlvbiBmbG9hdFNhZmVSZW1haW5kZXIodmFsLCBzdGVwKSB7XG4gICAgY29uc3QgdmFsRGVjQ291bnQgPSAodmFsLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbiAgICBjb25zdCBzdGVwRGVjQ291bnQgPSAoc3RlcC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3QgZGVjQ291bnQgPSB2YWxEZWNDb3VudCA+IHN0ZXBEZWNDb3VudCA/IHZhbERlY0NvdW50IDogc3RlcERlY0NvdW50O1xuICAgIGNvbnN0IHZhbEludCA9IE51bWJlci5wYXJzZUludCh2YWwudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIGNvbnN0IHN0ZXBJbnQgPSBOdW1iZXIucGFyc2VJbnQoc3RlcC50b0ZpeGVkKGRlY0NvdW50KS5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XG4gICAgcmV0dXJuICh2YWxJbnQgJSBzdGVwSW50KSAvIDEwICoqIGRlY0NvdW50O1xufVxuZXhwb3J0IGNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgICAgICB0aGlzLnN0ZXAgPSB0aGlzLm11bHRpcGxlT2Y7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IE51bWJlcihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5udW1iZXIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJpbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0ludGVnZXIoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBcImZsb2F0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmUgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWUgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChmbG9hdFNhZmVSZW1haW5kZXIoaW5wdXQuZGF0YSwgY2hlY2sudmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2YsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZU9mOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImZpbml0ZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9maW5pdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImludFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25wb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpbml0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImZpbml0ZVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2FmZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KS5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgZ2V0IGlzSW50KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImludFwiIHx8IChjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIiAmJiB1dGlsLmlzSW50ZWdlcihjaC52YWx1ZSkpKTtcbiAgICB9XG4gICAgZ2V0IGlzRmluaXRlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwiZmluaXRlXCIgfHwgY2gua2luZCA9PT0gXCJpbnRcIiB8fCBjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobWluKSAmJiBOdW1iZXIuaXNGaW5pdGUobWF4KTtcbiAgICB9XG59XG5ab2ROdW1iZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdW1iZXIsXG4gICAgICAgIGNvZXJjZTogcGFyYW1zPy5jb2VyY2UgfHwgZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kQmlnSW50IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubWluID0gdGhpcy5ndGU7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5sdGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gQmlnSW50KGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRJbnZhbGlkSW5wdXQoaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYmlnaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SW52YWxpZElucHV0KGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmUgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWUgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhICUgY2hlY2sudmFsdWUgIT09IEJpZ0ludCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVPZjogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIF9nZXRJbnZhbGlkSW5wdXQoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5iaWdpbnQsXG4gICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICB9XG4gICAgZ3RlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBndCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBzZXRMaW1pdChraW5kLCB2YWx1ZSwgaW5jbHVzaXZlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5jaGVja3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCaWdJbnQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ucG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG11bHRpcGxlT2YodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibXVsdGlwbGVPZlwiLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kQmlnSW50LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQmlnSW50LFxuICAgICAgICBjb2VyY2U6IHBhcmFtcz8uY29lcmNlID8/IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZEJvb2xlYW4gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBCb29sZWFuKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYm9vbGVhbikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5ib29sZWFuLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZEJvb2xlYW4uY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kQm9vbGVhbih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQm9vbGVhbixcbiAgICAgICAgY29lcmNlOiBwYXJhbXM/LmNvZXJjZSB8fCBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2REYXRlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gbmV3IERhdGUoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5kYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmRhdGUsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGlucHV0LmRhdGEuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5nZXRUaW1lKCkgPCBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpID4gY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZShpbnB1dC5kYXRhLmdldFRpbWUoKSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkRhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluRGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4RGF0ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhEYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5EYXRlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCA/IG5ldyBEYXRlKG1pbikgOiBudWxsO1xuICAgIH1cbiAgICBnZXQgbWF4RGF0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ICE9IG51bGwgPyBuZXcgRGF0ZShtYXgpIDogbnVsbDtcbiAgICB9XG59XG5ab2REYXRlLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICBjb2VyY2U6IHBhcmFtcz8uY29lcmNlIHx8IGZhbHNlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERhdGUsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kU3ltYm9sIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3ltYm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnN5bWJvbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RTeW1ib2wuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kU3ltYm9sKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTeW1ib2wsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kVW5kZWZpbmVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RVbmRlZmluZWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5kZWZpbmVkKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmRlZmluZWQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kTnVsbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubnVsbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2ROdWxsLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bGwoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bGwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kQW55IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHRvIHByZXZlbnQgaW5zdGFuY2VzIG9mIG90aGVyIGNsYXNzZXMgZnJvbSBleHRlbmRpbmcgWm9kQW55LiB0aGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBjYXRjaGFsbCBpbiBab2RPYmplY3QuXG4gICAgICAgIHRoaXMuX2FueSA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kQW55LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFueSh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQW55LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFVua25vd24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgLy8gcmVxdWlyZWRcbiAgICAgICAgdGhpcy5fdW5rbm93biA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kVW5rbm93bi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmtub3duKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmtub3duLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZE5ldmVyIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubmV2ZXIsXG4gICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICB9XG59XG5ab2ROZXZlci5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROZXZlcih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmV2ZXIsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kVm9pZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS52b2lkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFZvaWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVm9pZCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVm9pZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RBcnJheSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCwgc3RhdHVzIH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLl9kZWY7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5hcnJheSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYuZXhhY3RMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGN0eC5kYXRhLmxlbmd0aCA+IGRlZi5leGFjdExlbmd0aC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY3R4LmRhdGEubGVuZ3RoIDwgZGVmLmV4YWN0TGVuZ3RoLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRvb0JpZyB8fCB0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0b29CaWcgPyBab2RJc3N1ZUNvZGUudG9vX2JpZyA6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06ICh0b29TbWFsbCA/IGRlZi5leGFjdExlbmd0aC52YWx1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06ICh0b29CaWcgPyBkZWYuZXhhY3RMZW5ndGgudmFsdWUgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5leGFjdExlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWluTGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEubGVuZ3RoIDwgZGVmLm1pbkxlbmd0aC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluTGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluTGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5tYXhMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPiBkZWYubWF4TGVuZ3RoLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBkZWYubWF4TGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4TGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWYudHlwZS5fcGFyc2VBc3luYyhuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKTtcbiAgICAgICAgICAgIH0pKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi50eXBlLl9wYXJzZVN5bmMobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IHsgdmFsdWU6IG1pbkxlbmd0aCwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4TGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiB7IHZhbHVlOiBtYXhMZW5ndGgsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGVuZ3RoKGxlbiwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGV4YWN0TGVuZ3RoOiB7IHZhbHVlOiBsZW4sIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgbWVzc2FnZSk7XG4gICAgfVxufVxuWm9kQXJyYXkuY3JlYXRlID0gKHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICAgIGV4YWN0TGVuZ3RoOiBudWxsLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gZGVlcFBhcnRpYWxpZnkoc2NoZW1hKSB7XG4gICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE9iamVjdCkge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuc2hhcGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gc2NoZW1hLnNoYXBlW2tleV07XG4gICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gWm9kT3B0aW9uYWwuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KGZpZWxkU2NoZW1hKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4uc2NoZW1hLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RBcnJheSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnNjaGVtYS5fZGVmLFxuICAgICAgICAgICAgdHlwZTogZGVlcFBhcnRpYWxpZnkoc2NoZW1hLmVsZW1lbnQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIFpvZE9wdGlvbmFsLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kTnVsbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZE51bGxhYmxlLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kVHVwbGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZFR1cGxlLmNyZWF0ZShzY2hlbWEuaXRlbXMubWFwKChpdGVtKSA9PiBkZWVwUGFydGlhbGlmeShpdGVtKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kT2JqZWN0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVwcmVjYXRlZCBJbiBtb3N0IGNhc2VzLCB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgLSB1bmtub3duIHByb3BlcnRpZXMgYXJlIG5vdyBzaWxlbnRseSBzdHJpcHBlZC5cbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gcGFzcyB0aHJvdWdoIHVua25vd24gcHJvcGVydGllcywgdXNlIGAucGFzc3Rocm91Z2goKWAgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubm9uc3RyaWN0ID0gdGhpcy5wYXNzdGhyb3VnaDtcbiAgICAgICAgLy8gZXh0ZW5kPFxuICAgICAgICAvLyAgIEF1Z21lbnRhdGlvbiBleHRlbmRzIFpvZFJhd1NoYXBlLFxuICAgICAgICAvLyAgIE5ld091dHB1dCBleHRlbmRzIHV0aWwuZmxhdHRlbjx7XG4gICAgICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBPdXRwdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX291dHB1dFwiXVxuICAgICAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBPdXRwdXRcbiAgICAgICAgLy8gICAgICAgPyBPdXRwdXRba11cbiAgICAgICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAgICAgLy8gICB9PixcbiAgICAgICAgLy8gICBOZXdJbnB1dCBleHRlbmRzIHV0aWwuZmxhdHRlbjx7XG4gICAgICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBJbnB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfaW5wdXRcIl1cbiAgICAgICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgSW5wdXRcbiAgICAgICAgLy8gICAgICAgPyBJbnB1dFtrXVxuICAgICAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgICAgICAvLyAgIH0+XG4gICAgICAgIC8vID4oXG4gICAgICAgIC8vICAgYXVnbWVudGF0aW9uOiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gKTogWm9kT2JqZWN0PFxuICAgICAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIEF1Z21lbnRhdGlvbj4sXG4gICAgICAgIC8vICAgVW5rbm93bktleXMsXG4gICAgICAgIC8vICAgQ2F0Y2hhbGwsXG4gICAgICAgIC8vICAgTmV3T3V0cHV0LFxuICAgICAgICAvLyAgIE5ld0lucHV0XG4gICAgICAgIC8vID4ge1xuICAgICAgICAvLyAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgLy8gICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAvLyAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgLy8gICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgICAgICAvLyAgICAgfSksXG4gICAgICAgIC8vICAgfSkgYXMgYW55O1xuICAgICAgICAvLyB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYC5leHRlbmRgIGluc3RlYWRcbiAgICAgICAgICogICovXG4gICAgICAgIHRoaXMuYXVnbWVudCA9IHRoaXMuZXh0ZW5kO1xuICAgIH1cbiAgICBfZ2V0Q2FjaGVkKCkge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVkICE9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZDtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB0aGlzLl9kZWYuc2hhcGUoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IHV0aWwub2JqZWN0S2V5cyhzaGFwZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IHsgc2hhcGUsIGtleXMgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZDtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IHsgc2hhcGUsIGtleXM6IHNoYXBlS2V5cyB9ID0gdGhpcy5fZ2V0Q2FjaGVkKCk7XG4gICAgICAgIGNvbnN0IGV4dHJhS2V5cyA9IFtdO1xuICAgICAgICBpZiAoISh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBab2ROZXZlciAmJiB0aGlzLl9kZWYudW5rbm93bktleXMgPT09IFwic3RyaXBcIikpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGN0eC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFwZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFwZUtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbGlkYXRvciA9IHNoYXBlW2tleV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICB2YWx1ZToga2V5VmFsaWRhdG9yLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBab2ROZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdW5rbm93bktleXMgPSB0aGlzLl9kZWYudW5rbm93bktleXM7XG4gICAgICAgICAgICBpZiAodW5rbm93bktleXMgPT09IFwicGFzc3Rocm91Z2hcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4dHJhS2V5cykge1xuICAgICAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBjdHguZGF0YVtrZXldIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVua25vd25LZXlzID09PSBcInN0cmljdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogZXh0cmFLZXlzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5rbm93bktleXMgPT09IFwic3RyaXBcIikge1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBab2RPYmplY3QgZXJyb3I6IGludmFsaWQgdW5rbm93bktleXMgdmFsdWUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBydW4gY2F0Y2hhbGwgdmFsaWRhdGlvblxuICAgICAgICAgICAgY29uc3QgY2F0Y2hhbGwgPSB0aGlzLl9kZWYuY2F0Y2hhbGw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHRyYUtleXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0Y2hhbGwuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIGtleSkgLy8sIGN0eC5jaGlsZChrZXkpLCB2YWx1ZSwgZ2V0UGFyc2VkVHlwZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzeW5jUGFpcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3luY1BhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IHBhaXIuYWx3YXlzU2V0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNQYWlycztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHN5bmNQYWlycykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBzeW5jUGFpcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zaGFwZSgpO1xuICAgIH1cbiAgICBzdHJpY3QobWVzc2FnZSkge1xuICAgICAgICBlcnJvclV0aWwuZXJyVG9PYmo7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICAgICAgLi4uKG1lc3NhZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcDogKGlzc3VlLCBjdHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRFcnJvciA9IHRoaXMuX2RlZi5lcnJvck1hcD8uKGlzc3VlLCBjdHgpLm1lc3NhZ2UgPz8gY3R4LmRlZmF1bHRFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcInVucmVjb2duaXplZF9rZXlzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLm1lc3NhZ2UgPz8gZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RyaXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXNzdGhyb3VnaCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwicGFzc3Rocm91Z2hcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNvbnN0IEF1Z21lbnRGYWN0b3J5ID1cbiAgICAvLyAgIDxEZWYgZXh0ZW5kcyBab2RPYmplY3REZWY+KGRlZjogRGVmKSA9PlxuICAgIC8vICAgPEF1Z21lbnRhdGlvbiBleHRlbmRzIFpvZFJhd1NoYXBlPihcbiAgICAvLyAgICAgYXVnbWVudGF0aW9uOiBBdWdtZW50YXRpb25cbiAgICAvLyAgICk6IFpvZE9iamVjdDxcbiAgICAvLyAgICAgZXh0ZW5kU2hhcGU8UmV0dXJuVHlwZTxEZWZbXCJzaGFwZVwiXT4sIEF1Z21lbnRhdGlvbj4sXG4gICAgLy8gICAgIERlZltcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgICBEZWZbXCJjYXRjaGFsbFwiXVxuICAgIC8vICAgPiA9PiB7XG4gICAgLy8gICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgICAuLi5kZWYsXG4gICAgLy8gICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgLy8gICAgICAgICAuLi5kZWYuc2hhcGUoKSxcbiAgICAvLyAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAvLyAgICAgICB9KSxcbiAgICAvLyAgICAgfSkgYXMgYW55O1xuICAgIC8vICAgfTtcbiAgICBleHRlbmQoYXVnbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJpb3IgdG8gem9kQDEuMC4xMiB0aGVyZSB3YXMgYSBidWcgaW4gdGhlXG4gICAgICogaW5mZXJyZWQgdHlwZSBvZiBtZXJnZWQgb2JqZWN0cy4gUGxlYXNlXG4gICAgICogdXBncmFkZSBpZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBpc3N1ZXMuXG4gICAgICovXG4gICAgbWVyZ2UobWVyZ2luZykge1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgICAgICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICAgICAgLi4ubWVyZ2luZy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG4gICAgLy8gbWVyZ2U8XG4gICAgLy8gICBJbmNvbWluZyBleHRlbmRzIEFueVpvZE9iamVjdCxcbiAgICAvLyAgIEF1Z21lbnRhdGlvbiBleHRlbmRzIEluY29taW5nW1wic2hhcGVcIl0sXG4gICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIE91dHB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBPdXRwdXRcbiAgICAvLyAgICAgICA/IE91dHB1dFtrXVxuICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgLy8gICB9LFxuICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIElucHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgSW5wdXRcbiAgICAvLyAgICAgICA/IElucHV0W2tdXG4gICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAvLyAgIH1cbiAgICAvLyA+KFxuICAgIC8vICAgbWVyZ2luZzogSW5jb21pbmdcbiAgICAvLyApOiBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdLFxuICAgIC8vICAgTmV3T3V0cHV0LFxuICAgIC8vICAgTmV3SW5wdXRcbiAgICAvLyA+IHtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBzZXRLZXkoa2V5LCBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXVnbWVudCh7IFtrZXldOiBzY2hlbWEgfSk7XG4gICAgfVxuICAgIC8vIG1lcmdlPEluY29taW5nIGV4dGVuZHMgQW55Wm9kT2JqZWN0PihcbiAgICAvLyAgIG1lcmdpbmc6IEluY29taW5nXG4gICAgLy8gKTogLy9ab2RPYmplY3Q8VCAmIEluY29taW5nW1wiX3NoYXBlXCJdLCBVbmtub3duS2V5cywgQ2F0Y2hhbGw+ID0gKG1lcmdpbmcpID0+IHtcbiAgICAvLyBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdXG4gICAgLy8gPiB7XG4gICAgLy8gICAvLyBjb25zdCBtZXJnZWRTaGFwZSA9IG9iamVjdFV0aWwubWVyZ2VTaGFwZXMoXG4gICAgLy8gICAvLyAgIHRoaXMuX2RlZi5zaGFwZSgpLFxuICAgIC8vICAgLy8gICBtZXJnaW5nLl9kZWYuc2hhcGUoKVxuICAgIC8vICAgLy8gKTtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBjYXRjaGFsbChpbmRleCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjYXRjaGFsbDogaW5kZXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaWNrKG1hc2spIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdXRpbC5vYmplY3RLZXlzKG1hc2spKSB7XG4gICAgICAgICAgICBpZiAobWFza1trZXldICYmIHRoaXMuc2hhcGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb21pdChtYXNrKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSkge1xuICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZGVlcFBhcnRpYWwoKSB7XG4gICAgICAgIHJldHVybiBkZWVwUGFydGlhbGlmeSh0aGlzKTtcbiAgICB9XG4gICAgcGFydGlhbChtYXNrKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWlyZWQobWFzaykge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpIHtcbiAgICAgICAgICAgIGlmIChtYXNrICYmICFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGRTY2hlbWE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG5ld0ZpZWxkIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC5fZGVmLmlubmVyVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IG5ld0ZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGtleW9mKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlWm9kRW51bSh1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpO1xuICAgIH1cbn1cblpvZE9iamVjdC5jcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LnN0cmljdENyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LmxhenljcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kVW5pb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9kZWYub3B0aW9ucztcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0cyhyZXN1bHRzKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZmlyc3QgaXNzdWUtZnJlZSB2YWxpZGF0aW9uIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgaXNzdWVzIGZyb20gZGlydHkgb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goLi4ucmVzdWx0LmN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmV0dXJuIGludmFsaWRcbiAgICAgICAgICAgIGNvbnN0IHVuaW9uRXJyb3JzID0gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gbmV3IFpvZEVycm9yKHJlc3VsdC5jdHguY29tbW9uLmlzc3VlcykpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24sXG4gICAgICAgICAgICAgICAgdW5pb25FcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwob3B0aW9ucy5tYXAoYXN5bmMgKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3R4ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LmNvbW1vbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYXdhaXQgb3B0aW9uLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGNoaWxkQ3R4LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY3R4OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkpLnRoZW4oaGFuZGxlUmVzdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgZGlydHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBpc3N1ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEN0eCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRpb24uX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIiAmJiAhZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlydHkgPSB7IHJlc3VsdCwgY3R4OiBjaGlsZEN0eCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRDdHguY29tbW9uLmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzLnB1c2goY2hpbGRDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpcnR5KSB7XG4gICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaCguLi5kaXJ0eS5jdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpcnR5LnJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVuaW9uRXJyb3JzID0gaXNzdWVzLm1hcCgoaXNzdWVzKSA9PiBuZXcgWm9kRXJyb3IoaXNzdWVzKSk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbixcbiAgICAgICAgICAgICAgICB1bmlvbkVycm9ycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG59XG5ab2RVbmlvbi5jcmVhdGUgPSAodHlwZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5pb24oe1xuICAgICAgICBvcHRpb25zOiB0eXBlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmlvbixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICBab2REaXNjcmltaW5hdGVkVW5pb24gICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5jb25zdCBnZXREaXNjcmltaW5hdG9yID0gKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZExhenkpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5zY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRWZmZWN0cykge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLmlubmVyVHlwZSgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZExpdGVyYWwpIHtcbiAgICAgICAgcmV0dXJuIFt0eXBlLnZhbHVlXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEVudW0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGUub3B0aW9ucztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE5hdGl2ZUVudW0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0VmFsdWVzKHR5cGUuZW51bSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2REZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuX2RlZi5pbm5lclR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kVW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtudWxsXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkLCAuLi5nZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE51bGxhYmxlKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgLi4uZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RCcmFuZGVkKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kUmVhZG9ubHkpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RDYXRjaCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLl9kZWYuaW5uZXJUeXBlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59O1xuZXhwb3J0IGNsYXNzIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yID0gdGhpcy5kaXNjcmltaW5hdG9yO1xuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBjdHguZGF0YVtkaXNjcmltaW5hdG9yXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zTWFwLmdldChkaXNjcmltaW5hdG9yVmFsdWUpO1xuICAgICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5mcm9tKHRoaXMub3B0aW9uc01hcC5rZXlzKCkpLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtkaXNjcmltaW5hdG9yXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRpc2NyaW1pbmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGlzY3JpbWluYXRvcjtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnNNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9uc01hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uIHNjaGVtYS4gSXRzIGJlaGF2aW91ciBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgbm9ybWFsIHoudW5pb24oKSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBIb3dldmVyLCBpdCBvbmx5IGFsbG93cyBhIHVuaW9uIG9mIG9iamVjdHMsIGFsbCBvZiB3aGljaCBuZWVkIHRvIHNoYXJlIGEgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS4gVGhpcyBwcm9wZXJ0eSBtdXN0XG4gICAgICogaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgZWFjaCBvYmplY3QgaW4gdGhlIHVuaW9uLlxuICAgICAqIEBwYXJhbSBkaXNjcmltaW5hdG9yIHRoZSBuYW1lIG9mIHRoZSBkaXNjcmltaW5hdG9yIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGVzIGFuIGFycmF5IG9mIG9iamVjdCBzY2hlbWFzXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICAgIC8vIEdldCBhbGwgdGhlIHZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWVzXG4gICAgICAgIGNvbnN0IG9wdGlvbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWVzID0gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnNoYXBlW2Rpc2NyaW1pbmF0b3JdKTtcbiAgICAgICAgICAgIGlmICghZGlzY3JpbWluYXRvclZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgZGlzY3JpbWluYXRvciB2YWx1ZSBmb3Iga2V5IFxcYCR7ZGlzY3JpbWluYXRvcn1cXGAgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGFsbCBzY2hlbWEgb3B0aW9uc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkaXNjcmltaW5hdG9yVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NyaW1pbmF0b3IgcHJvcGVydHkgJHtTdHJpbmcoZGlzY3JpbWluYXRvcil9IGhhcyBkdXBsaWNhdGUgdmFsdWUgJHtTdHJpbmcodmFsdWUpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnNldCh2YWx1ZSwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REaXNjcmltaW5hdGVkVW5pb24sXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnNNYXAsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlVmFsdWVzKGEsIGIpIHtcbiAgICBjb25zdCBhVHlwZSA9IGdldFBhcnNlZFR5cGUoYSk7XG4gICAgY29uc3QgYlR5cGUgPSBnZXRQYXJzZWRUeXBlKGIpO1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLm9iamVjdCAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgY29uc3QgYktleXMgPSB1dGlsLm9iamVjdEtleXMoYik7XG4gICAgICAgIGNvbnN0IHNoYXJlZEtleXMgPSB1dGlsLm9iamVjdEtleXMoYSkuZmlsdGVyKChrZXkpID0+IGJLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLmEsIC4uLmIgfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2hhcmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhhW2tleV0sIGJba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHNoYXJlZFZhbHVlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld09iaiB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5hcnJheSAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BID0gYVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBpdGVtQiA9IGJbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhpdGVtQSwgaXRlbUIpO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3QXJyYXkucHVzaChzaGFyZWRWYWx1ZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3QXJyYXkgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUuZGF0ZSAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5kYXRlICYmICthID09PSArYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFpvZEludGVyc2VjdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBoYW5kbGVQYXJzZWQgPSAocGFyc2VkTGVmdCwgcGFyc2VkUmlnaHQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Fib3J0ZWQocGFyc2VkTGVmdCkgfHwgaXNBYm9ydGVkKHBhcnNlZFJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VWYWx1ZXMocGFyc2VkTGVmdC52YWx1ZSwgcGFyc2VkUmlnaHQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFtZXJnZWQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGlydHkocGFyc2VkTGVmdCkgfHwgaXNEaXJ0eShwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogbWVyZ2VkLmRhdGEgfTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmLmxlZnQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKS50aGVuKChbbGVmdCwgcmlnaHRdKSA9PiBoYW5kbGVQYXJzZWQobGVmdCwgcmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVQYXJzZWQodGhpcy5fZGVmLmxlZnQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KSwgdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZSA9IChsZWZ0LCByaWdodCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RJbnRlcnNlY3Rpb24oe1xuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8gdHlwZSBab2RUdXBsZUl0ZW1zID0gW1pvZFR5cGVBbnksIC4uLlpvZFR5cGVBbnlbXV07XG5leHBvcnQgY2xhc3MgWm9kVHVwbGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA8IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgbWluaW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdCA9IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICBpZiAoIXJlc3QgJiYgY3R4LmRhdGEubGVuZ3RoID4gdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgbWF4aW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4uY3R4LmRhdGFdXG4gICAgICAgICAgICAubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuX2RlZi5pdGVtc1tpdGVtSW5kZXhdIHx8IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICAgICAgaWYgKCFzY2hlbWEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGl0ZW1JbmRleCkpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gISF4KTsgLy8gZmlsdGVyIG51bGxzXG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaXRlbXMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaXRlbXM7XG4gICAgfVxuICAgIHJlc3QocmVzdCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHJlc3QsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblpvZFR1cGxlLmNyZWF0ZSA9IChzY2hlbWFzLCBwYXJhbXMpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgcGFzcyBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHoudHVwbGUoWyAuLi4gXSlcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgWm9kVHVwbGUoe1xuICAgICAgICBpdGVtczogc2NoZW1hcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RUdXBsZSxcbiAgICAgICAgcmVzdDogbnVsbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RSZWNvcmQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBnZXQga2V5U2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgfVxuICAgIGdldCB2YWx1ZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgICAgIGNvbnN0IGtleVR5cGUgPSB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3R4LmRhdGEpIHtcbiAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleToga2V5VHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGtleSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBjdHguZGF0YVtrZXldLCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0QXN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShmaXJzdCwgc2Vjb25kLCB0aGlyZCkge1xuICAgICAgICBpZiAoc2Vjb25kIGluc3RhbmNlb2YgWm9kVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAgICAgIGtleVR5cGU6IGZpcnN0LFxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZTogc2Vjb25kLFxuICAgICAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcmQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAga2V5VHlwZTogWm9kU3RyaW5nLmNyZWF0ZSgpLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiBmaXJzdCxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhzZWNvbmQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kTWFwIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IGtleVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgIH1cbiAgICBnZXQgdmFsdWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm1hcCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5tYXAsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlUeXBlID0gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGNvbnN0IHBhaXJzID0gWy4uLmN0eC5kYXRhLmVudHJpZXMoKV0ubWFwKChba2V5LCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleToga2V5VHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGtleSwgY3R4LnBhdGgsIFtpbmRleCwgXCJrZXlcIl0pKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBbaW5kZXgsIFwidmFsdWVcIl0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbE1hcC5zZXQoa2V5LnZhbHVlLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxNYXAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsTWFwLnNldChrZXkudmFsdWUsIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxNYXAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblpvZE1hcC5jcmVhdGUgPSAoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE1hcCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RNYXAsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kU2V0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zZXQpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc2V0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmO1xuICAgICAgICBpZiAoZGVmLm1pblNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplIDwgZGVmLm1pblNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogZGVmLm1pblNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluU2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWF4U2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLnNpemUgPiBkZWYubWF4U2l6ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heFNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4U2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplU2V0KGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkU2V0LmFkZChlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcGFyc2VkU2V0IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbLi4uY3R4LmRhdGEudmFsdWVzKCldLm1hcCgoaXRlbSwgaSkgPT4gdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKSk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZWxlbWVudHMpLnRoZW4oKGVsZW1lbnRzKSA9PiBmaW5hbGl6ZVNldChlbGVtZW50cykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplU2V0KGVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtaW4obWluU2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5TaXplOiB7IHZhbHVlOiBtaW5TaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhTaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1heFNpemU6IHsgdmFsdWU6IG1heFNpemUsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2l6ZShzaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbihzaXplLCBtZXNzYWdlKS5tYXgoc2l6ZSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblpvZFNldC5jcmVhdGUgPSAodmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgbWluU2l6ZTogbnVsbCxcbiAgICAgICAgbWF4U2l6ZTogbnVsbCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTZXQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kRnVuY3Rpb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSA9IHRoaXMuaW1wbGVtZW50O1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5mdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VBcmdzSXNzdWUoYXJncywgZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSXNzdWUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3MsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXBzOiBbY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsIGN0eC5zY2hlbWFFcnJvck1hcCwgZ2V0RXJyb3JNYXAoKSwgZGVmYXVsdEVycm9yTWFwXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlUmV0dXJuc0lzc3VlKHJldHVybnMsIGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUlzc3VlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZXR1cm5zLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwczogW2N0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLCBjdHguc2NoZW1hRXJyb3JNYXAsIGdldEVycm9yTWFwKCksIGRlZmF1bHRFcnJvck1hcF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZUVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBlcnJvck1hcDogY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAgfTtcbiAgICAgICAgY29uc3QgZm4gPSBjdHguZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5yZXR1cm5zIGluc3RhbmNlb2YgWm9kUHJvbWlzZSkge1xuICAgICAgICAgICAgLy8gV291bGQgbG92ZSBhIHdheSB0byBhdm9pZCBkaXNhYmxpbmcgdGhpcyBydWxlLCBidXQgd2UgbmVlZFxuICAgICAgICAgICAgLy8gYW4gYWxpYXMgKHVzaW5nIGFuIGFycm93IGZ1bmN0aW9uIHdhcyB3aGF0IGNhdXNlZCAyNjUxKS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIE9LKGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoW10pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBhd2FpdCBtZS5fZGVmLmFyZ3MucGFyc2VBc3luYyhhcmdzLCBwYXJhbXMpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VBcmdzSXNzdWUoYXJncywgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gYXdhaXQgbWUuX2RlZi5yZXR1cm5zLl9kZWYudHlwZVxuICAgICAgICAgICAgICAgICAgICAucGFyc2VBc3luYyhyZXN1bHQsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRSZXR1cm5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBXb3VsZCBsb3ZlIGEgd2F5IHRvIGF2b2lkIGRpc2FibGluZyB0aGlzIHJ1bGUsIGJ1dCB3ZSBuZWVkXG4gICAgICAgICAgICAvLyBhbiBhbGlhcyAodXNpbmcgYW4gYXJyb3cgZnVuY3Rpb24gd2FzIHdoYXQgY2F1c2VkIDI2NTEpLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT0soZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gbWUuX2RlZi5hcmdzLnNhZmVQYXJzZShhcmdzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkQXJncy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBab2RFcnJvcihbbWFrZUFyZ3NJc3N1ZShhcmdzLCBwYXJzZWRBcmdzLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzLmRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJldHVybnMgPSBtZS5fZGVmLnJldHVybnMuc2FmZVBhcnNlKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFJldHVybnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBwYXJzZWRSZXR1cm5zLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5hcmdzO1xuICAgIH1cbiAgICByZXR1cm5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnJldHVybnM7XG4gICAgfVxuICAgIGFyZ3MoLi4uaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBhcmdzOiBab2RUdXBsZS5jcmVhdGUoaXRlbXMpLnJlc3QoWm9kVW5rbm93bi5jcmVhdGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm5zKHJldHVyblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdHJpY3RJbXBsZW1lbnQoZnVuYykge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGdW5jID0gdGhpcy5wYXJzZShmdW5jKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEZ1bmM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYXJncywgcmV0dXJucywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgYXJnczogKGFyZ3MgPyBhcmdzIDogWm9kVHVwbGUuY3JlYXRlKFtdKS5yZXN0KFpvZFVua25vd24uY3JlYXRlKCkpKSxcbiAgICAgICAgICAgIHJldHVybnM6IHJldHVybnMgfHwgWm9kVW5rbm93bi5jcmVhdGUoKSxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRnVuY3Rpb24sXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBab2RMYXp5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IHNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBsYXp5U2NoZW1hID0gdGhpcy5fZGVmLmdldHRlcigpO1xuICAgICAgICByZXR1cm4gbGF6eVNjaGVtYS5fcGFyc2UoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgIH1cbn1cblpvZExhenkuY3JlYXRlID0gKGdldHRlciwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgZ2V0dGVyOiBnZXR0ZXIsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTGF6eSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RMaXRlcmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5kYXRhICE9PSB0aGlzLl9kZWYudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB0aGlzLl9kZWYudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWU7XG4gICAgfVxufVxuWm9kTGl0ZXJhbC5jcmVhdGUgPSAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTGl0ZXJhbCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RMaXRlcmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gY3JlYXRlWm9kRW51bSh2YWx1ZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFbnVtLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY2xhc3MgWm9kRW51bSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0LmRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB1dGlsLmpvaW5WYWx1ZXMoZXhwZWN0ZWRWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZSA9IG5ldyBTZXQodGhpcy5fZGVmLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5oYXMoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG4gICAgZ2V0IGVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBnZXQgVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZ2V0IEVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBleHRyYWN0KHZhbHVlcywgbmV3RGVmID0gdGhpcy5fZGVmKSB7XG4gICAgICAgIHJldHVybiBab2RFbnVtLmNyZWF0ZSh2YWx1ZXMsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIC4uLm5ld0RlZixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4Y2x1ZGUodmFsdWVzLCBuZXdEZWYgPSB0aGlzLl9kZWYpIHtcbiAgICAgICAgcmV0dXJuIFpvZEVudW0uY3JlYXRlKHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gIXZhbHVlcy5pbmNsdWRlcyhvcHQpKSwge1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgLi4ubmV3RGVmLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5ab2RFbnVtLmNyZWF0ZSA9IGNyZWF0ZVpvZEVudW07XG5leHBvcnQgY2xhc3MgWm9kTmF0aXZlRW51bSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbnVtVmFsdWVzID0gdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXModGhpcy5fZGVmLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZyAmJiBjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdXRpbC5vYmplY3RWYWx1ZXMobmF0aXZlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdXRpbC5qb2luVmFsdWVzKGV4cGVjdGVkVmFsdWVzKSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUgPSBuZXcgU2V0KHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB1dGlsLm9iamVjdFZhbHVlcyhuYXRpdmVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBlbnVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG59XG5ab2ROYXRpdmVFbnVtLmNyZWF0ZSA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmF0aXZlRW51bSh7XG4gICAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hdGl2ZUVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kUHJvbWlzZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5wcm9taXNlICYmIGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnByb21pc2UsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNpZmllZCA9IGN0eC5wYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnByb21pc2UgPyBjdHguZGF0YSA6IFByb21pc2UucmVzb2x2ZShjdHguZGF0YSk7XG4gICAgICAgIHJldHVybiBPSyhwcm9taXNpZmllZC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGUucGFyc2VBc3luYyhkYXRhLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5ab2RQcm9taXNlLmNyZWF0ZSA9IChzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kUHJvbWlzZSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQcm9taXNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZEVmZmVjdHMgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBpbm5lclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hO1xuICAgIH1cbiAgICBzb3VyY2VUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0c1xuICAgICAgICAgICAgPyB0aGlzLl9kZWYuc2NoZW1hLnNvdXJjZVR5cGUoKVxuICAgICAgICAgICAgOiB0aGlzLl9kZWYuc2NoZW1hO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZWZmZWN0ID0gdGhpcy5fZGVmLmVmZmVjdCB8fCBudWxsO1xuICAgICAgICBjb25zdCBjaGVja0N0eCA9IHtcbiAgICAgICAgICAgIGFkZElzc3VlOiAoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCBhcmcpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcuZmF0YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXRoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY2hlY2tDdHguYWRkSXNzdWUgPSBjaGVja0N0eC5hZGRJc3N1ZS5iaW5kKGNoZWNrQ3R4KTtcbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInByZXByb2Nlc3NcIikge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkID0gZWZmZWN0LnRyYW5zZm9ybShjdHguZGF0YSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb2Nlc3NlZCkudGhlbihhc3luYyAocHJvY2Vzc2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcHJvY2Vzc2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJyZWZpbmVtZW50XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVSZWZpbmVtZW50ID0gKGFjYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC5yZWZpbmVtZW50KGFjYywgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgcmVmaW5lbWVudCBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXIgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbm5lci5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkXG4gICAgICAgICAgICAgICAgZXhlY3V0ZVJlZmluZW1lbnQoaW5uZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KS50aGVuKChpbm5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQoYmFzZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXN5bmNocm9ub3VzIHRyYW5zZm9ybSBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KS50aGVuKChiYXNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZChiYXNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpKS50aGVuKChyZXN1bHQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGVmZmVjdCk7XG4gICAgfVxufVxuWm9kRWZmZWN0cy5jcmVhdGUgPSAoc2NoZW1hLCBlZmZlY3QsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICBlZmZlY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RFZmZlY3RzLmNyZWF0ZVdpdGhQcmVwcm9jZXNzID0gKHByZXByb2Nlc3MsIHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJwcmVwcm9jZXNzXCIsIHRyYW5zZm9ybTogcHJlcHJvY2VzcyB9LFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgeyBab2RFZmZlY3RzIGFzIFpvZFRyYW5zZm9ybWVyIH07XG5leHBvcnQgY2xhc3MgWm9kT3B0aW9uYWwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBPSyh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kT3B0aW9uYWwuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT3B0aW9uYWwoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kTnVsbGFibGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2ROdWxsYWJsZS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsYWJsZSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsYWJsZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2REZWZhdWx0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBsZXQgZGF0YSA9IGN0eC5kYXRhO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGVmLmRlZmF1bHRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZURlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZERlZmF1bHQuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRGVmYXVsdCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBwYXJhbXMuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiID8gcGFyYW1zLmRlZmF1bHQgOiAoKSA9PiBwYXJhbXMuZGVmYXVsdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RDYXRjaCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgLy8gbmV3Q3R4IGlzIHVzZWQgdG8gbm90IGNvbGxlY3QgaXNzdWVzIGZyb20gaW5uZXIgdHlwZXMgaW4gY3R4XG4gICAgICAgIGNvbnN0IG5ld0N0eCA9IHtcbiAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGE6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgcGF0aDogbmV3Q3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICAgICAgICAuLi5uZXdDdHgsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogbmV3Q3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogXCJ2YWxpZFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ2F0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZENhdGNoLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICBjYXRjaFZhbHVlOiB0eXBlb2YgcGFyYW1zLmNhdGNoID09PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMuY2F0Y2ggOiAoKSA9PiBwYXJhbXMuY2F0Y2gsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kTmFOIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubmFuKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5hbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbn1cblpvZE5hTi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROYU4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hTixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCBCUkFORCA9IFN5bWJvbChcInpvZF9icmFuZFwiKTtcbmV4cG9ydCBjbGFzcyBab2RCcmFuZGVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kUGlwZWxpbmUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUFzeW5jID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluUmVzdWx0ID0gYXdhaXQgdGhpcy5fZGVmLmluLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkoaW5SZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vdXQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpblJlc3VsdCA9IHRoaXMuX2RlZi5pbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwiZGlydHlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm91dC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RQaXBlbGluZSh7XG4gICAgICAgICAgICBpbjogYSxcbiAgICAgICAgICAgIG91dDogYixcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBab2RSZWFkb25seSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIGNvbnN0IGZyZWV6ZSA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgPSBPYmplY3QuZnJlZXplKGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0FzeW5jKHJlc3VsdCkgPyByZXN1bHQudGhlbigoZGF0YSkgPT4gZnJlZXplKGRhdGEpKSA6IGZyZWV6ZShyZXN1bHQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZFJlYWRvbmx5LmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFJlYWRvbmx5KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlYWRvbmx5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgIHouY3VzdG9tICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZnVuY3Rpb24gY2xlYW5QYXJhbXMocGFyYW1zLCBkYXRhKSB7XG4gICAgY29uc3QgcCA9IHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIiA/IHBhcmFtcyhkYXRhKSA6IHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2U6IHBhcmFtcyB9IDogcGFyYW1zO1xuICAgIGNvbnN0IHAyID0gdHlwZW9mIHAgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2U6IHAgfSA6IHA7XG4gICAgcmV0dXJuIHAyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbShjaGVjaywgX3BhcmFtcyA9IHt9LCBcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqXG4gKiBQYXNzIGBmYXRhbGAgaW50byB0aGUgcGFyYW1zIG9iamVjdCBpbnN0ZWFkOlxuICpcbiAqIGBgYHRzXG4gKiB6LnN0cmluZygpLmN1c3RvbSgodmFsKSA9PiB2YWwubGVuZ3RoID4gNSwgeyBmYXRhbDogZmFsc2UgfSlcbiAqIGBgYFxuICpcbiAqL1xuZmF0YWwpIHtcbiAgICBpZiAoY2hlY2spXG4gICAgICAgIHJldHVybiBab2RBbnkuY3JlYXRlKCkuc3VwZXJSZWZpbmUoKGRhdGEsIGN0eCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgciA9IGNoZWNrKGRhdGEpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIudGhlbigocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGNsZWFuUGFyYW1zKF9wYXJhbXMsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX2ZhdGFsID0gcGFyYW1zLmZhdGFsID8/IGZhdGFsID8/IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCAuLi5wYXJhbXMsIGZhdGFsOiBfZmF0YWwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGNsZWFuUGFyYW1zKF9wYXJhbXMsIGRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9mYXRhbCA9IHBhcmFtcy5mYXRhbCA/PyBmYXRhbCA/PyB0cnVlO1xuICAgICAgICAgICAgICAgIGN0eC5hZGRJc3N1ZSh7IGNvZGU6IFwiY3VzdG9tXCIsIC4uLnBhcmFtcywgZmF0YWw6IF9mYXRhbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIFpvZEFueS5jcmVhdGUoKTtcbn1cbmV4cG9ydCB7IFpvZFR5cGUgYXMgU2NoZW1hLCBab2RUeXBlIGFzIFpvZFNjaGVtYSB9O1xuZXhwb3J0IGNvbnN0IGxhdGUgPSB7XG4gICAgb2JqZWN0OiBab2RPYmplY3QubGF6eWNyZWF0ZSxcbn07XG5leHBvcnQgdmFyIFpvZEZpcnN0UGFydHlUeXBlS2luZDtcbihmdW5jdGlvbiAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKSB7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU3RyaW5nXCJdID0gXCJab2RTdHJpbmdcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdW1iZXJcIl0gPSBcIlpvZE51bWJlclwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5hTlwiXSA9IFwiWm9kTmFOXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQmlnSW50XCJdID0gXCJab2RCaWdJbnRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCb29sZWFuXCJdID0gXCJab2RCb29sZWFuXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGF0ZVwiXSA9IFwiWm9kRGF0ZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFN5bWJvbFwiXSA9IFwiWm9kU3ltYm9sXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5kZWZpbmVkXCJdID0gXCJab2RVbmRlZmluZWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdWxsXCJdID0gXCJab2ROdWxsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQW55XCJdID0gXCJab2RBbnlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmtub3duXCJdID0gXCJab2RVbmtub3duXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmV2ZXJcIl0gPSBcIlpvZE5ldmVyXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVm9pZFwiXSA9IFwiWm9kVm9pZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEFycmF5XCJdID0gXCJab2RBcnJheVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE9iamVjdFwiXSA9IFwiWm9kT2JqZWN0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5pb25cIl0gPSBcIlpvZFVuaW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCJdID0gXCJab2REaXNjcmltaW5hdGVkVW5pb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RJbnRlcnNlY3Rpb25cIl0gPSBcIlpvZEludGVyc2VjdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFR1cGxlXCJdID0gXCJab2RUdXBsZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFJlY29yZFwiXSA9IFwiWm9kUmVjb3JkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTWFwXCJdID0gXCJab2RNYXBcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTZXRcIl0gPSBcIlpvZFNldFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEZ1bmN0aW9uXCJdID0gXCJab2RGdW5jdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZExhenlcIl0gPSBcIlpvZExhenlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RMaXRlcmFsXCJdID0gXCJab2RMaXRlcmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRW51bVwiXSA9IFwiWm9kRW51bVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEVmZmVjdHNcIl0gPSBcIlpvZEVmZmVjdHNcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROYXRpdmVFbnVtXCJdID0gXCJab2ROYXRpdmVFbnVtXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kT3B0aW9uYWxcIl0gPSBcIlpvZE9wdGlvbmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVsbGFibGVcIl0gPSBcIlpvZE51bGxhYmxlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGVmYXVsdFwiXSA9IFwiWm9kRGVmYXVsdFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZENhdGNoXCJdID0gXCJab2RDYXRjaFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFByb21pc2VcIl0gPSBcIlpvZFByb21pc2VcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCcmFuZGVkXCJdID0gXCJab2RCcmFuZGVkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUGlwZWxpbmVcIl0gPSBcIlpvZFBpcGVsaW5lXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUmVhZG9ubHlcIl0gPSBcIlpvZFJlYWRvbmx5XCI7XG59KShab2RGaXJzdFBhcnR5VHlwZUtpbmQgfHwgKFpvZEZpcnN0UGFydHlUeXBlS2luZCA9IHt9KSk7XG4vLyByZXF1aXJlcyBUUyA0LjQrXG5jbGFzcyBDbGFzcyB7XG4gICAgY29uc3RydWN0b3IoLi4uXykgeyB9XG59XG5jb25zdCBpbnN0YW5jZU9mVHlwZSA9IChcbi8vIGNvbnN0IGluc3RhbmNlT2ZUeXBlID0gPFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+KFxuY2xzLCBwYXJhbXMgPSB7XG4gICAgbWVzc2FnZTogYElucHV0IG5vdCBpbnN0YW5jZSBvZiAke2Nscy5uYW1lfWAsXG59KSA9PiBjdXN0b20oKGRhdGEpID0+IGRhdGEgaW5zdGFuY2VvZiBjbHMsIHBhcmFtcyk7XG5jb25zdCBzdHJpbmdUeXBlID0gWm9kU3RyaW5nLmNyZWF0ZTtcbmNvbnN0IG51bWJlclR5cGUgPSBab2ROdW1iZXIuY3JlYXRlO1xuY29uc3QgbmFuVHlwZSA9IFpvZE5hTi5jcmVhdGU7XG5jb25zdCBiaWdJbnRUeXBlID0gWm9kQmlnSW50LmNyZWF0ZTtcbmNvbnN0IGJvb2xlYW5UeXBlID0gWm9kQm9vbGVhbi5jcmVhdGU7XG5jb25zdCBkYXRlVHlwZSA9IFpvZERhdGUuY3JlYXRlO1xuY29uc3Qgc3ltYm9sVHlwZSA9IFpvZFN5bWJvbC5jcmVhdGU7XG5jb25zdCB1bmRlZmluZWRUeXBlID0gWm9kVW5kZWZpbmVkLmNyZWF0ZTtcbmNvbnN0IG51bGxUeXBlID0gWm9kTnVsbC5jcmVhdGU7XG5jb25zdCBhbnlUeXBlID0gWm9kQW55LmNyZWF0ZTtcbmNvbnN0IHVua25vd25UeXBlID0gWm9kVW5rbm93bi5jcmVhdGU7XG5jb25zdCBuZXZlclR5cGUgPSBab2ROZXZlci5jcmVhdGU7XG5jb25zdCB2b2lkVHlwZSA9IFpvZFZvaWQuY3JlYXRlO1xuY29uc3QgYXJyYXlUeXBlID0gWm9kQXJyYXkuY3JlYXRlO1xuY29uc3Qgb2JqZWN0VHlwZSA9IFpvZE9iamVjdC5jcmVhdGU7XG5jb25zdCBzdHJpY3RPYmplY3RUeXBlID0gWm9kT2JqZWN0LnN0cmljdENyZWF0ZTtcbmNvbnN0IHVuaW9uVHlwZSA9IFpvZFVuaW9uLmNyZWF0ZTtcbmNvbnN0IGRpc2NyaW1pbmF0ZWRVbmlvblR5cGUgPSBab2REaXNjcmltaW5hdGVkVW5pb24uY3JlYXRlO1xuY29uc3QgaW50ZXJzZWN0aW9uVHlwZSA9IFpvZEludGVyc2VjdGlvbi5jcmVhdGU7XG5jb25zdCB0dXBsZVR5cGUgPSBab2RUdXBsZS5jcmVhdGU7XG5jb25zdCByZWNvcmRUeXBlID0gWm9kUmVjb3JkLmNyZWF0ZTtcbmNvbnN0IG1hcFR5cGUgPSBab2RNYXAuY3JlYXRlO1xuY29uc3Qgc2V0VHlwZSA9IFpvZFNldC5jcmVhdGU7XG5jb25zdCBmdW5jdGlvblR5cGUgPSBab2RGdW5jdGlvbi5jcmVhdGU7XG5jb25zdCBsYXp5VHlwZSA9IFpvZExhenkuY3JlYXRlO1xuY29uc3QgbGl0ZXJhbFR5cGUgPSBab2RMaXRlcmFsLmNyZWF0ZTtcbmNvbnN0IGVudW1UeXBlID0gWm9kRW51bS5jcmVhdGU7XG5jb25zdCBuYXRpdmVFbnVtVHlwZSA9IFpvZE5hdGl2ZUVudW0uY3JlYXRlO1xuY29uc3QgcHJvbWlzZVR5cGUgPSBab2RQcm9taXNlLmNyZWF0ZTtcbmNvbnN0IGVmZmVjdHNUeXBlID0gWm9kRWZmZWN0cy5jcmVhdGU7XG5jb25zdCBvcHRpb25hbFR5cGUgPSBab2RPcHRpb25hbC5jcmVhdGU7XG5jb25zdCBudWxsYWJsZVR5cGUgPSBab2ROdWxsYWJsZS5jcmVhdGU7XG5jb25zdCBwcmVwcm9jZXNzVHlwZSA9IFpvZEVmZmVjdHMuY3JlYXRlV2l0aFByZXByb2Nlc3M7XG5jb25zdCBwaXBlbGluZVR5cGUgPSBab2RQaXBlbGluZS5jcmVhdGU7XG5jb25zdCBvc3RyaW5nID0gKCkgPT4gc3RyaW5nVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvbnVtYmVyID0gKCkgPT4gbnVtYmVyVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvYm9vbGVhbiA9ICgpID0+IGJvb2xlYW5UeXBlKCkub3B0aW9uYWwoKTtcbmV4cG9ydCBjb25zdCBjb2VyY2UgPSB7XG4gICAgc3RyaW5nOiAoKGFyZykgPT4gWm9kU3RyaW5nLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBudW1iZXI6ICgoYXJnKSA9PiBab2ROdW1iZXIuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIGJvb2xlYW46ICgoYXJnKSA9PiBab2RCb29sZWFuLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFyZyxcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgIH0pKSxcbiAgICBiaWdpbnQ6ICgoYXJnKSA9PiBab2RCaWdJbnQuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIGRhdGU6ICgoYXJnKSA9PiBab2REYXRlLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbn07XG5leHBvcnQgeyBhbnlUeXBlIGFzIGFueSwgYXJyYXlUeXBlIGFzIGFycmF5LCBiaWdJbnRUeXBlIGFzIGJpZ2ludCwgYm9vbGVhblR5cGUgYXMgYm9vbGVhbiwgZGF0ZVR5cGUgYXMgZGF0ZSwgZGlzY3JpbWluYXRlZFVuaW9uVHlwZSBhcyBkaXNjcmltaW5hdGVkVW5pb24sIGVmZmVjdHNUeXBlIGFzIGVmZmVjdCwgZW51bVR5cGUgYXMgZW51bSwgZnVuY3Rpb25UeXBlIGFzIGZ1bmN0aW9uLCBpbnN0YW5jZU9mVHlwZSBhcyBpbnN0YW5jZW9mLCBpbnRlcnNlY3Rpb25UeXBlIGFzIGludGVyc2VjdGlvbiwgbGF6eVR5cGUgYXMgbGF6eSwgbGl0ZXJhbFR5cGUgYXMgbGl0ZXJhbCwgbWFwVHlwZSBhcyBtYXAsIG5hblR5cGUgYXMgbmFuLCBuYXRpdmVFbnVtVHlwZSBhcyBuYXRpdmVFbnVtLCBuZXZlclR5cGUgYXMgbmV2ZXIsIG51bGxUeXBlIGFzIG51bGwsIG51bGxhYmxlVHlwZSBhcyBudWxsYWJsZSwgbnVtYmVyVHlwZSBhcyBudW1iZXIsIG9iamVjdFR5cGUgYXMgb2JqZWN0LCBvYm9vbGVhbiwgb251bWJlciwgb3B0aW9uYWxUeXBlIGFzIG9wdGlvbmFsLCBvc3RyaW5nLCBwaXBlbGluZVR5cGUgYXMgcGlwZWxpbmUsIHByZXByb2Nlc3NUeXBlIGFzIHByZXByb2Nlc3MsIHByb21pc2VUeXBlIGFzIHByb21pc2UsIHJlY29yZFR5cGUgYXMgcmVjb3JkLCBzZXRUeXBlIGFzIHNldCwgc3RyaWN0T2JqZWN0VHlwZSBhcyBzdHJpY3RPYmplY3QsIHN0cmluZ1R5cGUgYXMgc3RyaW5nLCBzeW1ib2xUeXBlIGFzIHN5bWJvbCwgZWZmZWN0c1R5cGUgYXMgdHJhbnNmb3JtZXIsIHR1cGxlVHlwZSBhcyB0dXBsZSwgdW5kZWZpbmVkVHlwZSBhcyB1bmRlZmluZWQsIHVuaW9uVHlwZSBhcyB1bmlvbiwgdW5rbm93blR5cGUgYXMgdW5rbm93biwgdm9pZFR5cGUgYXMgdm9pZCwgfTtcbmV4cG9ydCBjb25zdCBORVZFUiA9IElOVkFMSUQ7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiZXhwb3J0IHsgbGlzdEFnZW50cyB9IGZyb20gJy4vbGlzdC1hZ2VudHMubWpzJztcbmV4cG9ydCB7IGdldEFnZW50IH0gZnJvbSAnLi9nZXQtYWdlbnQubWpzJztcbmV4cG9ydCB7IGxpc3RQcmltaXRpdmVWZXJzaW9ucyB9IGZyb20gJy4vbGlzdC1wcmltaXRpdmUtdmVyc2lvbnMubWpzJztcbmV4cG9ydCB7IGdldERlcGxveW1lbnRTdGF0dXMgfSBmcm9tICcuL2dldC1kZXBsb3ltZW50LXN0YXR1cy5tanMnO1xuZXhwb3J0IHsgdGFpbExvZ3MgfSBmcm9tICcuL3RhaWwtbG9ncy5tanMnO1xuLy8gY2hlY2tfZHJpZnQgcmVtb3ZlZCBpbiB2MS4yNSBcdTIwMTQgdXNlIEJhc2gobHVhIHN5bmMgLS1jaGVjaykgZGlyZWN0bHkuIFRoZVxuLy8gTUNQIHNlcnZlciBpcyBsb2NhbCBhbmQgc28gaXMgdGhlIENMSTsgcmVpbXBsZW1lbnRpbmcgZHJpZnQgZGV0ZWN0aW9uXG4vLyBzZXJ2ZXItc2lkZSBvciBpbiB0aGUgTUNQIHdvdWxkIGR1cGxpY2F0ZSBsb2dpYyB0aGF0IGx1YS1jbGkgYWxyZWFkeSBvd25zLlxuIiwgIi8vIFNoYXJlZCBzdWJwcm9jZXNzIGhlbHBlciBmb3IgdG9vbHMgdGhhdCBzaGVsbCBvdXQgdG8gdGhlIGx1YS1jbGkgYmluYXJ5LlxuLy9cbi8vIFdoeSBzaGVsbCBvdXQgYXQgYWxsOiB0aGVyZSBpcyBubyBcImxpc3QgZXZlcnkgYWdlbnQgdGhpcyBjcmVkZW50aWFsIGNhblxuLy8gcmVhY2hcIiBSRVNUIHJvdXRlIFx1MjAxNCBgbHVhIGFnZW50cyAtLWpzb25gIGFscmVhZHkgZG9lcyB0aGUgY3JlZGVudGlhbC10by1cbi8vIGF1dGhvcml6YXRpb24tcHJvamVjdGlvbiByZXNvbHV0aW9uIChQUk8tMTcxMikgZm9yIGV2ZXJ5IGNyZWRlbnRpYWwgY2xhc3Ncbi8vIChBUEkga2V5LCB0eXBlZCBzY29wZWQga2V5LCByZW5ld2FibGUgc2Vzc2lvbikuIFJlaW1wbGVtZW50aW5nIHRoYXQgaW4gdGhlXG4vLyBNQ1Agd291bGQgZHVwbGljYXRlIGxvZ2ljIGx1YS1jbGkgb3ducy5cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG4vLyBgbHVhIGFnZW50c2Agd2Fsa3MgZXZlcnkgb3JnYW5pc2F0aW9uIHRoZSBjcmVkZW50aWFsIGNhbiBzZWUgYW5kLCBmb3IgYVxuLy8gc2Vzc2lvbiBsb2dpbiwgcmVmcmVzaGVzIHRoZSBzZXNzaW9uIGZpcnN0LiBNZWFzdXJlZCAyMDI2LTA5LTEyIG9uIGFcbi8vIDE0NC1vcmcgYWNjb3VudDogMThcdTIwMTMyNSBzLiBUaGUgYnVkZ2V0IG11c3QgY292ZXIgdGhhdC5cbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDYwXzAwMDtcblxuLyoqXG4gKiBSdW4gYGx1YSA8YXJncz5gIGFuZCByZXNvbHZlIHdpdGggaXRzIHN0ZG91dC5cbiAqXG4gKiBPbiBXaW5kb3dzIHRoZSBucG0gYmluIGlzIGEgYGx1YS5jbWRgIHNoaW0sIHdoaWNoIE5vZGUgKFx1MjI2NTE4LjIwIC8gXHUyMjY1MjAuMTIpXG4gKiByZWZ1c2VzIHRvIHNwYXduIHdpdGhvdXQgYSBzaGVsbDsgdGhlIGFyZ3MgYXJlIGZpeGVkIGxpdGVyYWxzIChubyB1c2VyXG4gKiBpbnB1dCksIHNvIGBzaGVsbDogdHJ1ZWAgdGhlcmUgaXMgc2FmZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzXG4gKiBAcGFyYW0ge3tzcGF3bkZuPzogdHlwZW9mIHNwYXduLCB0aW1lb3V0TXM/OiBudW1iZXIsIGxhYmVsPzogc3RyaW5nfX0gW29wdHNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuTHVhKGFyZ3MsIHsgc3Bhd25GbiA9IHNwYXduLCB0aW1lb3V0TXMgPSBERUZBVUxUX1RJTUVPVVRfTVMsIGxhYmVsID0gJ2x1YScgfSA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bkZuKCdsdWEnLCBhcmdzLCB7XG4gICAgICBzaGVsbDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyxcbiAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBMVUFfTk9fQkFOTkVSOiAnMScsIExVQV9OT19ISU5UUzogJzEnIH0sXG4gICAgfSk7XG4gICAgbGV0IHN0ZG91dCA9ICcnO1xuICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCAoZCkgPT4geyBzdGRvdXQgKz0gZC50b1N0cmluZygndXRmOCcpOyB9KTtcbiAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCAoZCkgPT4geyBzdGRlcnIgKz0gZC50b1N0cmluZygndXRmOCcpOyB9KTtcblxuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjaGlsZC5raWxsKCdTSUdURVJNJyk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfTogJ2x1YSAke2FyZ3Muam9pbignICcpfScgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCkpO1xuICAgIH0sIHRpbWVvdXRNcyk7XG5cbiAgICBjaGlsZC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHJlamVjdChuZXcgRXJyb3IoYCdsdWEgJHthcmdzLmpvaW4oJyAnKX0nIGV4aXRlZCAke2NvZGV9OiAke3N0ZGVyci50cmltKCl9YCkpO1xuICAgICAgZWxzZSByZXNvbHZlKHN0ZG91dCk7XG4gICAgfSk7XG4gICAgY2hpbGQub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGBsdWEgYWdlbnRzIC0tanNvbmAgb3V0cHV0IChsdWEtY2xpIFx1MjI2NSAzLjI4OiBhbiBhcnJheSBvZlxuICogQ3JlZGVudGlhbE9yZ2FuaXphdGlvbiByb3dzIFx1MjAxNCBgeyBvcmdJZCwgbmFtZT8sIGFyY2hpdmVkLCBkaXNjb3ZlcmVkVmlhLFxuICogYWdlbnRzOiBbeyBhZ2VudElkLCBuYW1lPywgdmlzaWJpbGl0eSwgZGlzcGxheVJvbGVzIH1dIH1gLCBzZWVcbiAqIHBhY2thZ2VzL2x1YS1jbGkvc3JjL3NlcnZpY2VzL2NyZWRlbnRpYWwtb3BlcmF0aW9uYWwtY29udGV4dC50cykgaW50byBhXG4gKiBjb21wYWN0IGFnZW50IGxpc3QuIE9sZGVyIGZsYXQgc2hhcGVzIGFyZSB0b2xlcmF0ZWQgZm9yIGZvcndhcmQtY29tcGF0LlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gcGFyc2VkXG4gKiBAcmV0dXJucyB7QXJyYXk8e2lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZ3xudWxsLCBvcmdJZDogc3RyaW5nfG51bGwsIG9yZ05hbWU6IHN0cmluZ3xudWxsLCB2aXNpYmlsaXR5OiBzdHJpbmd8bnVsbH0+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkFnZW50cyhwYXJzZWQpIHtcbiAgY29uc3Qgb2JqID0gLyoqIEB0eXBlIHthbnl9ICovIChwYXJzZWQpO1xuICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqIDogKG9iaj8uYWdlbnRzID8/IG9iaj8ub3JncyA/PyBbXSk7XG4gIGNvbnN0IGxvb2tzTGlrZU9yZ3MgPSBlbnRyaWVzLmxlbmd0aCA+IDAgJiYgZW50cmllc1swXSAmJiBBcnJheS5pc0FycmF5KGVudHJpZXNbMF0uYWdlbnRzKTtcblxuICBpZiAobG9va3NMaWtlT3Jncykge1xuICAgIHJldHVybiBlbnRyaWVzLmZsYXRNYXAoKG9yZykgPT4gKG9yZy5hZ2VudHMgPz8gW10pLm1hcCgoYSkgPT4gKHtcbiAgICAgIGlkOiBhLmFnZW50SWQgPz8gYS5pZCA/PyBhLl9pZCxcbiAgICAgIG5hbWU6IGEubmFtZSA/PyBudWxsLFxuICAgICAgb3JnSWQ6IG9yZy5vcmdJZCA/PyBvcmcuaWQgPz8gb3JnLl9pZCA/PyBudWxsLFxuICAgICAgb3JnTmFtZTogb3JnLm5hbWUgPz8gb3JnLnJlZ2lzdGVyZWROYW1lID8/IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBhLnZpc2liaWxpdHkgPz8gbnVsbCxcbiAgICB9KSkpO1xuICB9XG4gIHJldHVybiBlbnRyaWVzLm1hcCgoYSkgPT4gKHtcbiAgICBpZDogYS5hZ2VudElkID8/IGEuaWQgPz8gYS5faWQsXG4gICAgbmFtZTogYS5uYW1lID8/IG51bGwsXG4gICAgb3JnSWQ6IGEub3JnSWQgPz8gbnVsbCxcbiAgICBvcmdOYW1lOiBhLm9yZ05hbWUgPz8gbnVsbCxcbiAgICB2aXNpYmlsaXR5OiBhLnZpc2liaWxpdHkgPz8gbnVsbCxcbiAgfSkpO1xufVxuXG4vKipcbiAqIFJ1biBgbHVhIGFnZW50cyAtLWpzb24gLS1jaWAgYW5kIHJldHVybiB0aGUgZmxhdHRlbmVkIGFnZW50IGxpc3QuXG4gKlxuICogQHBhcmFtIHt7c3Bhd25Gbj86IHR5cGVvZiBzcGF3biwgbGFiZWw/OiBzdHJpbmd9fSBbb3B0c11cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RBZ2VudHNWaWFDbGkoeyBzcGF3bkZuLCBsYWJlbCA9ICdsaXN0X2FnZW50cycgfSA9IHt9KSB7XG4gIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHJ1bkx1YShbJ2FnZW50cycsICctLWpzb24nLCAnLS1jaSddLCB7IHNwYXduRm4sIGxhYmVsIH0pO1xuICBsZXQgcGFyc2VkO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2xhYmVsfTogY291bGQgbm90IHBhcnNlICdsdWEgYWdlbnRzIC0tanNvbicgb3V0cHV0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBmbGF0dGVuQWdlbnRzKHBhcnNlZCk7XG59XG4iLCAiaW1wb3J0IHsgbGlzdEFnZW50c1ZpYUNsaSB9IGZyb20gJy4uL3J1bi1sdWEubWpzJztcblxuLy8gU2hlbGxzIG91dCB0byBgbHVhIGFnZW50cyAtLWpzb24gLS1jaWAgKHNlZSBydW4tbHVhLm1qcyBmb3Igd2h5KS4gVGhlIENMSVxuLy8gZW1pdHMgb25lIHJvdyBwZXIgb3JnYW5pc2F0aW9uIHdpdGggYSBuZXN0ZWQgYGFnZW50c2AgYXJyYXk7IHdlIGZsYXR0ZW4uXG5cbmV4cG9ydCBjb25zdCBsaXN0QWdlbnRzID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ2xpc3RfYWdlbnRzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xpc3QgYWxsIEx1YSBhZ2VudHMgdGhlIGF1dGhlbnRpY2F0ZWQgY3JlZGVudGlhbCBjYW4gcmVhY2guIFJldHVybnMgYSBjb21wYWN0IGFycmF5IG9mIHtpZCwgbmFtZSwgb3JnSWQsIG9yZ05hbWUsIHZpc2liaWxpdHl9IGZsYXR0ZW5lZCBhY3Jvc3MgYWxsIG9yZ2FuaXNhdGlvbnMuIFNhbWUgZGF0YSBhcyBgbHVhIGFnZW50cyAtLWpzb25gIFx1MjAxNCBpdCByZXNvbHZlcyBldmVyeSBvcmdhbmlzYXRpb24sIHNvIG9uIGFjY291bnRzIHdpdGggbWFueSBvcmdzIHRoaXMgdGFrZXMgMjAgcyBvciBtb3JlOyBwcmVmZXIgZ2V0X2FnZW50IHdoZW4geW91IGFscmVhZHkga25vdyB0aGUgaWQuJyxcbiAgICBpbnB1dFNjaGVtYToge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIHJlcXVpcmVkOiBbXSxcbiAgICB9LFxuICB9LFxuICBhc3luYyBoYW5kbGVyKF9hcmdzLCBkZXBzID0ge30pIHtcbiAgICBjb25zdCBjb21wYWN0ID0gYXdhaXQgbGlzdEFnZW50c1ZpYUNsaSh7IHNwYXduRm46IGRlcHMuc3Bhd25GbiwgbGFiZWw6ICdsaXN0X2FnZW50cycgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkoY29tcGFjdCwgbnVsbCwgMikgfV0sXG4gICAgfTtcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgbGlzdEFnZW50c1ZpYUNsaSB9IGZyb20gJy4uL3J1bi1sdWEubWpzJztcblxuLy8gVGhlcmUgaXMgbm8gY29uc29saWRhdGVkIGBHRVQgL2RldmVsb3Blci9hZ2VudHMvOmFnZW50SWRgIHJvdXRlLCBhbmQgdGhlXG4vLyBwdWJsaWMgYC9wdWJsaWMvYWdlbnRzLzphZ2VudElkYCByb3V0ZSBpcyBvcmlnaW4tZ3VhcmRlZCAoYnJvd3NlciBvbmx5KS5cbi8vIFRoZSBhZ2VudCdzIGlkZW50aXR5IChpZCwgbmFtZSwgb3JnLCB2aXNpYmlsaXR5KSBJUyBpbiBgbHVhIGFnZW50cyAtLWpzb25gLFxuLy8gc28gd2Ugc2hlbGwgb3V0IGFuZCBmaWx0ZXIgXHUyMDE0IHNhbWUgcGF0aCBhcyBsaXN0X2FnZW50cy4gUGVyc29uYSwgbW9kZWwgYW5kXG4vLyBlbnYgbGl2ZSBiZWhpbmQgc2VwYXJhdGUgcGVyLXJlc291cmNlIHJvdXRlczsgdXNlIHRoZSBkZWRpY2F0ZWQgdG9vbHMgKG9yXG4vLyBgbHVhIHN0YXR1cyAtLWpzb25gIGluc2lkZSB0aGUgcHJvamVjdCkgZm9yIHRob3NlLlxuXG5leHBvcnQgY29uc3QgZ2V0QWdlbnQgPSB7XG4gIHNwZWM6IHtcbiAgICBuYW1lOiAnZ2V0X2FnZW50JyxcbiAgICBkZXNjcmlwdGlvbjogJ0xvb2sgdXAgb25lIEx1YSBhZ2VudCBieSBJRCBhbmQgcmV0dXJuIHtpZCwgbmFtZSwgb3JnSWQsIG9yZ05hbWUsIHZpc2liaWxpdHl9LiBGb3Igd2hhdCBpcyBsaXZlIHVzZSBnZXRfZGVwbG95bWVudF9zdGF0dXMgLyBsaXN0X3ByaW1pdGl2ZV92ZXJzaW9uczsgZm9yIGxvZ3MgdXNlIHRhaWxfbG9ncy4nLFxuICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWdlbnRJZDogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdBZ2VudCBJRCAodGhlIGBpZGAgZmllbGQgZnJvbSBsaXN0X2FnZW50czsgYWxzbyBgYWdlbnQuYWdlbnRJZGAgaW4gbHVhLnNraWxsLnlhbWwpJyB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbJ2FnZW50SWQnXSxcbiAgICB9LFxuICB9LFxuICBhc3luYyBoYW5kbGVyKHsgYWdlbnRJZCB9LCBkZXBzID0ge30pIHtcbiAgICBpZiAoIWFnZW50SWQpIHRocm93IG5ldyBFcnJvcignYWdlbnRJZCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IGxpc3RBZ2VudHNWaWFDbGkoeyBzcGF3bkZuOiBkZXBzLnNwYXduRm4sIGxhYmVsOiAnZ2V0X2FnZW50JyB9KTtcbiAgICBjb25zdCBtYXRjaCA9IGFnZW50cy5maW5kKChhKSA9PiBhLmlkID09PSBhZ2VudElkKSA/PyBudWxsO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRfYWdlbnQ6IG5vIGFnZW50IHdpdGggaWQgXCIke2FnZW50SWR9XCIgZm91bmQgaW4gdGhlIGF1dGhlbnRpY2F0ZWQgY3JlZGVudGlhbCdzIGFjY2Vzc2libGUgb3Jncy4gUnVuIGxpc3RfYWdlbnRzIHRvIHNlZSBhdmFpbGFibGUgYWdlbnRzLmApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IEpTT04uc3RyaW5naWZ5KG1hdGNoLCBudWxsLCAyKSB9XSxcbiAgICB9O1xuICB9LFxufTtcbiIsICIvLyBDcmVkZW50aWFsIHJlc29sdXRpb24gZm9yIHRoZSBNQ1Agc2VydmVyLiBSZXNvbHZlZCBvbiBFVkVSWSBjYWxsLCBub3QgYXRcbi8vIHNlcnZlciBzdGFydHVwIFx1MjAxNCBzdXBwb3J0cyB0aGUgZmxvdyB3aGVyZSBhIHVzZXIgcmUtcnVucyBgbHVhIGF1dGggY29uZmlndXJlYFxuLy8gbWlkLXNlc3Npb24uXG4vL1xuLy8gVGhlIGNoYWluIE1VU1QgbWF0Y2ggbHVhLWNsaSdzIGByZXNvbHZlUmVxdWVzdENyZWRlbnRpYWwoKWBcbi8vIChwYWNrYWdlcy9sdWEtY2xpL3NyYy9zZXJ2aWNlcy9yZXF1ZXN0LWNyZWRlbnRpYWwudHMsIGx1YS1jbGkgMy4zMy4wKTpcbi8vXG4vLyAgIDEuIExVQV9BUElfS0VZIGluIHRoZSBwcm9jZXNzIGVudmlyb25tZW50LiBsdWEtY2xpIGxvYWRzIGAuLy5lbnZgIGludG9cbi8vICAgICAgcHJvY2Vzcy5lbnYgZmlyc3QgKGBpbXBvcnQgJ2RvdGVudi9jb25maWcnYCksIHNvIGEgYC5lbnZgIHZhbHVlIGluIHRoZVxuLy8gICAgICB3b3JraW5nIGRpcmVjdG9yeSBpcyBwYXJ0IG9mIHRoaXMgdGllciBcdTIwMTQgaXQgYmVhdHMgYSBzdG9yZWQgc2Vzc2lvbi5cbi8vICAgMi4gVGhlIHJlbmV3YWJsZSBmaXJzdC1wYXJ0eSBzZXNzaW9uIGBsdWEgYXV0aCBjb25maWd1cmVgIChlbWFpbCArIE9UUClcbi8vICAgICAgd3JpdGVzIHRvIH4vLmx1YS1jbGkvc2Vzc2lvbnMvPGVudi1oYXNoPi5qc29uLiBUaGlzIGlzIHRoZSBERUZBVUxUXG4vLyAgICAgIGxvZ2luIHNpbmNlIGx1YS1jbGkgMy4yOSBhbmQgaXQgREVMRVRFUyB+Ly5sdWEtY2xpL2NyZWRlbnRpYWxzLCBzbyBhblxuLy8gICAgICBNQ1Agc2VydmVyIHRoYXQgb25seSByZWFkIHRoZSBjcmVkZW50aWFscyBmaWxlIGZhaWxlZCBmb3IgZXZlcnlcbi8vICAgICAgc2Vzc2lvbiB1c2VyLiBUaGUgZmlsZSBob2xkcyBhIEZpcmViYXNlIHJlZnJlc2ggdG9rZW47IHRoZSBiZWFyZXIgaXNcbi8vICAgICAgYSBzaG9ydC1saXZlZCBJRCB0b2tlbiBvYnRhaW5lZCBmcm9tIEdvb2dsZSdzIHNlY3VyZXRva2VuIGVuZHBvaW50LlxuLy8gICAzLiB+Ly5sdWEtY2xpL2NyZWRlbnRpYWxzIFx1MjAxNCBhIHBsYWluLXRleHQgQVBJIGtleSAodHlwZWQgYGFwaV88dXVpZD4uPDQzPmBcbi8vICAgICAgb3IgbGVnYWN5KSwgd3JpdHRlbiB3aGVuIHRoZSB1c2VyIHBpY2tzIHRoZSBBUEkta2V5IG9wdGlvbiBvZlxuLy8gICAgICBgbHVhIGF1dGggY29uZmlndXJlYC5cbi8vXG4vLyBUaGlzIGZpbGUgZGVsaWJlcmF0ZWx5IGR1cGxpY2F0ZXMgbGliL2NyZWRlbnRpYWxzLm1qcyBiZWNhdXNlIHRoZSBNQ1Bcbi8vIHNlcnZlciBpcyBhIHNlcGFyYXRlIG5wbSBwYWNrYWdlIGFuZCBjYW4ndCByZWFjaCBpbnRvIHRoZSBwbHVnaW4ncyBsaWIvLlxuXG5pbXBvcnQgeyByZWFkRmlsZSwgcmVhZGRpciwgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5cbmNvbnN0IERFRkFVTFRfQVBJX1VSTCA9ICdodHRwczovL2FwaS5oZXlsdWEuYWknO1xuY29uc3QgRklSRUJBU0VfUkVGUkVTSF9VUkwgPSAnaHR0cHM6Ly9zZWN1cmV0b2tlbi5nb29nbGVhcGlzLmNvbS92MS90b2tlbic7XG5jb25zdCBSRUZSRVNIX1RJTUVPVVRfTVMgPSAxNV8wMDA7XG5jb25zdCBSRUZSRVNIX1NLRVdfTVMgPSA2MF8wMDA7XG5cbi8vIEdvb2dsZSdzIHZlcmRpY3RzIHRoYXQgdGhlIHN0b3JlZCByZWZyZXNoIHRva2VuIGNhbiBuZXZlciB3b3JrIGFnYWluLlxuLy8gTWlycm9ycyBsdWEtY2xpJ3MgUkVKRUNURURfUkVGUkVTSF9SRUFTT05TIChzZXJ2aWNlcy9maXJlYmFzZS1zZXNzaW9uLnRzKS5cbmNvbnN0IFJFSkVDVEVEX1JFRlJFU0hfUkVBU09OUyA9IFtcbiAgJ1RPS0VOX0VYUElSRUQnLFxuICAnVVNFUl9ESVNBQkxFRCcsXG4gICdVU0VSX05PVF9GT1VORCcsXG4gICdJTlZBTElEX1JFRlJFU0hfVE9LRU4nLFxuICAnSU5WQUxJRF9HUkFOVF9UWVBFJyxcbiAgJ01JU1NJTkdfUkVGUkVTSF9UT0tFTicsXG5dO1xuXG4vLyBJbi1wcm9jZXNzIGNhY2hlIG9mIHJlZnJlc2hlZCBJRCB0b2tlbnMsIGtleWVkIGJ5IHNlc3Npb24gZmlsZSBwYXRoLlxuY29uc3QgdG9rZW5DYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqIEV4cG9ydGVkIGZvciB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRva2VuQ2FjaGUoKSB7XG4gIHRva2VuQ2FjaGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGRvdGVudi1zdHlsZSBmaWxlIGZvciBMVUFfQVBJX0tFWSB0aGUgd2F5IGRvdGVudiBkb2VzOiBvcHRpb25hbFxuICogYGV4cG9ydCBgIHByZWZpeCwgc3Vycm91bmRpbmcgc2luZ2xlL2RvdWJsZSBxdW90ZXMgc3RyaXBwZWQsIGEgdHJhaWxpbmdcbiAqIGAgIyBjb21tZW50YCBkcm9wcGVkIGZyb20gdW5xdW90ZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURvdGVudkFwaUtleShjb250ZW50KSB7XG4gIGZvciAoY29uc3QgcmF3TGluZSBvZiBjb250ZW50LnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICBjb25zdCBtID0gcmF3TGluZS5tYXRjaCgvXlxccyooPzpleHBvcnRcXHMrKT9MVUFfQVBJX0tFWVxccyo9XFxzKiguKikkLyk7XG4gICAgaWYgKCFtKSBjb250aW51ZTtcbiAgICBsZXQgdmFsdWUgPSBtWzFdLnRyaW0oKTtcbiAgICBjb25zdCBxdW90ZWQgPSB2YWx1ZS5tYXRjaCgvXihbJ1wiYF0pKC4qPylcXDEoPzpcXHMrIy4qKT9cXHMqJC8pO1xuICAgIGlmIChxdW90ZWQpIHZhbHVlID0gcXVvdGVkWzJdO1xuICAgIGVsc2UgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXHMrIy4qJC8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIHZhbHVlIHx8IG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTG9jYXRlIHRoZSBsdWEtY2xpIHNlc3Npb24gZmlsZSBmb3IgdGhlIEFQSSBiYXNlIFVSTCBpbiB1c2UuIGx1YS1jbGkgbmFtZXNcbiAqIHRoZSBmaWxlIGJ5IGEgaGFzaCBvZiAoYXBpVXJsLCBhdXRoVXJsLCBmaXJlYmFzZVdlYkFwaUtleSk7IHJhdGhlciB0aGFuXG4gKiByZWNvbXB1dGUgaXQgd2Ugc2NhbiB0aGUgZGlyZWN0b3J5IGZvciBhIGBmaXJlYmFzZS1zZXNzaW9uYCByZWNvcmQgd2hvc2VcbiAqIGBhcGlVcmxgIG1hdGNoZXMsIG5ld2VzdCBmaXJzdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7cGF0aDogc3RyaW5nLCBzZXNzaW9uOiBvYmplY3R9fG51bGw+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFNlc3Npb25GaWxlKHsgc2Vzc2lvbnNEaXIsIGFwaVVybCB9KSB7XG4gIGxldCBuYW1lcztcbiAgdHJ5IHtcbiAgICBuYW1lcyA9IGF3YWl0IHJlYWRkaXIoc2Vzc2lvbnNEaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG4gIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgIGlmICghbmFtZS5lbmRzV2l0aCgnLmpzb24nKSB8fCBuYW1lLnN0YXJ0c1dpdGgoJy4nKSkgY29udGludWU7XG4gICAgY29uc3QgcGF0aCA9IGpvaW4oc2Vzc2lvbnNEaXIsIG5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCAndXRmOCcpKTtcbiAgICAgIGlmIChzZXNzaW9uPy5raW5kICE9PSAnZmlyZWJhc2Utc2Vzc2lvbicgfHwgc2Vzc2lvbj8udmVyc2lvbiAhPT0gMSkgY29udGludWU7XG4gICAgICBpZiAodHlwZW9mIHNlc3Npb24ucmVmcmVzaFRva2VuICE9PSAnc3RyaW5nJyB8fCAhc2Vzc2lvbi5yZWZyZXNoVG9rZW4pIGNvbnRpbnVlO1xuICAgICAgaWYgKHR5cGVvZiBzZXNzaW9uLmZpcmViYXNlV2ViQXBpS2V5ICE9PSAnc3RyaW5nJyB8fCAhc2Vzc2lvbi5maXJlYmFzZVdlYkFwaUtleSkgY29udGludWU7XG4gICAgICBpZiAoc2Vzc2lvbi5hcGlVcmwgIT09IGFwaVVybCkgY29udGludWU7XG4gICAgICBjb25zdCB7IG10aW1lTXMgfSA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgICBjYW5kaWRhdGVzLnB1c2goeyBwYXRoLCBzZXNzaW9uLCBtdGltZU1zIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdW5yZWFkYWJsZSAvIG1hbGZvcm1lZCBcdTIwMTQgc2tpcCwgbHVhLWNsaSB3aWxsIGNvbXBsYWluIG9uIGl0cyBvd25cbiAgICB9XG4gIH1cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY2FuZGlkYXRlcy5zb3J0KChhLCBiKSA9PiBiLm10aW1lTXMgLSBhLm10aW1lTXMpO1xuICByZXR1cm4geyBwYXRoOiBjYW5kaWRhdGVzWzBdLnBhdGgsIHNlc3Npb246IGNhbmRpZGF0ZXNbMF0uc2Vzc2lvbiB9O1xufVxuXG4vKipcbiAqIEV4Y2hhbmdlIHRoZSBzdG9yZWQgcmVmcmVzaCB0b2tlbiBmb3IgYSBGaXJlYmFzZSBJRCB0b2tlbiAodGhlIGJlYXJlclxuICogbHVhLWFwaSBhY2NlcHRzKS4gQ2FjaGVkIGluLXByb2Nlc3MgdW50aWwgNjAgcyBiZWZvcmUgZXhwaXJ5LiBUaGUgc2Vzc2lvblxuICogZmlsZSBpcyBuZXZlciB3cml0dGVuOiBsdWEtY2xpIG93bnMgaXQuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gYmVhcmVyIHRva2VuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoU2Vzc2lvbkJlYXJlcih7IHBhdGgsIHNlc3Npb24sIGZldGNoRm4gPSBnbG9iYWxUaGlzLmZldGNoLCBub3cgPSBEYXRlLm5vdyB9KSB7XG4gIGNvbnN0IGNhY2hlZCA9IHRva2VuQ2FjaGUuZ2V0KHBhdGgpO1xuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5leHBpcmVzQXQgLSBub3coKSA+IFJFRlJFU0hfU0tFV19NUykgcmV0dXJuIGNhY2hlZC5pZFRva2VuO1xuXG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFRlJFU0hfVElNRU9VVF9NUyk7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZmV0Y2hGbihgJHtGSVJFQkFTRV9SRUZSRVNIX1VSTH0/a2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb24uZmlyZWJhc2VXZWJBcGlLZXkpfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsIHJlZnJlc2hfdG9rZW46IHNlc3Npb24ucmVmcmVzaFRva2VuIH0pLnRvU3RyaW5nKCksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTUNQX0FVVEhfVU5BVkFJTEFCTEU6IGNvdWxkIG5vdCByZWZyZXNoIHRoZSBsdWEtY2xpIHNlc3Npb24gKCR7ZXJyPy5uYW1lID09PSAnQWJvcnRFcnJvcicgPyAndGltZWQgb3V0JyA6IGVyci5tZXNzYWdlfSkuIGAgK1xuICAgICAgJ0NoZWNrIHlvdXIgbmV0d29yaywgb3Igc2V0IExVQV9BUElfS0VZIHRvIGJ5cGFzcyB0aGUgc2Vzc2lvbi4nXG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9XG5cbiAgaWYgKCFyZXMub2spIHtcbiAgICBsZXQgcmVhc29uID0gcmVzLnN0YXR1c1RleHQgPz8gU3RyaW5nKHJlcy5zdGF0dXMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBib2R5Py5lcnJvcj8ubWVzc2FnZTtcbiAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZSkgcmVhc29uID0gbWVzc2FnZS5zcGxpdCgnOicpWzBdLnRyaW0oKTtcbiAgICB9IGNhdGNoIHsgLyoga2VlcCBzdGF0dXNUZXh0ICovIH1cbiAgICBjb25zdCByZWplY3RlZCA9IHJlcy5zdGF0dXMgPCA1MDAgJiYgUkVKRUNURURfUkVGUkVTSF9SRUFTT05TLmZpbmQoKHIpID0+IHJlYXNvbi50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHIpKTtcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1DUF9BVVRIX1NUQUxFOiB5b3VyIGx1YS1jbGkgc2Vzc2lvbiB3YXMgc2lnbmVkIG91dCAoJHtyZWplY3RlZH0pLiBgICtcbiAgICAgICAgJ1NpZ25pbmcgb3V0IG9mIHRoZSBMdWEgZGFzaGJvYXJkLCBkZXNrdG9wIG9yIG1vYmlsZSBhcHAgYWxzbyBlbmRzIENMSSBzZXNzaW9ucy4gJyArXG4gICAgICAgICdSdW4gYGx1YSBhdXRoIGNvbmZpZ3VyZWAgaW4gYSB0ZXJtaW5hbCB0byBzaWduIGluIGFnYWluLidcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgTUNQX0FVVEhfVU5BVkFJTEFCTEU6IGx1YS1jbGkgc2Vzc2lvbiByZWZyZXNoIGZhaWxlZCAoJHtyZXMuc3RhdHVzfSAke3JlYXNvbn0pLiBSZXRyeSBpbiBhIG1vbWVudC5gKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpO1xuICBjb25zdCBpZFRva2VuID0gYm9keT8uaWRfdG9rZW47XG4gIGNvbnN0IGV4cGlyZXNJbiA9IE51bWJlcihib2R5Py5leHBpcmVzX2luKTtcbiAgaWYgKHR5cGVvZiBpZFRva2VuICE9PSAnc3RyaW5nJyB8fCAhaWRUb2tlbiB8fCAhTnVtYmVyLmlzRmluaXRlKGV4cGlyZXNJbikgfHwgZXhwaXJlc0luIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01DUF9BVVRIX1VOQVZBSUxBQkxFOiB0aGUgc2Vzc2lvbiByZWZyZXNoIHJldHVybmVkIGFuIGludmFsaWQgdG9rZW4uIFJ1biBgbHVhIGF1dGggY29uZmlndXJlYCBhZ2Fpbi4nKTtcbiAgfVxuICB0b2tlbkNhY2hlLnNldChwYXRoLCB7IGlkVG9rZW4sIGV4cGlyZXNBdDogbm93KCkgKyBleHBpcmVzSW4gKiAxMDAwIH0pO1xuICByZXR1cm4gaWRUb2tlbjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBiZWFyZXIgdG9rZW4gZXZlcnkgbHVhLWFwaSByZXF1ZXN0IHNob3VsZCBjYXJyeS5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICogQHRocm93cyB7RXJyb3J9IE1DUF9BVVRIX1NUQUxFIHdoZW4gbm8gY3JlZGVudGlhbCByZXNvbHZlcyBmcm9tIGFueSB0aWVyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpS2V5KHtcbiAgZW52ID0gcHJvY2Vzcy5lbnYsXG4gIGNyZWRlbnRpYWxzUGF0aCA9IGVudi5MVUFfQ1JFREVOVElBTFNfUEFUSCA/PyBqb2luKGhvbWVkaXIoKSwgJy5sdWEtY2xpJywgJ2NyZWRlbnRpYWxzJyksXG4gIHNlc3Npb25zRGlyID0gZW52LkxVQV9TRVNTSU9OU19ESVIgPz8gam9pbihkaXJuYW1lKGNyZWRlbnRpYWxzUGF0aCksICdzZXNzaW9ucycpLFxuICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuICBhcGlVcmwgPSBlbnYuTFVBX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMLFxuICBmZXRjaEZuID0gZ2xvYmFsVGhpcy5mZXRjaCxcbiAgbm93ID0gRGF0ZS5ub3csXG59ID0ge30pIHtcbiAgLy8gVGllciAxYTogcHJvY2VzcyBlbnZpcm9ubWVudFxuICBpZiAoZW52LkxVQV9BUElfS0VZICYmIGVudi5MVUFfQVBJX0tFWS50cmltKCkpIHJldHVybiBlbnYuTFVBX0FQSV9LRVkudHJpbSgpO1xuXG4gIC8vIFRpZXIgMWI6IC5lbnYgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChsdWEtY2xpIGxvYWRzIGl0IGludG8gcHJvY2Vzcy5lbnZcbiAgLy8gYmVmb3JlIHJlYWRpbmcgTFVBX0FQSV9LRVksIHNvIGl0IHJhbmtzIGFib3ZlIHRoZSBzdG9yZWQgc2Vzc2lvbilcbiAgdHJ5IHtcbiAgICBjb25zdCBmcm9tRG90ZW52ID0gcGFyc2VEb3RlbnZBcGlLZXkoYXdhaXQgcmVhZEZpbGUoam9pbihjd2QsICcuZW52JyksICd1dGY4JykpO1xuICAgIGlmIChmcm9tRG90ZW52KSByZXR1cm4gZnJvbURvdGVudjtcbiAgfSBjYXRjaCB7IC8qIG5vIC5lbnYgXHUyMDE0IGZhbGwgdGhyb3VnaCAqLyB9XG5cbiAgLy8gVGllciAyOiByZW5ld2FibGUgZmlyc3QtcGFydHkgc2Vzc2lvblxuICBjb25zdCBmb3VuZCA9IGF3YWl0IGZpbmRTZXNzaW9uRmlsZSh7IHNlc3Npb25zRGlyLCBhcGlVcmwgfSk7XG4gIGlmIChmb3VuZCkgcmV0dXJuIHJlZnJlc2hTZXNzaW9uQmVhcmVyKHsgLi4uZm91bmQsIGZldGNoRm4sIG5vdyB9KTtcblxuICAvLyBUaWVyIDM6IH4vLmx1YS1jbGkvY3JlZGVudGlhbHMgKHBsYWluIHRleHQgQVBJIGtleSlcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSAoYXdhaXQgcmVhZEZpbGUoY3JlZGVudGlhbHNQYXRoLCAndXRmOCcpKS50cmltKCk7XG4gICAgaWYgKHJhdykge1xuICAgICAgaWYgKHJhdy5zdGFydHNXaXRoKCd7JykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICAgICAgaWYgKHBhcnNlZD8uYXBpS2V5KSByZXR1cm4gcGFyc2VkLmFwaUtleTtcbiAgICAgICAgfSBjYXRjaCB7IC8qIG5vdCBKU09OIGRlc3BpdGUgbGVhZGluZyBicmFjZSAqLyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgfSBjYXRjaCB7IC8qIG1pc3NpbmcgLyB1bnJlYWRhYmxlIFx1MjAxNCBmYWxsIHRocm91Z2ggKi8gfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnTUNQX0FVVEhfU1RBTEU6IE5vIGx1YS1jbGkgY3JlZGVudGlhbHMgZm91bmQgaW4gTFVBX0FQSV9LRVksIC5lbnYsIH4vLmx1YS1jbGkvc2Vzc2lvbnMsIG9yIH4vLmx1YS1jbGkvY3JlZGVudGlhbHMuICcgK1xuICAgICdSdW4gYGx1YSBhdXRoIGNvbmZpZ3VyZWAgaW4gYSB0ZXJtaW5hbCAob3IgL2x1YS1hdXRoIGluIENsYXVkZSBDb2RlKS4nXG4gICk7XG59XG4iLCAiLy8gVGhpbiBIVFRQIHdyYXBwZXIgYXJvdW5kIGx1YS1hcGkuIFBlciB0ZWNoIHNwZWMgXHUwMEE3OC5cbi8vXG4vLyBXZSBkbyBOT1QgaW1wb3J0IGx1YS1jbGkncyBIdHRwQ2xpZW50IGNsYXNzZXMgYXQgcnVudGltZSAod291bGQgZm9yY2Vcbi8vIHRoZSBlbnRpcmUgbHVhLWNsaSBwYWNrYWdlIHRvIGJlIGJ1bmRsZWQpLiBJbnN0ZWFkLCB0aGlzIG1pbmltYWwgY2xpZW50XG4vLyBoaXRzIHRoZSBzYW1lIFJFU1QgZW5kcG9pbnRzIGx1YS1jbGkgZG9lcy4gRXZlcnkgcm91dGUsIHF1ZXJ5IHBhcmFtZXRlclxuLy8gYW5kIGVudmVsb3BlIHVzZWQgYnkgdGhlIHRvb2xzIGlzIHZlcmlmaWVkIGFnYWluc3QgcGFja2FnZXMvbHVhLWFwaVxuLy8gKGNvbnRyb2xsZXJzL2RldmVsb3Blci8qKiwgZHRvLyoqKSBcdTIwMTQgc2VlIHJlc3BvbnNlLXNoYXBlcy5tanMuXG5cbmltcG9ydCB7IHJlc29sdmVBcGlLZXkgfSBmcm9tICcuL2F1dGgubWpzJztcblxuY29uc3QgREVGQVVMVF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5oZXlsdWEuYWknO1xuY29uc3QgREVGQVVMVF9USU1FT1VUX01TID0gMTBfMDAwO1xuXG4vLyBTY29wZSBlYWNoIHJvdXRlIGZhbWlseSB0aGUgdG9vbHMgY2FsbCBhY3R1YWxseSByZXF1aXJlcyBcdTIwMTQgcmVhZCBmcm9tIHRoZVxuLy8gYEBSZXF1aXJlU2NvcGUoLi4uKWAgZGVjb3JhdG9yIG9uIGV2ZXJ5IEdFVCB0aGUgdG9vbHMgaGl0LCB1bmRlclxuLy8gbHVhLWNvcmUtc2VydmljZXMgcGFja2FnZXMvbHVhLWFwaS9zcmMvY29udHJvbGxlcnMvZGV2ZWxvcGVyLzpcbi8vICAgc2tpbGxzL2Jhc2UuY29udHJvbGxlci50cywgd2ViaG9va3MvYmFzZS5jb250cm9sbGVyLnRzLFxuLy8gICBqb2JzL2Jhc2UuY29udHJvbGxlci50cywgdHJpZ2dlcnMvYmFzZS5jb250cm9sbGVyLnRzLFxuLy8gICBwcmVwcm9jZXNzb3JzL2Jhc2UuY29udHJvbGxlci50cywgcG9zdHByb2Nlc3NvcnMvYmFzZS5jb250cm9sbGVyLnRzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgJ2F1dG9tYXRpb25zOnJlYWQnIChsaXN0ICsgOmlkL3ZlcnNpb25zKVxuLy8gICB3b3JrZmxvd3MvYmFzZS5jb250cm9sbGVyLnRzICAgXHUyMTkyICd3b3JrZmxvd3M6cmVhZCcgICAoR0VUIDphZ2VudElkLCBHRVQgOmFnZW50SWQvOndvcmtmbG93SWQvdmVyc2lvbnMpXG4vLyAgIHBlcnNvbmEvYmFzZS5jb250cm9sbGVyLnRzICAgICBcdTIxOTIgJ2FnZW50czpyZWFkJyAgICAgIChHRVQgOmFnZW50SWQvcGVyc29uYS92ZXJzaW9ucylcbi8vICAgYmFzZS5jb250cm9sbGVyLnRzICAgICAgICAgICAgIFx1MjE5MiAna25vd2xlZGdlOnJlYWQnICAgKEdFVCBhZ2VudHMvOmFnZW50SWQvbG9ncylcbi8vIFdvcmtmbG93cyBhcmUgTk9UIHVuZGVyIGF1dG9tYXRpb25zOnJlYWQgXHUyMDE0IHRoZXkgaGF2ZSB0aGVpciBvd24gc2NvcGUgcGFpclxuLy8gKHdvcmtmbG93czpyZWFkIC8gd29ya2Zsb3dzOndyaXRlKS5cbmV4cG9ydCBjb25zdCBST1VURV9TQ09QRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgc2tpbGxzOiAnYXV0b21hdGlvbnM6cmVhZCcsXG4gIHdlYmhvb2tzOiAnYXV0b21hdGlvbnM6cmVhZCcsXG4gIGpvYnM6ICdhdXRvbWF0aW9uczpyZWFkJyxcbiAgdHJpZ2dlcnM6ICdhdXRvbWF0aW9uczpyZWFkJyxcbiAgcHJlcHJvY2Vzc29yczogJ2F1dG9tYXRpb25zOnJlYWQnLFxuICBwb3N0cHJvY2Vzc29yczogJ2F1dG9tYXRpb25zOnJlYWQnLFxuICB3b3JrZmxvd3M6ICd3b3JrZmxvd3M6cmVhZCcsXG4gIHBlcnNvbmE6ICdhZ2VudHM6cmVhZCcsXG4gIGxvZ3M6ICdrbm93bGVkZ2U6cmVhZCcsXG59KTtcblxuY29uc3QgUk9VVEVfU0NPUEVfU1VNTUFSWSA9XG4gICdza2lsbHMvd2ViaG9va3Mvam9icy90cmlnZ2Vycy9wcmVwcm9jZXNzb3JzL3Bvc3Rwcm9jZXNzb3JzIG5lZWQgYXV0b21hdGlvbnM6cmVhZCwgd29ya2Zsb3dzIG5lZWQgJyArXG4gICd3b3JrZmxvd3M6cmVhZCwgcGVyc29uYSBuZWVkcyBhZ2VudHM6cmVhZCwgbG9ncyBuZWVkIGtub3dsZWRnZTpyZWFkJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEFQSSBwYXRoICh3aXRoIGxlYWRpbmcgc2xhc2gpXG4gKiBAcGFyYW0ge3ttZXRob2Q/OiBzdHJpbmcsIGJvZHk/OiBvYmplY3QsIHF1ZXJ5PzogUmVjb3JkPHN0cmluZyxzdHJpbmd8bnVtYmVyPiwgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaCwgYmFzZVVybD86IHN0cmluZywgdGltZW91dE1zPzogbnVtYmVyfX0gW29wdHNdXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlSZXF1ZXN0KHBhdGgsIHtcbiAgbWV0aG9kID0gJ0dFVCcsXG4gIGJvZHksXG4gIHF1ZXJ5LFxuICBmZXRjaEZuID0gZ2xvYmFsVGhpcy5mZXRjaCxcbiAgYmFzZVVybCA9IHByb2Nlc3MuZW52LkxVQV9BUElfVVJMIHx8IERFRkFVTFRfQkFTRV9VUkwsXG4gIHRpbWVvdXRNcyA9IERFRkFVTFRfVElNRU9VVF9NUyxcbn0gPSB7fSkge1xuICBjb25zdCBhcGlLZXkgPSBhd2FpdCByZXNvbHZlQXBpS2V5KCk7XG4gIC8vIEpvaW4gYnkgc3RyaW5nIGNvbmNhdGVuYXRpb24sIE5PVCBgbmV3IFVSTChwYXRoLCBiYXNlVXJsKWA6IHRoZSBXSEFUV0dcbiAgLy8gcmVzb2x2ZXIgdHJlYXRzIGEgbGVhZGluZy1zbGFzaCBwYXRoIGFzIGhvc3QtYWJzb2x1dGUgYW5kIHdvdWxkIGRyb3AgYW55XG4gIC8vIHBhdGggcHJlZml4IG9uIExVQV9BUElfVVJMIChodHRwczovL2hvc3QvYXBpICsgL2RldmVsb3Blci94IFx1MjE5MlxuICAvLyBodHRwczovL2hvc3QvZGV2ZWxvcGVyL3gpLiBgcGF0aGAgYWx3YXlzIHN0YXJ0cyB3aXRoICcvJywgc28gc3RyaXAgb25lXG4gIC8vIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGJhc2UgYW5kIGNvbmNhdGVuYXRlLlxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGJhc2VVcmwucmVwbGFjZSgvXFwvJC8sICcnKSArIHBhdGgpO1xuICBpZiAocXVlcnkpIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KSkgdXJsLnNlYXJjaFBhcmFtcy5zZXQoaywgU3RyaW5nKHYpKTtcblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0TXMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hGbih1cmwudG9TdHJpbmcoKSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1gtTHVhLUNsaWVudCc6ICdjbGF1ZGUtcGx1Z2luLzEuMTMuMCcsXG4gICAgICB9LFxuICAgICAgYm9keTogYm9keSA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogdW5kZWZpbmVkLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ01DUF9BVVRIX1NUQUxFOiBsdWEtYXBpIHJldHVybmVkIDQwMS4gVGhlIGNyZWRlbnRpYWwgaXMgbWlzc2luZywgZXhwaXJlZCwgb3IgdGhlIHNlc3Npb24gd2FzIHNpZ25lZCBvdXQgJyArXG4gICAgICAgICcoc2lnbmluZyBvdXQgb2YgdGhlIEx1YSBkYXNoYm9hcmQgb3IgYXBwcyBhbHNvIGVuZHMgQ0xJIHNlc3Npb25zKS4gUnVuIGBsdWEgYXV0aCBjb25maWd1cmVgIGluIGEgdGVybWluYWwsICcgK1xuICAgICAgICAnb3IgcmUtcnVuIC9sdWEtZG9jdG9yLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1DUF9GT1JCSURERU46IGx1YS1hcGkgcmV0dXJuZWQgNDAzIGZvciAke3BhdGh9LiBUaGUgY3JlZGVudGlhbCBjYW5ub3QgYWNjZXNzIHRoaXMgYWdlbnQgb3Igb3JnLCBvciBpdCBsYWNrcyBgICtcbiAgICAgICAgYHRoZSByb3V0ZSBzY29wZSAoJHtST1VURV9TQ09QRV9TVU1NQVJZfSBcdTIwMTQgdHlwZWQga2V5cyBhcmUgc2NvcGVkIHRvIHRoZSBhZ2VudHMgYW5kIHJvbGUgY2hvc2VuIGF0IGAgK1xuICAgICAgICAnYGx1YSBhdXRoIGNvbmZpZ3VyZWApLiBSZS1ydW4gL2x1YS1kb2N0b3Igb3IgY2hlY2sgdGhlIExVQV9BUElfS0VZIGVudiB2YXIuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIC8vIFRyeSB0byBwYXJzZSBsdWEtYXBpJ3Mgc3RydWN0dXJlZCBlcnJvciBlbnZlbG9wZTpcbiAgICAgIC8vICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IHsgbWVzc2FnZSwgc3RhdHVzQ29kZSwgY29kZT8sIC4uLiB9IH1cbiAgICAgIC8vIEZhbGxzIGJhY2sgdG8gcmF3IHRleHQgb24gcGFyc2UgZmFpbHVyZSAoZS5nLiBwcm94eSA1MDIgd2l0aCBIVE1MIGJvZHkpLlxuICAgICAgY29uc3QgcmF3ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgIGxldCBmcmllbmRseU1zZyA9IHJhdztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgZnJpZW5kbHlNc2cgPSBwYXJzZWQ/LmVycm9yPy5tZXNzYWdlID8/IHBhcnNlZD8ubWVzc2FnZSA/PyByYXc7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBwYXJzZWQ/LmVycm9yPy5jb2RlO1xuICAgICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUgJiYgIVN0cmluZyhmcmllbmRseU1zZykuaW5jbHVkZXMoY29kZSkpIGZyaWVuZGx5TXNnID0gYCR7Y29kZX06ICR7ZnJpZW5kbHlNc2d9YDtcbiAgICAgIH0gY2F0Y2ggeyAvKiBub3QgSlNPTjsgcmF3IGlzIGZpbmUgKi8gfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsdWEtYXBpICR7cmVzLnN0YXR1c306ICR7ZnJpZW5kbHlNc2d9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB0aHJvdyBuZXcgRXJyb3IoYE1DUF9USU1FT1VUOiAke3BhdGh9IGRpZCBub3QgcmVzcG9uZCBpbiAke3RpbWVvdXRNc31tc2ApO1xuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9XG59XG4iLCAiLy8gUGVyLXR5cGUgcmVzcG9uc2Utc2hhcGUgZXh0cmFjdG9ycy5cbi8vXG4vLyBsdWEtYXBpJ3MgZGV2ZWxvcGVyIGVuZHBvaW50cyBoYXZlIElOQ09OU0lTVEVOVCByZXNwb25zZSBzaGFwZXMgYWNyb3NzXG4vLyBwcmltaXRpdmUgdHlwZXMuIFZlcmlmaWVkIGFnYWluc3QgcGFja2FnZXMvbHVhLWFwaS9zcmMvZHRvLyouZHRvLnRzIGFuZFxuLy8gcGFja2FnZXMvbHVhLWFwaS9zcmMvY29udHJvbGxlcnMvZGV2ZWxvcGVyLyoqL2Jhc2UuY29udHJvbGxlci50cywgcGx1c1xuLy8gcGFja2FnZXMvbHVhLWNsaS9zcmMvaW50ZXJmYWNlcy93b3JrZmxvd3MudHMgKGx1YS1jbGkgMy4zMy4wKTpcbi8vXG4vLyAgIFNraWxscyAgICAgICAgIEdFVCAvZGV2ZWxvcGVyL3NraWxscy86YWdlbnRJZCAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBza2lsbHM6IFNraWxsRHRvW10gfVxuLy8gICAgICAgICAgICAgICAgICBHRVQgL2RldmVsb3Blci9za2lsbHMvOmFnZW50SWQvOnNraWxsSWQvdmVyc2lvbnMgICAgXHUyMTkyIHsgdmVyc2lvbnM6IFt7IHZlcnNpb24sIGNyZWF0ZWREYXRlLCBpc0N1cnJlbnQsIC4uLiB9XSB9XG4vLyAgIFdlYmhvb2tzICAgICAgIEdFVCAvZGV2ZWxvcGVyL3dlYmhvb2tzLzphZ2VudElkICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiB7IHdlYmhvb2tzIH0gfVxuLy8gICAgICAgICAgICAgICAgICBHRVQgLi4uLzp3ZWJob29rSWQvdmVyc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgc3VjY2VzcywgZGF0YTogeyB2ZXJzaW9uczogW3sgdmVyc2lvbiwgd2ViaG9va0lkLCBjcmVhdGVkQXQsIGlzQWN0aXZlIH1dLCBhY3RpdmVWZXJzaW9uSWQ/IH0gfVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VydmljZXMvZGV2ZWxvcGVyLndlYmhvb2suc2VydmljZS50cyBzZXRzIGB3ZWJob29rSWQ6IHYuaWRgIFx1MjAxNCB0aGVcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gUk9XIGlkIHVuZGVyIGEgbWlzbmFtZWQga2V5OyB0aGVyZSBpcyBubyB2ZXJzaW9uSWQvaWQsIHNvXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSWQoKSBpcyBudWxsIGFuZCB0aGUgZW52ZWxvcGUncyBhY3RpdmVWZXJzaW9uSWQgaXMgdGhlIG9ubHkgaWQpXG4vLyAgIEpvYnMgICAgICAgICAgIEdFVCAvZGV2ZWxvcGVyL2pvYnMvOmFnZW50SWQgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiB7IGpvYnMgfSB9XG4vLyAgICAgICAgICAgICAgICAgIEdFVCAuLi4vOmpvYklkL3ZlcnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiBKb2JWZXJzaW9uRHRvW10gfSAgIFx1MjE5MCBhcnJheSB1bmRlciBkYXRhOyBgYWN0aXZlYFxuLy8gICBUcmlnZ2VycyAgICAgICBHRVQgL2RldmVsb3Blci90cmlnZ2Vycy86YWdlbnRJZCAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgc3VjY2VzcywgZGF0YTogeyB0cmlnZ2VycyB9IH1cbi8vICAgICAgICAgICAgICAgICAgR0VUIC4uLi86dHJpZ2dlcklkL3ZlcnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgdmVyc2lvbnM6IFt7IHZlcnNpb24sIHZlcnNpb25JZCwgY3JlYXRlZEF0LCBpc0FjdGl2ZSB9XSwgYWN0aXZlVmVyc2lvbklkPyB9IH1cbi8vICAgUHJlcHJvY2Vzc29ycyAgR0VUIC9kZXZlbG9wZXIvcHJlcHJvY2Vzc29ycy86YWdlbnRJZCAgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgcHJlcHJvY2Vzc29ycyB9IH1cbi8vICAgICAgICAgICAgICAgICAgR0VUIC4uLi86cHJlcHJvY2Vzc29ySWQvdmVyc2lvbnMgICAgICAgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgdmVyc2lvbnM6IFt7IHZlcnNpb25JZCwgdmVyc2lvbiwgaXNBY3RpdmUsIGNyZWF0ZWRBdCB9XSwgYWN0aXZlVmVyc2lvbklkPyB9IH1cbi8vICAgUG9zdHByb2Nlc3NvcnMgR0VUIC9kZXZlbG9wZXIvcG9zdHByb2Nlc3NvcnMvOmFnZW50SWQgICAgICAgICAgICAgIFx1MjE5MiB7IHN1Y2Nlc3MsIGRhdGE6IHsgcG9zdHByb2Nlc3NvcnMgfSB9XG4vLyAgICAgICAgICAgICAgICAgIEdFVCAuLi4vOnBvc3Rwcm9jZXNzb3JJZC92ZXJzaW9ucyAgICAgICAgICAgICAgICAgICBcdTIxOTIgc2FtZSBmYW1pbHkgYXMgcHJlcHJvY2Vzc29yc1xuLy8gICBXb3JrZmxvd3MgICAgICBHRVQgL2RldmVsb3Blci93b3JrZmxvd3MvOmFnZW50SWQgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgc3VjY2VzcywgZGF0YTogeyB3b3JrZmxvd3MgfSB9ICAgKGNvZGUvc2NyaXB0IHByb2plY3RlZCBvdXQpXG4vLyAgICAgICAgICAgICAgICAgIEdFVCAuLi4vOndvcmtmbG93SWQvdmVyc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyBzdWNjZXNzLCBkYXRhOiBXb3JrZmxvd1ZlcnNpb25bXSB9ICAgXHUyMTkwIGFycmF5IHVuZGVyIGRhdGE7IGBhY3RpdmVgXG4vLyAgIFBlcnNvbmEgICAgICAgIEdFVCAvZGV2ZWxvcGVyL2FnZW50cy86YWdlbnRJZC9wZXJzb25hL3ZlcnNpb25zICAgICBcdTIxOTIgeyBzdGF0dXMsIG1lc3NhZ2UsIHZlcnNpb25zOiBbeyB2ZXJzaW9uOiBudW1iZXIsIGNyZWF0ZWREYXRlOiBudW1iZXIsIGlzQ3VycmVudCwgcGVyc29uYSB9XSB9XG4vL1xuLy8gTm8gdmVyc2lvbiBEVE8gY2FycmllcyBgZGVwbG95ZWRBdGAgb3IgYHNvdXJjZUhhc2hgLiBUaGUgXCJsaXZlXCIgZmxhZyBpc1xuLy8gYGlzQ3VycmVudGAgKHNraWxsLCBwZXJzb25hKSwgYGFjdGl2ZWAgKGpvYiwgd29ya2Zsb3cpIG9yIGBpc0FjdGl2ZWAgL1xuLy8gYGFjdGl2ZVZlcnNpb25JZGAgKHdlYmhvb2ssIHRyaWdnZXIsIHByZS9wb3N0cHJvY2Vzc29yKS4gQ3JlYXRpb24gdGltZSBpc1xuLy8gYGNyZWF0ZWRBdGAgKElTTyBzdHJpbmcpIGV2ZXJ5d2hlcmUgZXhjZXB0IHNraWxsL3BlcnNvbmEgKGBjcmVhdGVkRGF0ZWA7XG4vLyBwZXJzb25hJ3MgaXMgYW4gZXBvY2gtbXMgbnVtYmVyKS5cblxuY29uc3QgTElTVF9FWFRSQUNUT1JTID0ge1xuICBza2lsbDogICAgICAgICAocikgPT4gcj8uc2tpbGxzID8/IFtdLFxuICB3ZWJob29rOiAgICAgICAocikgPT4gcj8uZGF0YT8ud2ViaG9va3MgPz8gW10sXG4gIGpvYjogICAgICAgICAgIChyKSA9PiByPy5kYXRhPy5qb2JzID8/IFtdLFxuICB0cmlnZ2VyOiAgICAgICAocikgPT4gcj8uZGF0YT8udHJpZ2dlcnMgPz8gW10sXG4gIHByZXByb2Nlc3NvcjogIChyKSA9PiByPy5kYXRhPy5wcmVwcm9jZXNzb3JzID8/IFtdLFxuICBwb3N0cHJvY2Vzc29yOiAocikgPT4gcj8uZGF0YT8ucG9zdHByb2Nlc3NvcnMgPz8gW10sXG4gIHdvcmtmbG93OiAgICAgIChyKSA9PiByPy5kYXRhPy53b3JrZmxvd3MgPz8gW10sXG59O1xuXG5jb25zdCBWRVJTSU9OU19FWFRSQUNUT1JTID0ge1xuICBza2lsbDogICAgICAgICAocikgPT4gcj8udmVyc2lvbnMgPz8gW10sXG4gIHdlYmhvb2s6ICAgICAgIChyKSA9PiByPy5kYXRhPy52ZXJzaW9ucyA/PyBbXSxcbiAgam9iOiAgICAgICAgICAgKHIpID0+IChBcnJheS5pc0FycmF5KHI/LmRhdGEpID8gci5kYXRhIDogW10pLFxuICB0cmlnZ2VyOiAgICAgICAocikgPT4gcj8uZGF0YT8udmVyc2lvbnMgPz8gW10sXG4gIHByZXByb2Nlc3NvcjogIChyKSA9PiByPy5kYXRhPy52ZXJzaW9ucyA/PyBbXSxcbiAgcG9zdHByb2Nlc3NvcjogKHIpID0+IHI/LmRhdGE/LnZlcnNpb25zID8/IFtdLFxuICB3b3JrZmxvdzogICAgICAocikgPT4gKEFycmF5LmlzQXJyYXkocj8uZGF0YSkgPyByLmRhdGEgOiBbXSksXG4gIHBlcnNvbmE6ICAgICAgIChyKSA9PiByPy52ZXJzaW9ucyA/PyBbXSxcbn07XG5cbi8qKiBVUkwgcGF0aCBzZWdtZW50IHVuZGVyIC9kZXZlbG9wZXIvIGZvciBlYWNoIGxpc3RhYmxlIHR5cGUuICovXG5leHBvcnQgY29uc3QgTElTVF9QQVRIUyA9IHtcbiAgc2tpbGw6ICdza2lsbHMnLFxuICB3ZWJob29rOiAnd2ViaG9va3MnLFxuICBqb2I6ICdqb2JzJyxcbiAgdHJpZ2dlcjogJ3RyaWdnZXJzJyxcbiAgcHJlcHJvY2Vzc29yOiAncHJlcHJvY2Vzc29ycycsXG4gIHBvc3Rwcm9jZXNzb3I6ICdwb3N0cHJvY2Vzc29ycycsXG4gIHdvcmtmbG93OiAnd29ya2Zsb3dzJyxcbn07XG5cbi8qKlxuICogRXh0cmFjdCBhIGxpc3Qgb2YgcHJpbWl0aXZlcyBmcm9tIGEgbGlzdC1lbmRwb2ludCByZXNwb25zZS5cbiAqIEB0aHJvd3MgaWYgdGhlIHR5cGUgaXMgdW5rbm93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMaXN0KHR5cGUsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGZuID0gTElTVF9FWFRSQUNUT1JTW3R5cGVdO1xuICBpZiAoIWZuKSB0aHJvdyBuZXcgRXJyb3IoYGV4dHJhY3RMaXN0OiB1bmtub3duIHByaW1pdGl2ZSB0eXBlIFwiJHt0eXBlfVwiLiBWYWxpZDogJHtPYmplY3Qua2V5cyhMSVNUX0VYVFJBQ1RPUlMpLmpvaW4oJywgJyl9YCk7XG4gIHJldHVybiBmbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIGxpc3Qgb2YgdmVyc2lvbnMgZnJvbSBhIHZlcnNpb25zLWVuZHBvaW50IHJlc3BvbnNlLlxuICogQHRocm93cyBpZiB0aGUgdHlwZSBpcyB1bmtub3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFZlcnNpb25zKHR5cGUsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGZuID0gVkVSU0lPTlNfRVhUUkFDVE9SU1t0eXBlXTtcbiAgaWYgKCFmbikgdGhyb3cgbmV3IEVycm9yKGBleHRyYWN0VmVyc2lvbnM6IHVua25vd24gcHJpbWl0aXZlIHR5cGUgXCIke3R5cGV9XCIuIFZhbGlkOiAke09iamVjdC5rZXlzKFZFUlNJT05TX0VYVFJBQ1RPUlMpLmpvaW4oJywgJyl9YCk7XG4gIHJldHVybiBmbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogVGhlIGBhY3RpdmVWZXJzaW9uSWRgIGEgdmVyc2lvbnMgZW52ZWxvcGUgbWF5IGNhcnJ5IGJlc2lkZSBpdHMgYXJyYXlcbiAqICh3ZWJob29rLCB0cmlnZ2VyLCBwcmUvcG9zdHByb2Nlc3NvcikuIE51bGwgZm9yIHRoZSBvdGhlciBmYW1pbGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBY3RpdmVWZXJzaW9uSWQocmVzcG9uc2UpIHtcbiAgY29uc3QgaWQgPSByZXNwb25zZT8uZGF0YT8uYWN0aXZlVmVyc2lvbklkO1xuICByZXR1cm4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyAmJiBpZCA/IGlkIDogbnVsbDtcbn1cblxuLyoqXG4gKiBJcyB0aGlzIHZlcnNpb24gdGhlIG9uZSB0aGF0IGlzIGxpdmU/IEVhY2ggZmFtaWx5IHNwZWxscyBpdCBkaWZmZXJlbnRseS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZlcnNpb24gLSBvbmUgZWxlbWVudCBvZiBleHRyYWN0VmVyc2lvbnMoKVxuICogQHBhcmFtIHtvYmplY3R9IFtyZXNwb25zZV0gLSB0aGUgdmVyc2lvbnMgZW52ZWxvcGUgKGZvciBhY3RpdmVWZXJzaW9uSWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGl2ZVZlcnNpb24odHlwZSwgdmVyc2lvbiwgcmVzcG9uc2UpIHtcbiAgaWYgKCF2ZXJzaW9uIHx8IHR5cGVvZiB2ZXJzaW9uICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdza2lsbCc6XG4gICAgY2FzZSAncGVyc29uYSc6XG4gICAgICByZXR1cm4gdmVyc2lvbi5pc0N1cnJlbnQgPT09IHRydWU7XG4gICAgY2FzZSAnam9iJzpcbiAgICBjYXNlICd3b3JrZmxvdyc6XG4gICAgICByZXR1cm4gdmVyc2lvbi5hY3RpdmUgPT09IHRydWU7XG4gICAgY2FzZSAnd2ViaG9vayc6XG4gICAgY2FzZSAndHJpZ2dlcic6XG4gICAgY2FzZSAncHJlcHJvY2Vzc29yJzpcbiAgICBjYXNlICdwb3N0cHJvY2Vzc29yJzoge1xuICAgICAgaWYgKHZlcnNpb24uaXNBY3RpdmUgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgYWN0aXZlSWQgPSBleHRyYWN0QWN0aXZlVmVyc2lvbklkKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IG93bklkID0gdmVyc2lvbi52ZXJzaW9uSWQgPz8gdmVyc2lvbi5pZCA/PyBudWxsO1xuICAgICAgcmV0dXJuICEhYWN0aXZlSWQgJiYgb3duSWQgPT09IGFjdGl2ZUlkO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogSVNPLTg2MDEgY3JlYXRpb24gdGltZSBvZiBhIHZlcnNpb24sIG9yIG51bGwuIE5vcm1hbGlzZXMgc2tpbGwvcGVyc29uYSdzXG4gKiBgY3JlYXRlZERhdGVgIChwZXJzb25hOiBlcG9jaCBtcykgb250byB0aGUgYGNyZWF0ZWRBdGAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25DcmVhdGVkQXQodmVyc2lvbikge1xuICBpZiAoIXZlcnNpb24gfHwgdHlwZW9mIHZlcnNpb24gIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmF3ID0gdmVyc2lvbi5jcmVhdGVkQXQgPz8gdmVyc2lvbi5jcmVhdGVkRGF0ZSA/PyBudWxsO1xuICBpZiAocmF3ID09IG51bGwpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHJhdyA9PT0gJ251bWJlcicpIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocmF3KSA/IG5ldyBEYXRlKHJhdykudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gIHJldHVybiBTdHJpbmcocmF3KTtcbn1cblxuLyoqIElkZW50aWZpZXIgb2YgYSB2ZXJzaW9uIHJvdyAodGhlIHNsb3QgbHVhLWFwaSBrZXlzIGBhY3RpdmVWZXJzaW9uSWRgIG9uKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uSWQodmVyc2lvbikge1xuICBpZiAoIXZlcnNpb24gfHwgdHlwZW9mIHZlcnNpb24gIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHZlcnNpb24udmVyc2lvbklkID8/IHZlcnNpb24uaWQgPz8gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9MSVNUX1RZUEVTID0gT2JqZWN0LmtleXMoTElTVF9FWFRSQUNUT1JTKTtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfVkVSU0lPTl9UWVBFUyA9IE9iamVjdC5rZXlzKFZFUlNJT05TX0VYVFJBQ1RPUlMpO1xuIiwgImltcG9ydCB7IGFwaVJlcXVlc3QgfSBmcm9tICcuLi9hcGktY2xpZW50Lm1qcyc7XG5pbXBvcnQge1xuICBleHRyYWN0TGlzdCxcbiAgZXh0cmFjdFZlcnNpb25zLFxuICBleHRyYWN0QWN0aXZlVmVyc2lvbklkLFxuICBpc0FjdGl2ZVZlcnNpb24sXG4gIHZlcnNpb25DcmVhdGVkQXQsXG4gIHZlcnNpb25JZCxcbiAgTElTVF9QQVRIUyxcbiAgU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMsXG59IGZyb20gJy4uL3Jlc3BvbnNlLXNoYXBlcy5tanMnO1xuXG5jb25zdCBWQUxJRF9UWVBFUyA9IG5ldyBTZXQoU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMpO1xuXG5leHBvcnQgY29uc3QgbGlzdFByaW1pdGl2ZVZlcnNpb25zID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ2xpc3RfcHJpbWl0aXZlX3ZlcnNpb25zJyxcbiAgICAvLyBXaGljaCBmYW1pbGllcyBjYXJyeSBhIHBlci1lbnRyeSBpZCBcdTIwMTQgdmVyaWZpZWQgaW4gbHVhLWFwaSdzIHNlcnZpY2VcbiAgICAvLyBtYXBwZXJzIChwYWNrYWdlcy9sdWEtYXBpL3NyYy9zZXJ2aWNlcy8pOlxuICAgIC8vICAgZGV2ZWxvcGVyLnRyaWdnZXIuc2VydmljZS50cyBnZXRUcmlnZ2VyVmVyc2lvbnMgICAgICAgICAgICBcdTIxOTIgeyB2ZXJzaW9uLCB2ZXJzaW9uSWQ6IHYuaWQsIGNyZWF0ZWRBdCwgaXNBY3RpdmUgfVxuICAgIC8vICAgZGV2ZWxvcGVyLnByZXByb2Nlc3Nvci5zZXJ2aWNlLnRzIGdldFByZVByb2Nlc3NvclZlcnNpb25zICBcdTIxOTIgeyB2ZXJzaW9uSWQ6IHYuaWQsIHZlcnNpb24sIGlzQWN0aXZlLCBjcmVhdGVkQXQgfVxuICAgIC8vICAgZGV2ZWxvcGVyLnBvc3Rwcm9jZXNzb3Iuc2VydmljZS50cyBnZXRQb3N0UHJvY2Vzc29yVmVyc2lvbnNcdTIxOTIgc2FtZSBhcyBwcmVwcm9jZXNzb3JcbiAgICAvLyAgIGRldmVsb3Blci53b3JrZmxvdy5zZXJ2aWNlLnRzIHRvVmVyc2lvbkR0byAgICAgICAgICAgICAgICAgXHUyMTkyIHsgaWQsIHZlcnNpb24sIGFjdGl2ZSwgLi4uIH1cbiAgICAvLyAgIGR0by9qb2IuZHRvLnRzIEpvYlZlcnNpb25EdG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgaWQsIHZlcnNpb24sIGFjdGl2ZSwgLi4uIH1cbiAgICAvLyAgIGRldmVsb3Blci53ZWJob29rLnNlcnZpY2UudHMgZ2V0V2ViaG9va1ZlcnNpb25zICAgICAgICAgICAgXHUyMTkyIHsgdmVyc2lvbiwgd2ViaG9va0lkOiB2LmlkLCBjcmVhdGVkQXQsIGlzQWN0aXZlIH1cbiAgICAvLyAgICAgICAoTk8gdmVyc2lvbklkL2lkIGtleSBcdTIwMTQgdGhlIHJvdyBpZCBpcyBzdGFzaGVkIHVuZGVyIHRoZSBtaXNuYW1lZFxuICAgIC8vICAgICAgICBgd2ViaG9va0lkYCwgd2hpY2ggd2UgZGVsaWJlcmF0ZWx5IGRvIG5vdCByZWFkIGFzIGEgdmVyc2lvbiBpZClcbiAgICAvLyAgIGR0by9za2lsbC5kdG8udHMgU2tpbGxWZXJzaW9uRHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIHsgdmVyc2lvbiwgY3JlYXRlZERhdGUsIGNyZWF0ZWRCeSwgaXNDdXJyZW50IH0gKG5vIGlkKVxuICAgIC8vICAgcGVyc29uYS9iYXNlLmNvbnRyb2xsZXIudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgeyB2ZXJzaW9uOiBudW1iZXIsIGNyZWF0ZWREYXRlLCBpc0N1cnJlbnQsIHBlcnNvbmEgfSAobm8gaWQpXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IHRoZSBzZXJ2ZXItc2lkZSB2ZXJzaW9ucyBvZiBvbmUgcHJpbWl0aXZlIChza2lsbCwgd2ViaG9vaywgam9iLCB0cmlnZ2VyLCBwcmVwcm9jZXNzb3IsIHBvc3Rwcm9jZXNzb3IsIHdvcmtmbG93KSBvciB0aGUgYWdlbnQgcGVyc29uYS4gUmV0dXJucyB7IGFjdGl2ZVZlcnNpb25JZCwgdmVyc2lvbnM6IFt7dmVyc2lvbiwgdmVyc2lvbklkLCBhY3RpdmUsIGNyZWF0ZWRBdH1dIH0gXHUyMDE0IGBhY3RpdmVgIGlzIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBsaXZlLiBgdmVyc2lvbklkYCBpcyBudWxsIGZvciB0eXBlcyB3aG9zZSB2ZXJzaW9ucyByb3V0ZSBjYXJyaWVzIG5vIHBlci1lbnRyeSBpZDogc2tpbGwsIHBlcnNvbmEgYW5kIHdlYmhvb2sgKHRoZSB3ZWJob29rIHJvdXRlIGV4cG9zZXMgdGhlIHJvdyBpZCBvbmx5IHVuZGVyIGEgbWlzbmFtZWQgYHdlYmhvb2tJZGAga2V5KS4gRm9yIHRob3NlLCBpZGVudGlmeSBhIHZlcnNpb24gYnkgYHZlcnNpb25gOyBmb3Igd2ViaG9va3MgdGhlIGxpdmUgcm93IGlkIGlzIHRoZSB0b3AtbGV2ZWwgYGFjdGl2ZVZlcnNpb25JZGAuIGBhY3RpdmVWZXJzaW9uSWRgIGlzIHBvcHVsYXRlZCBvbmx5IGZvciB3ZWJob29rLCB0cmlnZ2VyLCBwcmVwcm9jZXNzb3IgYW5kIHBvc3Rwcm9jZXNzb3IgZW52ZWxvcGVzIGFuZCBpcyBudWxsIGZvciBza2lsbCwgam9iLCB3b3JrZmxvdyBhbmQgcGVyc29uYS4nLFxuICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWdlbnRJZDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB0eXBlOiB7IHR5cGU6ICdzdHJpbmcnLCBlbnVtOiBbLi4uVkFMSURfVFlQRVNdIH0sXG4gICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnUHJpbWl0aXZlIG5hbWUgYXMgd3JpdHRlbiBpbiBsdWEuc2tpbGwueWFtbCAob21pdCBmb3IgcGVyc29uYSBcdTIwMTQgYW4gYWdlbnQgaGFzIG9ubHkgb25lKScgfSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogWydhZ2VudElkJywgJ3R5cGUnXSxcbiAgICB9LFxuICB9LFxuICBhc3luYyBoYW5kbGVyKHsgYWdlbnRJZCwgdHlwZSwgbmFtZSB9LCBkZXBzID0ge30pIHtcbiAgICBpZiAoIWFnZW50SWQgfHwgIXR5cGUpIHRocm93IG5ldyBFcnJvcignYWdlbnRJZCBhbmQgdHlwZSBhcmUgcmVxdWlyZWQnKTtcbiAgICBpZiAoIVZBTElEX1RZUEVTLmhhcyh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGU6ICR7dHlwZX0uIFZhbGlkOiAke1suLi5WQUxJRF9UWVBFU10uam9pbignLCAnKX1gKTtcbiAgICBpZiAodHlwZSAhPT0gJ3BlcnNvbmEnICYmICFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoJ25hbWUgaXMgcmVxdWlyZWQgZm9yIGFsbCB0eXBlcyBleGNlcHQgcGVyc29uYScpO1xuXG4gICAgLy8gVmVyc2lvbnMgbGl2ZSB1bmRlciAvZGV2ZWxvcGVyLzxwbHVyYWw+LzphZ2VudElkLzppZC92ZXJzaW9ucywgRVhDRVBUXG4gICAgLy8gcGVyc29uYSB3aGljaCBsaXZlcyB1bmRlciAvZGV2ZWxvcGVyL2FnZW50cy86YWdlbnRJZC9wZXJzb25hL3ZlcnNpb25zXG4gICAgLy8gKG5vIDppZCkuIFRoZSA6aWQgc2xvdCBpcyB0aGUgc2VydmVyIGlkIChza2lsbElkIC8gd2ViaG9va0lkIC8gLi4uKSxcbiAgICAvLyBuZXZlciB0aGUgbmFtZSBcdTIwMTQgc28gcmVzb2x2ZSBuYW1lIFx1MjE5MiBpZCBieSBsaXN0aW5nIGZpcnN0LlxuICAgIGxldCBwYXRoO1xuICAgIGlmICh0eXBlID09PSAncGVyc29uYScpIHtcbiAgICAgIHBhdGggPSBgL2RldmVsb3Blci9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L3BlcnNvbmEvdmVyc2lvbnNgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHJlc29sdmVOYW1lVG9JZCh7IGFnZW50SWQsIHR5cGUsIG5hbWUsIGZldGNoRm46IGRlcHMuZmV0Y2hGbiB9KTtcbiAgICAgIHBhdGggPSBgL2RldmVsb3Blci8ke0xJU1RfUEFUSFNbdHlwZV19LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFnZW50SWQpfS8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9L3ZlcnNpb25zYDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgYXBpUmVxdWVzdChwYXRoLCB7IGZldGNoRm46IGRlcHMuZmV0Y2hGbiB9KTtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IGV4dHJhY3RWZXJzaW9ucyh0eXBlLCBkYXRhKTtcbiAgICBjb25zdCBjb21wYWN0ID0gdmVyc2lvbnMubWFwKCh2KSA9PiAoe1xuICAgICAgdmVyc2lvbjogdi52ZXJzaW9uLFxuICAgICAgdmVyc2lvbklkOiB2ZXJzaW9uSWQodiksXG4gICAgICBhY3RpdmU6IGlzQWN0aXZlVmVyc2lvbih0eXBlLCB2LCBkYXRhKSxcbiAgICAgIGNyZWF0ZWRBdDogdmVyc2lvbkNyZWF0ZWRBdCh2KSxcbiAgICB9KSk7XG4gICAgY29uc3QgcmVzdWx0ID0geyBhZ2VudElkLCB0eXBlLCBuYW1lOiB0eXBlID09PSAncGVyc29uYScgPyBudWxsIDogbmFtZSwgYWN0aXZlVmVyc2lvbklkOiBleHRyYWN0QWN0aXZlVmVyc2lvbklkKGRhdGEpLCB2ZXJzaW9uczogY29tcGFjdCB9O1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSB9XSB9O1xuICB9LFxufTtcblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU5hbWVUb0lkKHsgYWdlbnRJZCwgdHlwZSwgbmFtZSwgZmV0Y2hGbiB9KSB7XG4gIGNvbnN0IGxpc3RQYXRoID0gYC9kZXZlbG9wZXIvJHtMSVNUX1BBVEhTW3R5cGVdfS8ke2VuY29kZVVSSUNvbXBvbmVudChhZ2VudElkKX1gO1xuICBjb25zdCBsaXN0UmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0KGxpc3RQYXRoLCB7IGZldGNoRm4gfSk7XG4gIGNvbnN0IGl0ZW1zID0gZXh0cmFjdExpc3QodHlwZSwgbGlzdFJlc3BvbnNlKTtcbiAgY29uc3QgbWF0Y2ggPSBpdGVtcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gaXRlbXMubWFwKChwKSA9PiBwLm5hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpIHx8ICcobm9uZSknO1xuICAgIHRocm93IG5ldyBFcnJvcihgbGlzdF9wcmltaXRpdmVfdmVyc2lvbnM6IG5vICR7dHlwZX0gbmFtZWQgXCIke25hbWV9XCIgb24gYWdlbnQgJHthZ2VudElkfS4gQXZhaWxhYmxlOiAke2F2YWlsYWJsZX1gKTtcbiAgfVxuICBjb25zdCBpZCA9IG1hdGNoLmlkID8/IG1hdGNoLl9pZDtcbiAgaWYgKCFpZCkgdGhyb3cgbmV3IEVycm9yKGBsaXN0X3ByaW1pdGl2ZV92ZXJzaW9uczogJHt0eXBlfSBcIiR7bmFtZX1cIiBleGlzdHMgYnV0IGhhcyBubyBpZCBmaWVsZGApO1xuICByZXR1cm4gaWQ7XG59XG4iLCAiaW1wb3J0IHsgYXBpUmVxdWVzdCB9IGZyb20gJy4uL2FwaS1jbGllbnQubWpzJztcbmltcG9ydCB7XG4gIGV4dHJhY3RMaXN0LFxuICBleHRyYWN0VmVyc2lvbnMsXG4gIGV4dHJhY3RBY3RpdmVWZXJzaW9uSWQsXG4gIGlzQWN0aXZlVmVyc2lvbixcbiAgdmVyc2lvbkNyZWF0ZWRBdCxcbiAgdmVyc2lvbklkLFxuICBMSVNUX1BBVEhTLFxufSBmcm9tICcuLi9yZXNwb25zZS1zaGFwZXMubWpzJztcblxuLy8gQ29tcG9zZXMgXCJ3aGF0IGlzIGxpdmVcIiBmcm9tIHRoZSBwZXItdHlwZSBsdWEtYXBpIGxpc3QgKyB2ZXJzaW9ucyByb3V0ZXMuXG4vLyBUaGVyZSBpcyBubyBzaW5nbGUgYC9hZ2VudHMvOmlkL3Byb2R1Y3Rpb25gIHJvdXRlOyBgbHVhIHN0YXR1cyAtLWpzb25gXG4vLyBnaXZlcyB0aGUgc2FtZSBwaWN0dXJlIGZvciB0aGUgQ1VSUkVOVCBwcm9qZWN0IChsb2NhbCB2cyBkZXBsb3llZCkgYW5kIGlzXG4vLyB0aGUgYmV0dGVyIHRvb2wgd2hlbiBhIGx1YS5za2lsbC55YW1sIGlzIGF0IGhhbmQuIFRoaXMgdG9vbCB3b3JrcyBmb3IgYW55XG4vLyBhZ2VudCB0aGUgY3JlZGVudGlhbCBjYW4gcmVhY2gsIHByb2plY3Qgb3Igbm90LlxuLy9cbi8vIFBlci10eXBlIGVudmVsb3BlIGhhbmRsaW5nIGxpdmVzIGluIHJlc3BvbnNlLXNoYXBlcy5tanMuXG4vL1xuLy8gUmVxdWVzdCBmYW4tb3V0ICgxICsgNyArIE4gdmVyc2lvbiBsb29rdXBzKSBpcyBwYXJhbGxlbGlzZWQgaW4gdHdvIHBoYXNlczpcbi8vICAgMS4gdGhlIHBlcnNvbmEgY2FsbCBhbmQgdGhlIHNldmVuIGxpc3QgY2FsbHMgcnVuIHRvZ2V0aGVyO1xuLy8gICAyLiBwZXIgdHlwZSwgaXRlbSB2ZXJzaW9uIGxvb2t1cHMgcnVuIGluIGNodW5rcyBvZiBWRVJTSU9OU19DSFVOS19TSVpFLlxuLy8gT3V0cHV0IG9yZGVyIGlzIGRldGVybWluaXN0aWMgcmVnYXJkbGVzcyBvZiBjb21wbGV0aW9uIG9yZGVyOiB0eXBlcyBpblxuLy8gUFJJTUlUSVZFX1RZUEVTIG9yZGVyLCBpdGVtcyBpbiB0aGUgb3JkZXIgdGhlIGxpc3Qgcm91dGUgcmV0dXJuZWQgdGhlbS5cbi8vIEEgd2FsbC1jbG9jayBidWRnZXQgKEJVREdFVF9NUywgaW5qZWN0YWJsZSBhcyBkZXBzLmJ1ZGdldE1zKSBzdG9wcyBORVdcbi8vIHJlcXVlc3RzIG9uY2UgZXhjZWVkZWQ7IGFscmVhZHktaXNzdWVkIHJlcXVlc3RzIHN0aWxsIGNvbXBsZXRlLiBJdGVtcyB0aGF0XG4vLyBjb3VsZCBub3QgYmUgbG9va2VkIHVwIGFyZSBzdGlsbCBsaXN0ZWQsIHdpdGggYGVycm9yOiBcInNraXBwZWQ6IFx1MjAyNlwiYCwgYW5kXG4vLyB0aGUgcmVzdWx0IGNhcnJpZXMgYHBhcnRpYWw6IHRydWVgICsgYHBhcnRpYWxSZWFzb25gLlxuXG5jb25zdCBQUklNSVRJVkVfVFlQRVMgPSBbJ3NraWxsJywgJ3dlYmhvb2snLCAnam9iJywgJ3RyaWdnZXInLCAncHJlcHJvY2Vzc29yJywgJ3Bvc3Rwcm9jZXNzb3InLCAnd29ya2Zsb3cnXTtcbmNvbnN0IFZFUlNJT05TX0NIVU5LX1NJWkUgPSA1O1xuY29uc3QgREVGQVVMVF9CVURHRVRfTVMgPSA0NV8wMDA7XG5cbmV4cG9ydCBjb25zdCBnZXREZXBsb3ltZW50U3RhdHVzID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ2dldF9kZXBsb3ltZW50X3N0YXR1cycsXG4gICAgZGVzY3JpcHRpb246ICdXaGF0IGlzIGxpdmUgcmlnaHQgbm93IGZvciBhbiBhZ2VudDogZm9yIGV2ZXJ5IHNraWxsLCB3ZWJob29rLCBqb2IsIHRyaWdnZXIsIHByZXByb2Nlc3NvciwgcG9zdHByb2Nlc3NvciBhbmQgd29ya2Zsb3cgdGhlIGFjdGl2ZSAoZGVwbG95ZWQpIHZlcnNpb24sIHBsdXMgdGhlIGFjdGl2ZSBwZXJzb25hIHZlcnNpb24uIENvbXBvc2VkIGZyb20gdGhlIHBlci10eXBlIGx1YS1hcGkgdmVyc2lvbiByb3V0ZXMgKGxpc3QgY2FsbHMgaW4gcGFyYWxsZWwsIHRoZW4gcGVyLWl0ZW0gdmVyc2lvbiBsb29rdXBzIGluIGNodW5rcyBvZiA1KS4gQm91bmRlZCBieSBhIDQ1IHMgd2FsbC1jbG9jayBidWRnZXQ6IGlmIGV4Y2VlZGVkLCByZW1haW5pbmcgaXRlbXMgYXJlIGxpc3RlZCB3aXRoIGBlcnJvcjogXCJza2lwcGVkOiBcdTIwMjZcImAgYW5kIHRoZSByZXN1bHQgY2FycmllcyBgcGFydGlhbDogdHJ1ZWAgKyBgcGFydGlhbFJlYXNvbmAuIEluc2lkZSBhIHByb2plY3QsIGBsdWEgc3RhdHVzIC0tanNvbmAgYWRkaXRpb25hbGx5IGNvbXBhcmVzIGxvY2FsIHZzIGRlcGxveWVkLicsXG4gICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhZ2VudElkOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFsnYWdlbnRJZCddLFxuICAgIH0sXG4gIH0sXG4gIGFzeW5jIGhhbmRsZXIoeyBhZ2VudElkIH0sIGRlcHMgPSB7fSkge1xuICAgIGlmICghYWdlbnRJZCkgdGhyb3cgbmV3IEVycm9yKCdhZ2VudElkIGlzIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgaWQgPSBlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCk7XG4gICAgY29uc3QgYnVkZ2V0TXMgPSBOdW1iZXIuaXNGaW5pdGUoZGVwcy5idWRnZXRNcykgPyBkZXBzLmJ1ZGdldE1zIDogREVGQVVMVF9CVURHRVRfTVM7XG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvdmVyQnVkZ2V0ID0gKCkgPT4gRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA+IGJ1ZGdldE1zO1xuICAgIGNvbnN0IGdldCA9IChwYXRoKSA9PiBhcGlSZXF1ZXN0KHBhdGgsIHsgZmV0Y2hGbjogZGVwcy5mZXRjaEZuIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0geyBhZ2VudElkLCBwZXJzb25hOiBudWxsLCBwcmltaXRpdmVzOiB7fSB9O1xuICAgIC8vIFNlZWQga2V5cyB1cCBmcm9udCBzbyB0aGUgb3V0cHV0IGtleSBvcmRlciBuZXZlciBkZXBlbmRzIG9uIHRpbWluZy5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgUFJJTUlUSVZFX1RZUEVTKSByZXN1bHQucHJpbWl0aXZlc1t0eXBlXSA9IFtdO1xuXG4gICAgLy8gUGhhc2UgMTogcGVyc29uYSArIGV2ZXJ5IGxpc3Qgcm91dGUsIGFsbCBpbiBmbGlnaHQgYXQgb25jZS5cbiAgICAvLyBQZXJzb25hOiBvbmUgcGVyIGFnZW50LCB2ZXJzaW9ucyB1bmRlciAvZGV2ZWxvcGVyL2FnZW50cy86YWdlbnRJZC9wZXJzb25hL3ZlcnNpb25zLlxuICAgIGNvbnN0IFtwZXJzb25hT3V0Y29tZSwgLi4ubGlzdE91dGNvbWVzXSA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICBnZXQoYC9kZXZlbG9wZXIvYWdlbnRzLyR7aWR9L3BlcnNvbmEvdmVyc2lvbnNgKSxcbiAgICAgIC4uLlBSSU1JVElWRV9UWVBFUy5tYXAoKHR5cGUpID0+IGdldChgL2RldmVsb3Blci8ke0xJU1RfUEFUSFNbdHlwZV19LyR7aWR9YCkpLFxuICAgIF0pO1xuXG4gICAgaWYgKHBlcnNvbmFPdXRjb21lLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IHBlcnNvbmFSZXNwb25zZSA9IHBlcnNvbmFPdXRjb21lLnZhbHVlO1xuICAgICAgY29uc3QgdmVyc2lvbnMgPSBleHRyYWN0VmVyc2lvbnMoJ3BlcnNvbmEnLCBwZXJzb25hUmVzcG9uc2UpO1xuICAgICAgY29uc3QgYWN0aXZlID0gdmVyc2lvbnMuZmluZCgodikgPT4gaXNBY3RpdmVWZXJzaW9uKCdwZXJzb25hJywgdiwgcGVyc29uYVJlc3BvbnNlKSkgPz8gbnVsbDtcbiAgICAgIHJlc3VsdC5wZXJzb25hID0ge1xuICAgICAgICBhY3RpdmVWZXJzaW9uOiBhY3RpdmU/LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgYWN0aXZlVmVyc2lvbkNyZWF0ZWRBdDogdmVyc2lvbkNyZWF0ZWRBdChhY3RpdmUpLFxuICAgICAgICB2ZXJzaW9uQ291bnQ6IHZlcnNpb25zLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wZXJzb25hID0geyBlcnJvcjogcGVyc29uYU91dGNvbWUucmVhc29uPy5tZXNzYWdlID8/IFN0cmluZyhwZXJzb25hT3V0Y29tZS5yZWFzb24pIH07XG4gICAgfVxuXG4gICAgLy8gUGhhc2UgMjogcGVyIHR5cGUsIHJlc29sdmUgZWFjaCBpdGVtJ3MgdmVyc2lvbnMgaW4gY2h1bmtzLiBUeXBlcyBhcmVcbiAgICAvLyB2aXNpdGVkIHNlcXVlbnRpYWxseSAoY2Fub25pY2FsIG9yZGVyKTsgd2l0aGluIGEgdHlwZSB1cCB0b1xuICAgIC8vIFZFUlNJT05TX0NIVU5LX1NJWkUgbG9va3VwcyBhcmUgaW4gZmxpZ2h0IHRvZ2V0aGVyLlxuICAgIGxldCBidWRnZXRFeGhhdXN0ZWQgPSBmYWxzZTtcbiAgICBsZXQgc2tpcHBlZCA9IDA7XG4gICAgbGV0IHRvdGFsID0gMDtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgUFJJTUlUSVZFX1RZUEVTLmxlbmd0aDsgdCsrKSB7XG4gICAgICBjb25zdCB0eXBlID0gUFJJTUlUSVZFX1RZUEVTW3RdO1xuICAgICAgY29uc3QgcGF0aCA9IExJU1RfUEFUSFNbdHlwZV07XG4gICAgICBjb25zdCBvdXRjb21lID0gbGlzdE91dGNvbWVzW3RdO1xuICAgICAgaWYgKG91dGNvbWUuc3RhdHVzICE9PSAnZnVsZmlsbGVkJykge1xuICAgICAgICByZXN1bHQucHJpbWl0aXZlc1t0eXBlXSA9IHsgZXJyb3I6IG91dGNvbWUucmVhc29uPy5tZXNzYWdlID8/IFN0cmluZyhvdXRjb21lLnJlYXNvbikgfTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBVUkwgc2xvdCBpcyB0aGUgc2VydmVyIGlkICg6c2tpbGxJZCAvIDp3ZWJob29rSWQgLyAuLi4pLCBuZXZlclxuICAgICAgLy8gdGhlIG5hbWUuIEl0ZW1zIHdpdGhvdXQgYW4gaWQgYXJlIGRyb3BwZWQsIGFzIGJlZm9yZS5cbiAgICAgIGNvbnN0IHRhcmdldHMgPSBleHRyYWN0TGlzdCh0eXBlLCBvdXRjb21lLnZhbHVlKVxuICAgICAgICAubWFwKChwKSA9PiAoeyBwLCBwcmltSWQ6IHAuaWQgPz8gcC5faWQsIG5hbWU6IHAubmFtZSA/PyBwLmlkID8/IHAuX2lkIH0pKVxuICAgICAgICAuZmlsdGVyKCh0Z3QpID0+IHRndC5wcmltSWQpO1xuICAgICAgdG90YWwgKz0gdGFyZ2V0cy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkgKz0gVkVSU0lPTlNfQ0hVTktfU0laRSkge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRhcmdldHMuc2xpY2UoaSwgaSArIFZFUlNJT05TX0NIVU5LX1NJWkUpO1xuXG4gICAgICAgIGlmIChidWRnZXRFeGhhdXN0ZWQgfHwgb3ZlckJ1ZGdldCgpKSB7XG4gICAgICAgICAgYnVkZ2V0RXhoYXVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICBza2lwcGVkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgcHJpbUlkIH0gb2YgY2h1bmspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wcmltaXRpdmVzW3R5cGVdLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lLCBpZDogcHJpbUlkLFxuICAgICAgICAgICAgICBlcnJvcjogYHNraXBwZWQ6IHdhbGwtY2xvY2sgYnVkZ2V0IG9mICR7YnVkZ2V0TXN9bXMgZXhoYXVzdGVkIGJlZm9yZSB0aGlzIHZlcnNpb24gbG9va3VwIHdhcyBpc3N1ZWRgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3V0Y29tZXMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgY2h1bmsubWFwKCh7IHByaW1JZCB9KSA9PiBnZXQoYC9kZXZlbG9wZXIvJHtwYXRofS8ke2lkfS8ke2VuY29kZVVSSUNvbXBvbmVudChwcmltSWQpfS92ZXJzaW9uc2ApKVxuICAgICAgICApO1xuXG4gICAgICAgIG91dGNvbWVzLmZvckVhY2goKHZvLCBqKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBwLCBwcmltSWQsIG5hbWUgfSA9IGNodW5rW2pdO1xuICAgICAgICAgIGlmICh2by5zdGF0dXMgIT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgICAgICByZXN1bHQucHJpbWl0aXZlc1t0eXBlXS5wdXNoKHsgbmFtZSwgaWQ6IHByaW1JZCwgZXJyb3I6IHZvLnJlYXNvbj8ubWVzc2FnZSA/PyBTdHJpbmcodm8ucmVhc29uKSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmVyc2lvbnNSZXNwb25zZSA9IHZvLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IHZlcnNpb25zID0gZXh0cmFjdFZlcnNpb25zKHR5cGUsIHZlcnNpb25zUmVzcG9uc2UpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHZlcnNpb25zLmZpbmQoKHYpID0+IGlzQWN0aXZlVmVyc2lvbih0eXBlLCB2LCB2ZXJzaW9uc1Jlc3BvbnNlKSkgPz8gbnVsbDtcblxuICAgICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGlkOiBwcmltSWQsXG4gICAgICAgICAgICBhY3RpdmVWZXJzaW9uOiBhY3RpdmU/LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgICAgIGFjdGl2ZVZlcnNpb25JZDogdmVyc2lvbklkKGFjdGl2ZSkgPz8gZXh0cmFjdEFjdGl2ZVZlcnNpb25JZCh2ZXJzaW9uc1Jlc3BvbnNlKSxcbiAgICAgICAgICAgIGFjdGl2ZVZlcnNpb25DcmVhdGVkQXQ6IHZlcnNpb25DcmVhdGVkQXQoYWN0aXZlKSxcbiAgICAgICAgICAgIHZlcnNpb25Db3VudDogdmVyc2lvbnMubGVuZ3RoLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gUmVjb3JkcyB0aGF0IGNhcnJ5IHRoZWlyIG93biBlbmFibGVkL2Rpc2FibGVkIHN3aXRjaC5cbiAgICAgICAgICBpZiAodHlwZW9mIHAuYWN0aXZlID09PSAnYm9vbGVhbicpIGVudHJ5LmVuYWJsZWQgPSBwLmFjdGl2ZTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ3dvcmtmbG93JyAmJiB0eXBlb2YgcC5keW5hbWljID09PSAnYm9vbGVhbicpIGVudHJ5LmR5bmFtaWMgPSBwLmR5bmFtaWM7XG4gICAgICAgICAgcmVzdWx0LnByaW1pdGl2ZXNbdHlwZV0ucHVzaChlbnRyeSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChza2lwcGVkID4gMCkge1xuICAgICAgcmVzdWx0LnBhcnRpYWwgPSB0cnVlO1xuICAgICAgcmVzdWx0LnBhcnRpYWxSZWFzb24gPVxuICAgICAgICBgV2FsbC1jbG9jayBidWRnZXQgb2YgJHtidWRnZXRNc31tcyBleGNlZWRlZCBhZnRlciAke0RhdGUubm93KCkgLSBzdGFydGVkQXR9bXM7IGAgK1xuICAgICAgICBgJHtza2lwcGVkfSBvZiAke3RvdGFsfSB2ZXJzaW9uIGxvb2t1cHMgd2VyZSBub3QgaXNzdWVkIChlbnRyaWVzIGNhcnJ5IGVycm9yOiBcInNraXBwZWQ6IFx1MjAyNlwiKS5gO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikgfV0sXG4gICAgfTtcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgYXBpUmVxdWVzdCB9IGZyb20gJy4uL2FwaS1jbGllbnQubWpzJztcblxuLy8gVGhlIGBsb2dTb3VyY2VgIGVudW0gbHVhLWFwaSBhY2NlcHRzIFx1MjAxNCBBR0VOVF9MT0dfU09VUkNFUyBpblxuLy8gcGFja2FnZXMvc2hhcmVkLXR5cGVzL3NyYy92bS1leGVjdXRpb24tbG9nLnR5cGVzLnRzICh0aGUgc2luZ2xlIHNvdXJjZSBvZlxuLy8gdHJ1dGggZXZlcnkgc2VydmljZSBpbXBvcnRzKS4gYGFsbGAgaXMgdGhlIE1DUC1zaWRlIHNlbnRpbmVsIGZvciBcIm5vXG4vLyBmaWx0ZXJcIi4gTm90ZTogYGx1YSBsb2dzIC0tdHlwZWAgYWNjZXB0cyBhIG5hcnJvd2VyIGxpc3QgYW5kIG5vIGBtYXN0cmFgLlxuZXhwb3J0IGNvbnN0IExPR19TT1VSQ0VTID0gW1xuICAnc2tpbGwnLCAnam9iJywgJ3dlYmhvb2snLCAndHJpZ2dlcicsICdwcmVwcm9jZXNzb3InLCAncG9zdHByb2Nlc3NvcicsXG4gICd1c2VyX21lc3NhZ2UnLCAnYWdlbnRfcmVzcG9uc2UnLCAnYWdlbnRfZXJyb3InLCAncnVudGltZScsICdtY3AnLCAncmFnJyxcbiAgJ2RldmljZScsICdkZXZpY2UtdHJpZ2dlcicsICdtb2RlbC1yZXNvbHZlcicsXG4gICd3b3JrZmxvdy1zdGVwJywgJ3dvcmtmbG93LXNjcmlwdCcsICd3b3JrZmxvdycsXG5dO1xuXG4vLyBUaGUgYGxvZ1R5cGVgIHF1ZXJ5IHBhcmFtIFx1MjAxNCBHRVQgL2RldmVsb3Blci9hZ2VudHMvOmFnZW50SWQvbG9ncyByZWFkcyBpdFxuLy8gKGNvbnRyb2xsZXJzL2RldmVsb3Blci9iYXNlLmNvbnRyb2xsZXIudHMpIGFuZCBkZXZlbG9wZXIuc2VydmljZS50c1xuLy8gZ2V0QWdlbnRMb2dzIGFwcGxpZXMgaXQgdmVyYmF0aW0gYXMgYGZpbHRlci5zdWJUeXBlID0gbG9nVHlwZWAuIFRoZVxuLy8gYWNjZXB0ZWQgdmFsdWVzIGFyZSB0aGVyZWZvcmUgdGhlIFZtRXhlY3V0aW9uTG9nIGBzdWJUeXBlYCBlbnVtIGluXG4vLyBwYWNrYWdlcy9zaGFyZWQtc2NoZW1hcy9zcmMvdm1FeGVjdXRpb25Mb2dzLnNjaGVtYS50czpcbi8vICAgZW51bTogWydzdGFydCcsICdjb21wbGV0ZScsICdlcnJvcicsICdkZWJ1ZycsICd3YXJuJywgJ2luZm8nXVxuLy8gKG1pcnJvcmVkIGJ5IGx1YS1jbGkncyBMb2dFbnRyeS5zdWJUeXBlIGluIHNyYy9pbnRlcmZhY2VzL2xvZ3MudHMpLiBBbnlcbi8vIG90aGVyIHN0cmluZyBpcyBub3QgcmVqZWN0ZWQgc2VydmVyLXNpZGUgXHUyMDE0IGl0IHNpbXBseSBtYXRjaGVzIG5vdGhpbmcuXG5leHBvcnQgY29uc3QgTE9HX1RZUEVTID0gWydlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnLCAnc3RhcnQnLCAnY29tcGxldGUnXTtcblxuY29uc3QgVkFMSURfVFlQRVMgPSBuZXcgU2V0KFsnYWxsJywgLi4uTE9HX1NPVVJDRVNdKTtcbmNvbnN0IFZBTElEX0xPR19UWVBFUyA9IG5ldyBTZXQoTE9HX1RZUEVTKTtcblxuZXhwb3J0IGNvbnN0IHRhaWxMb2dzID0ge1xuICBzcGVjOiB7XG4gICAgbmFtZTogJ3RhaWxfbG9ncycsXG4gICAgZGVzY3JpcHRpb246ICdGZXRjaCByZWNlbnQgZXhlY3V0aW9uIGxvZ3MgZm9yIGFuIGFnZW50IChzYW1lIGRhdGEgYXMgYGx1YSBsb2dzIC0tanNvbmApLiBSZXR1cm5zIHsgbG9nczogTG9nRW50cnlbXSwgcGFnaW5hdGlvbiB9LiBFYWNoIExvZ0VudHJ5IGhhcyBgc3ViVHlwZWAgKGVycm9yIHwgd2FybiB8IGluZm8gfCBkZWJ1ZyB8IHN0YXJ0IHwgY29tcGxldGUpLCBgbWVzc2FnZWAsIGB0aW1lc3RhbXBgLCBhbmQgYG1ldGFkYXRhLmxvZ1NvdXJjZWAgLyBgbWV0YWRhdGEucHJpbWl0aXZlTmFtZWAgXHUyMDE0IHRoZXJlIGlzIE5PIGBsZXZlbGAgZmllbGQuIEZpbHRlciBieSBzb3VyY2UgKGB0eXBlYCksIHByaW1pdGl2ZSAoYG5hbWVgKSBhbmQvb3Igc2V2ZXJpdHkgKGBsb2dUeXBlYCwgd2hpY2ggZmlsdGVycyBvbiBgc3ViVHlwZWApLicsXG4gICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhZ2VudElkOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBlbnVtOiBbLi4uVkFMSURfVFlQRVNdLFxuICAgICAgICAgIGRlZmF1bHQ6ICdhbGwnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTG9nIHNvdXJjZSBmaWx0ZXIgKG1hcHMgdG8gbHVhLWFwaSBgbG9nU291cmNlYCkuIGBhbGxgID0gbm8gZmlsdGVyLicsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGJ5IHByaW1pdGl2ZSBuYW1lIChvcHRpb25hbDsgbWFwcyB0byBgcHJpbWl0aXZlTmFtZWApJyB9LFxuICAgICAgICBsb2dUeXBlOiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgZW51bTogTE9HX1RZUEVTLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGJ5IExvZ0VudHJ5IGBzdWJUeXBlYCAob3B0aW9uYWw7IG1hcHMgdG8gbHVhLWFwaSBgbG9nVHlwZWApLiBPbWl0IGZvciBldmVyeSBzZXZlcml0eS4gZS5nLiBgZXJyb3JgIHRvIHNlZSBvbmx5IGZhaWx1cmVzLicsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGx1YS1hcGkgY2FwcyBsaW1pdCBhdCAxMDAgc2VydmVyLXNpZGUgKE1hdGgubWluKDEwMCwgLi4uKSBpblxuICAgICAgICAvLyBjb250cm9sbGVycy9kZXZlbG9wZXIvYmFzZS5jb250cm9sbGVyLnRzKS4gTWF0Y2ggdGhlIHNlcnZlciBjYXAgc29cbiAgICAgICAgLy8gdGhlIHRvb2wncyBjb250cmFjdCBpcyBob25lc3QuXG4gICAgICAgIGxpbWl0OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiA1MCwgbWluaW11bTogMSwgbWF4aW11bTogMTAwIH0sXG4gICAgICAgIHBhZ2U6IHsgdHlwZTogJ251bWJlcicsIG1pbmltdW06IDEsIGRlc2NyaXB0aW9uOiAnUGFnZSBudW1iZXIgZm9yIHBhZ2luYXRpb24gKG9wdGlvbmFsKScgfSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogWydhZ2VudElkJ10sXG4gICAgfSxcbiAgfSxcbiAgYXN5bmMgaGFuZGxlcih7IGFnZW50SWQsIHR5cGUgPSAnYWxsJywgbmFtZSwgbG9nVHlwZSwgbGltaXQgPSA1MCwgcGFnZSB9LCBkZXBzID0ge30pIHtcbiAgICBpZiAoIWFnZW50SWQpIHRocm93IG5ldyBFcnJvcignYWdlbnRJZCBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghVkFMSURfVFlQRVMuaGFzKHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZTogJHt0eXBlfS4gVmFsaWQ6ICR7Wy4uLlZBTElEX1RZUEVTXS5qb2luKCcsICcpfWApO1xuICAgIGlmIChsb2dUeXBlICE9PSB1bmRlZmluZWQgJiYgIVZBTElEX0xPR19UWVBFUy5oYXMobG9nVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsb2dUeXBlOiAke2xvZ1R5cGV9LiBWYWxpZDogJHtMT0dfVFlQRVMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgLy8gRGVmZW5zaXZlIGNhcCBtYXRjaGluZyB0aGUgc2VydmVyLXNpZGUgbGltaXQ7IHJlamVjdHMgbG91ZCByYXRoZXJcbiAgICAvLyB0aGFuIHNpbGVudGx5IHRydW5jYXRpbmcuXG4gICAgaWYgKGxpbWl0ID4gMTAwKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGltaXQ6ICR7bGltaXR9LiBsdWEtYXBpIGNhcHMgbG9ncyBhdCAxMDAgZW50cmllcyBwZXIgY2FsbC5gKTtcbiAgICAvLyBSb3V0ZTogR0VUIC9kZXZlbG9wZXIvYWdlbnRzLzphZ2VudElkL2xvZ3MgKGNvbnRyb2xsZXJzL2RldmVsb3Blci9iYXNlLmNvbnRyb2xsZXIudHMpLlxuICAgIC8vIFF1ZXJ5IHBhcmFtcyB0aGUgc2VydmVyIHJlYWRzOiBwYWdlLCBsaW1pdCwgc29ydEJ5LCBzb3J0T3JkZXIsIGxvZ1NvdXJjZSxcbiAgICAvLyBwcmltaXRpdmVJZCwgcHJpbWl0aXZlTmFtZSwgdG9vbElkLCB0b29sTmFtZSwgbG9nVHlwZSwgdXNlcklkLiBUaGVcbiAgICAvLyB0eXBlIGZpbHRlciBpcyBgbG9nU291cmNlYCBcdTIwMTQgYSBgcHJpbWl0aXZlVHlwZWAgcGFyYW0gaXMgc2lsZW50bHkgaWdub3JlZC5cbiAgICBjb25zdCBxdWVyeSA9IHsgbGltaXQgfTtcbiAgICBpZiAodHlwZSAhPT0gJ2FsbCcpIHF1ZXJ5LmxvZ1NvdXJjZSA9IHR5cGU7XG4gICAgaWYgKG5hbWUpIHF1ZXJ5LnByaW1pdGl2ZU5hbWUgPSBuYW1lO1xuICAgIGlmIChsb2dUeXBlKSBxdWVyeS5sb2dUeXBlID0gbG9nVHlwZTtcbiAgICBpZiAocGFnZSkgcXVlcnkucGFnZSA9IHBhZ2U7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwaVJlcXVlc3QoXG4gICAgICBgL2RldmVsb3Blci9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L2xvZ3NgLFxuICAgICAgeyBxdWVyeSwgZmV0Y2hGbjogZGVwcy5mZXRjaEZuIH1cbiAgICApO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikgfV0gfTtcbiAgfSxcbn07XG4iLCAiLy8gTUNQIHN0ZGlvIHNlcnZlciBib290c3RyYXAuIFBlciB0ZWNoIHNwZWMgXHUwMEE3OC4xLlxuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzJztcbmltcG9ydCB7XG4gIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcbn0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qcyc7XG5pbXBvcnQgKiBhcyB0b29scyBmcm9tICcuL3Rvb2xzL2luZGV4Lm1qcyc7XG5cbmNvbnN0IFRPT0xfUkVHSVNUUlkgPSBPYmplY3QudmFsdWVzKHRvb2xzKTtcblxuY29uc3Qgc2VydmVyID0gbmV3IFNlcnZlcihcbiAgeyBuYW1lOiAnbHVhLXBsYXRmb3JtJywgdmVyc2lvbjogJzEuMTMuMCcgfSxcbiAgeyBjYXBhYmlsaXRpZXM6IHsgdG9vbHM6IHt9IH0gfVxuKTtcblxuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+ICh7XG4gIHRvb2xzOiBUT09MX1JFR0lTVFJZLm1hcCgodCkgPT4gdC5zcGVjKSxcbn0pKTtcblxuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKENhbGxUb29sUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcSkgPT4ge1xuICBjb25zdCB0b29sID0gVE9PTF9SRUdJU1RSWS5maW5kKCh0KSA9PiB0LnNwZWMubmFtZSA9PT0gcmVxLnBhcmFtcy5uYW1lKTtcbiAgaWYgKCF0b29sKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdG9vbDogJHtyZXEucGFyYW1zLm5hbWV9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRvb2wuaGFuZGxlcihyZXEucGFyYW1zLmFyZ3VtZW50cyA/PyB7fSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBFcnJvcjogJHtlcnIubWVzc2FnZX1gIH1dLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG59KTtcblxuLy8gXHUwMEE3MTkuNiBjcmFzaCByZXBvcnRpbmcgXHUyMDE0IG11c3QgbGFuZCBCRUZPUkUgcHJvY2VzcyBleGl0IHNvIHRoZSBldmVudCByZWFjaGVzXG4vLyB0ZWxlbWV0cnkuIFdpbmRvd3MgY2FuIGRyb3AgdGhlIGxhc3Qgc3RkZXJyIHdyaXRlIGlmIHByb2Nlc3MuZXhpdCBmaXJlc1xuLy8gc3luY2hyb25vdXNseSBhZnRlciBpdDsgc2FtZSBidWcgY2xhc3MgYXMgbGliL2hvb2stcnVudGltZS5tanMncyBleGl0KCkuXG4vLyBFeGl0IG9ubHkgaW5zaWRlIHRoZSB3cml0ZSBjYWxsYmFjayBzbyB0aGUgZmx1c2ggY29tcGxldGVzLlxuZnVuY3Rpb24gcmVwb3J0Q3Jhc2hBbmRFeGl0KHBheWxvYWQpIHtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkgKyAnXFxuJywgKCkgPT4gcHJvY2Vzcy5leGl0KDEpKTtcbn1cblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyKSA9PiB7XG4gIHJlcG9ydENyYXNoQW5kRXhpdCh7XG4gICAgZXZlbnQ6ICdtY3Bfc2VydmVyX2NyYXNoJyxcbiAgICBraW5kOiAndW5jYXVnaHRFeGNlcHRpb24nLFxuICAgIG1lc3NhZ2U6IGVycj8ubWVzc2FnZSxcbiAgICBzdGFjazogZXJyPy5zdGFjayxcbiAgICBwbHVnaW5fdmVyc2lvbjogJzEuMTMuMCcsXG4gICAgbHVhX2NsaV92ZXJzaW9uOiBwcm9jZXNzLmVudi5MVUFfQ0xJX1ZFUlNJT04gPz8gbnVsbCxcbiAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICB0czogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9KTtcbn0pO1xuXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uKSA9PiB7XG4gIHJlcG9ydENyYXNoQW5kRXhpdCh7XG4gICAgZXZlbnQ6ICdtY3Bfc2VydmVyX2NyYXNoJyxcbiAgICBraW5kOiAndW5oYW5kbGVkUmVqZWN0aW9uJyxcbiAgICByZWFzb246IFN0cmluZyhyZWFzb24pLFxuICAgIHN0YWNrOiAvKiogQHR5cGUge2FueX0gKi8gKHJlYXNvbik/LnN0YWNrLFxuICAgIHBsdWdpbl92ZXJzaW9uOiAnMS4xMy4wJyxcbiAgICBsdWFfY2xpX3ZlcnNpb246IHByb2Nlc3MuZW52LkxVQV9DTElfVkVSU0lPTiA/PyBudWxsLFxuICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgIHRzOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH0pO1xufSk7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UUFBUSxJQUFJLGlCQUFtQixLQUNoRCxTQUFVLFFBQVEsU0FDbEIsR0FBSSxJQUFJLEtBQUssRUFBRSxZQUFZLENBQzdCLENBQUMsQ0FDSCxDQUFDLEVBRUQsTUFBTVYsR0FBTyxRQUFRLElBQUlXLEVBQXNCIiwKICAibmFtZXMiOiBbImV4dGVybmFsX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiQlJBTkQiLCAiRElSVFkiLCAiRU1QVFlfUEFUSCIsICJJTlZBTElEIiwgIk5FVkVSIiwgIk9LIiwgIlBhcnNlU3RhdHVzIiwgIlpvZFR5cGUiLCAiWm9kQW55IiwgIlpvZEFycmF5IiwgIlpvZEJpZ0ludCIsICJab2RCb29sZWFuIiwgIlpvZEJyYW5kZWQiLCAiWm9kQ2F0Y2giLCAiWm9kRGF0ZSIsICJab2REZWZhdWx0IiwgIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsICJab2RFZmZlY3RzIiwgIlpvZEVudW0iLCAiWm9kRXJyb3IiLCAiWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIiwgIlpvZEZ1bmN0aW9uIiwgIlpvZEludGVyc2VjdGlvbiIsICJab2RJc3N1ZUNvZGUiLCAiWm9kTGF6eSIsICJab2RMaXRlcmFsIiwgIlpvZE1hcCIsICJab2ROYU4iLCAiWm9kTmF0aXZlRW51bSIsICJab2ROZXZlciIsICJab2ROdWxsIiwgIlpvZE51bGxhYmxlIiwgIlpvZE51bWJlciIsICJab2RPYmplY3QiLCAiWm9kT3B0aW9uYWwiLCAiWm9kUGFyc2VkVHlwZSIsICJab2RQaXBlbGluZSIsICJab2RQcm9taXNlIiwgIlpvZFJlYWRvbmx5IiwgIlpvZFJlY29yZCIsICJab2RTZXQiLCAiWm9kU3RyaW5nIiwgIlpvZFN5bWJvbCIsICJab2RUdXBsZSIsICJab2RVbmRlZmluZWQiLCAiWm9kVW5pb24iLCAiWm9kVW5rbm93biIsICJab2RWb2lkIiwgImFkZElzc3VlVG9Db250ZXh0IiwgImFueVR5cGUiLCAiYXJyYXlUeXBlIiwgImJpZ0ludFR5cGUiLCAiYm9vbGVhblR5cGUiLCAiY29lcmNlIiwgImN1c3RvbSIsICJkYXRlVHlwZSIsICJkYXRldGltZVJlZ2V4IiwgImVuX2RlZmF1bHQiLCAiZGlzY3JpbWluYXRlZFVuaW9uVHlwZSIsICJlZmZlY3RzVHlwZSIsICJlbnVtVHlwZSIsICJmdW5jdGlvblR5cGUiLCAiZ2V0RXJyb3JNYXAiLCAiZ2V0UGFyc2VkVHlwZSIsICJpbnN0YW5jZU9mVHlwZSIsICJpbnRlcnNlY3Rpb25UeXBlIiwgImlzQWJvcnRlZCIsICJpc0FzeW5jIiwgImlzRGlydHkiLCAiaXNWYWxpZCIsICJsYXRlIiwgImxhenlUeXBlIiwgImxpdGVyYWxUeXBlIiwgIm1ha2VJc3N1ZSIsICJtYXBUeXBlIiwgIm5hblR5cGUiLCAibmF0aXZlRW51bVR5cGUiLCAibmV2ZXJUeXBlIiwgIm51bGxUeXBlIiwgIm51bGxhYmxlVHlwZSIsICJudW1iZXJUeXBlIiwgIm9iamVjdFR5cGUiLCAib2JqZWN0VXRpbCIsICJvYm9vbGVhbiIsICJvbnVtYmVyIiwgIm9wdGlvbmFsVHlwZSIsICJvc3RyaW5nIiwgInBpcGVsaW5lVHlwZSIsICJwcmVwcm9jZXNzVHlwZSIsICJwcm9taXNlVHlwZSIsICJxdW90ZWxlc3NKc29uIiwgInJlY29yZFR5cGUiLCAic2V0VHlwZSIsICJzZXRFcnJvck1hcCIsICJzdHJpY3RPYmplY3RUeXBlIiwgInN0cmluZ1R5cGUiLCAic3ltYm9sVHlwZSIsICJ0dXBsZVR5cGUiLCAidW5kZWZpbmVkVHlwZSIsICJ1bmlvblR5cGUiLCAidW5rbm93blR5cGUiLCAidXRpbCIsICJ2b2lkVHlwZSIsICJ1dGlsIiwgIl8iLCAiYXNzZXJ0SXMiLCAiX2FyZyIsICJhc3NlcnROZXZlciIsICJfeCIsICJpdGVtcyIsICJvYmoiLCAiaXRlbSIsICJ2YWxpZEtleXMiLCAiayIsICJmaWx0ZXJlZCIsICJlIiwgIm9iamVjdCIsICJrZXlzIiwgImtleSIsICJhcnIiLCAiY2hlY2tlciIsICJ2YWwiLCAiam9pblZhbHVlcyIsICJhcnJheSIsICJzZXBhcmF0b3IiLCAidmFsdWUiLCAib2JqZWN0VXRpbCIsICJmaXJzdCIsICJzZWNvbmQiLCAiWm9kUGFyc2VkVHlwZSIsICJnZXRQYXJzZWRUeXBlIiwgImRhdGEiLCAiWm9kSXNzdWVDb2RlIiwgInV0aWwiLCAicXVvdGVsZXNzSnNvbiIsICJvYmoiLCAiWm9kRXJyb3IiLCAiX1pvZEVycm9yIiwgImlzc3VlcyIsICJzdWIiLCAic3VicyIsICJhY3R1YWxQcm90byIsICJfbWFwcGVyIiwgIm1hcHBlciIsICJpc3N1ZSIsICJmaWVsZEVycm9ycyIsICJwcm9jZXNzRXJyb3IiLCAiZXJyb3IiLCAiY3VyciIsICJpIiwgImVsIiwgInZhbHVlIiwgImZvcm1FcnJvcnMiLCAiZmlyc3RFbCIsICJlcnJvck1hcCIsICJpc3N1ZSIsICJfY3R4IiwgIm1lc3NhZ2UiLCAiWm9kSXNzdWVDb2RlIiwgIlpvZFBhcnNlZFR5cGUiLCAidXRpbCIsICJlbl9kZWZhdWx0IiwgIm92ZXJyaWRlRXJyb3JNYXAiLCAiZW5fZGVmYXVsdCIsICJzZXRFcnJvck1hcCIsICJtYXAiLCAib3ZlcnJpZGVFcnJvck1hcCIsICJnZXRFcnJvck1hcCIsICJtYWtlSXNzdWUiLCAicGFyYW1zIiwgImRhdGEiLCAicGF0aCIsICJlcnJvck1hcHMiLCAiaXNzdWVEYXRhIiwgImZ1bGxQYXRoIiwgImZ1bGxJc3N1ZSIsICJlcnJvck1lc3NhZ2UiLCAibWFwcyIsICJtIiwgIm1hcCIsICJFTVBUWV9QQVRIIiwgImFkZElzc3VlVG9Db250ZXh0IiwgImN0eCIsICJvdmVycmlkZU1hcCIsICJnZXRFcnJvck1hcCIsICJpc3N1ZSIsICJlbl9kZWZhdWx0IiwgIngiLCAiUGFyc2VTdGF0dXMiLCAiX1BhcnNlU3RhdHVzIiwgInN0YXR1cyIsICJyZXN1bHRzIiwgImFycmF5VmFsdWUiLCAicyIsICJJTlZBTElEIiwgInBhaXJzIiwgInN5bmNQYWlycyIsICJwYWlyIiwgImtleSIsICJ2YWx1ZSIsICJmaW5hbE9iamVjdCIsICJESVJUWSIsICJPSyIsICJpc0Fib3J0ZWQiLCAiaXNEaXJ0eSIsICJpc1ZhbGlkIiwgImlzQXN5bmMiLCAiZXJyb3JVdGlsIiwgIm1lc3NhZ2UiLCAiUGFyc2VJbnB1dExhenlQYXRoIiwgInBhcmVudCIsICJ2YWx1ZSIsICJwYXRoIiwgImtleSIsICJoYW5kbGVSZXN1bHQiLCAiY3R4IiwgInJlc3VsdCIsICJpc1ZhbGlkIiwgImVycm9yIiwgIlpvZEVycm9yIiwgInByb2Nlc3NDcmVhdGVQYXJhbXMiLCAicGFyYW1zIiwgImVycm9yTWFwIiwgImludmFsaWRfdHlwZV9lcnJvciIsICJyZXF1aXJlZF9lcnJvciIsICJkZXNjcmlwdGlvbiIsICJpc3MiLCAibWVzc2FnZSIsICJab2RUeXBlIiwgImlucHV0IiwgImdldFBhcnNlZFR5cGUiLCAiUGFyc2VTdGF0dXMiLCAiaXNBc3luYyIsICJkYXRhIiwgImVyciIsICJtYXliZUFzeW5jUmVzdWx0IiwgImNoZWNrIiwgImdldElzc3VlUHJvcGVydGllcyIsICJ2YWwiLCAic2V0RXJyb3IiLCAiWm9kSXNzdWVDb2RlIiwgInJlZmluZW1lbnREYXRhIiwgInJlZmluZW1lbnQiLCAiWm9kRWZmZWN0cyIsICJab2RGaXJzdFBhcnR5VHlwZUtpbmQiLCAiZGVmIiwgIlpvZE9wdGlvbmFsIiwgIlpvZE51bGxhYmxlIiwgIlpvZEFycmF5IiwgIlpvZFByb21pc2UiLCAib3B0aW9uIiwgIlpvZFVuaW9uIiwgImluY29taW5nIiwgIlpvZEludGVyc2VjdGlvbiIsICJ0cmFuc2Zvcm0iLCAiZGVmYXVsdFZhbHVlRnVuYyIsICJab2REZWZhdWx0IiwgIlpvZEJyYW5kZWQiLCAiY2F0Y2hWYWx1ZUZ1bmMiLCAiWm9kQ2F0Y2giLCAiVGhpcyIsICJ0YXJnZXQiLCAiWm9kUGlwZWxpbmUiLCAiWm9kUmVhZG9ubHkiLCAiY3VpZFJlZ2V4IiwgImN1aWQyUmVnZXgiLCAidWxpZFJlZ2V4IiwgInV1aWRSZWdleCIsICJuYW5vaWRSZWdleCIsICJqd3RSZWdleCIsICJkdXJhdGlvblJlZ2V4IiwgImVtYWlsUmVnZXgiLCAiX2Vtb2ppUmVnZXgiLCAiZW1vamlSZWdleCIsICJpcHY0UmVnZXgiLCAiaXB2NENpZHJSZWdleCIsICJpcHY2UmVnZXgiLCAiaXB2NkNpZHJSZWdleCIsICJiYXNlNjRSZWdleCIsICJiYXNlNjR1cmxSZWdleCIsICJkYXRlUmVnZXhTb3VyY2UiLCAiZGF0ZVJlZ2V4IiwgInRpbWVSZWdleFNvdXJjZSIsICJhcmdzIiwgInNlY29uZHNSZWdleFNvdXJjZSIsICJzZWNvbmRzUXVhbnRpZmllciIsICJ0aW1lUmVnZXgiLCAiZGF0ZXRpbWVSZWdleCIsICJyZWdleCIsICJvcHRzIiwgImlzVmFsaWRJUCIsICJpcCIsICJ2ZXJzaW9uIiwgImlzVmFsaWRKV1QiLCAiand0IiwgImFsZyIsICJoZWFkZXIiLCAiYmFzZTY0IiwgImRlY29kZWQiLCAiaXNWYWxpZENpZHIiLCAiWm9kU3RyaW5nIiwgIl9ab2RTdHJpbmciLCAiWm9kUGFyc2VkVHlwZSIsICJhZGRJc3N1ZVRvQ29udGV4dCIsICJJTlZBTElEIiwgInN0YXR1cyIsICJ0b29CaWciLCAidG9vU21hbGwiLCAidXRpbCIsICJ2YWxpZGF0aW9uIiwgImVycm9yVXRpbCIsICJvcHRpb25zIiwgIm1pbkxlbmd0aCIsICJtYXhMZW5ndGgiLCAibGVuIiwgImNoIiwgIm1pbiIsICJtYXgiLCAiZmxvYXRTYWZlUmVtYWluZGVyIiwgInN0ZXAiLCAidmFsRGVjQ291bnQiLCAic3RlcERlY0NvdW50IiwgImRlY0NvdW50IiwgInZhbEludCIsICJzdGVwSW50IiwgIlpvZE51bWJlciIsICJfWm9kTnVtYmVyIiwgImtpbmQiLCAiaW5jbHVzaXZlIiwgIlpvZEJpZ0ludCIsICJfWm9kQmlnSW50IiwgIlpvZEJvb2xlYW4iLCAiT0siLCAiWm9kRGF0ZSIsICJfWm9kRGF0ZSIsICJtaW5EYXRlIiwgIm1heERhdGUiLCAiWm9kU3ltYm9sIiwgIlpvZFVuZGVmaW5lZCIsICJab2ROdWxsIiwgIlpvZEFueSIsICJab2RVbmtub3duIiwgIlpvZE5ldmVyIiwgIlpvZFZvaWQiLCAiX1pvZEFycmF5IiwgIml0ZW0iLCAiaSIsICJzY2hlbWEiLCAiZGVlcFBhcnRpYWxpZnkiLCAiWm9kT2JqZWN0IiwgIm5ld1NoYXBlIiwgImZpZWxkU2NoZW1hIiwgIlpvZFR1cGxlIiwgIl9ab2RPYmplY3QiLCAic2hhcGUiLCAia2V5cyIsICJzaGFwZUtleXMiLCAiZXh0cmFLZXlzIiwgInBhaXJzIiwgImtleVZhbGlkYXRvciIsICJ1bmtub3duS2V5cyIsICJjYXRjaGFsbCIsICJzeW5jUGFpcnMiLCAicGFpciIsICJpc3N1ZSIsICJkZWZhdWx0RXJyb3IiLCAiYXVnbWVudGF0aW9uIiwgIm1lcmdpbmciLCAiaW5kZXgiLCAibWFzayIsICJuZXdGaWVsZCIsICJjcmVhdGVab2RFbnVtIiwgImhhbmRsZVJlc3VsdHMiLCAicmVzdWx0cyIsICJ1bmlvbkVycm9ycyIsICJjaGlsZEN0eCIsICJkaXJ0eSIsICJpc3N1ZXMiLCAidHlwZXMiLCAiZ2V0RGlzY3JpbWluYXRvciIsICJ0eXBlIiwgIlpvZExhenkiLCAiWm9kTGl0ZXJhbCIsICJab2RFbnVtIiwgIlpvZE5hdGl2ZUVudW0iLCAiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwgIl9ab2REaXNjcmltaW5hdGVkVW5pb24iLCAiZGlzY3JpbWluYXRvciIsICJkaXNjcmltaW5hdG9yVmFsdWUiLCAib3B0aW9uc01hcCIsICJkaXNjcmltaW5hdG9yVmFsdWVzIiwgIm1lcmdlVmFsdWVzIiwgImEiLCAiYiIsICJhVHlwZSIsICJiVHlwZSIsICJiS2V5cyIsICJzaGFyZWRLZXlzIiwgIm5ld09iaiIsICJzaGFyZWRWYWx1ZSIsICJuZXdBcnJheSIsICJpdGVtQSIsICJpdGVtQiIsICJoYW5kbGVQYXJzZWQiLCAicGFyc2VkTGVmdCIsICJwYXJzZWRSaWdodCIsICJpc0Fib3J0ZWQiLCAibWVyZ2VkIiwgImlzRGlydHkiLCAibGVmdCIsICJyaWdodCIsICJfWm9kVHVwbGUiLCAiaXRlbXMiLCAiaXRlbUluZGV4IiwgIngiLCAicmVzdCIsICJzY2hlbWFzIiwgIlpvZFJlY29yZCIsICJfWm9kUmVjb3JkIiwgImtleVR5cGUiLCAidmFsdWVUeXBlIiwgImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIsICJab2RNYXAiLCAiZmluYWxNYXAiLCAiWm9kU2V0IiwgIl9ab2RTZXQiLCAiZmluYWxpemVTZXQiLCAiZWxlbWVudHMiLCAicGFyc2VkU2V0IiwgImVsZW1lbnQiLCAibWluU2l6ZSIsICJtYXhTaXplIiwgInNpemUiLCAiWm9kRnVuY3Rpb24iLCAiX1pvZEZ1bmN0aW9uIiwgIm1ha2VBcmdzSXNzdWUiLCAibWFrZUlzc3VlIiwgImdldEVycm9yTWFwIiwgImVuX2RlZmF1bHQiLCAibWFrZVJldHVybnNJc3N1ZSIsICJyZXR1cm5zIiwgImZuIiwgIm1lIiwgInBhcnNlZEFyZ3MiLCAiZSIsICJwYXJzZWRSZXR1cm5zIiwgInJldHVyblR5cGUiLCAiZnVuYyIsICJnZXR0ZXIiLCAidmFsdWVzIiwgIl9ab2RFbnVtIiwgImV4cGVjdGVkVmFsdWVzIiwgImVudW1WYWx1ZXMiLCAibmV3RGVmIiwgIm9wdCIsICJuYXRpdmVFbnVtVmFsdWVzIiwgInByb21pc2lmaWVkIiwgImVmZmVjdCIsICJjaGVja0N0eCIsICJhcmciLCAicHJvY2Vzc2VkIiwgIkRJUlRZIiwgImV4ZWN1dGVSZWZpbmVtZW50IiwgImFjYyIsICJpbm5lciIsICJiYXNlIiwgInByZXByb2Nlc3MiLCAiWm9kT3B0aW9uYWwiLCAiWm9kVHlwZSIsICJpbnB1dCIsICJab2RQYXJzZWRUeXBlIiwgIk9LIiwgInR5cGUiLCAicGFyYW1zIiwgIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsICJwcm9jZXNzQ3JlYXRlUGFyYW1zIiwgIlpvZE51bGxhYmxlIiwgIlpvZERlZmF1bHQiLCAiY3R4IiwgImRhdGEiLCAiWm9kQ2F0Y2giLCAibmV3Q3R4IiwgInJlc3VsdCIsICJpc0FzeW5jIiwgIlpvZEVycm9yIiwgIlpvZE5hTiIsICJhZGRJc3N1ZVRvQ29udGV4dCIsICJab2RJc3N1ZUNvZGUiLCAiSU5WQUxJRCIsICJCUkFORCIsICJab2RCcmFuZGVkIiwgIlpvZFBpcGVsaW5lIiwgIl9ab2RQaXBlbGluZSIsICJzdGF0dXMiLCAiaW5SZXN1bHQiLCAiRElSVFkiLCAiYSIsICJiIiwgIlpvZFJlYWRvbmx5IiwgImZyZWV6ZSIsICJpc1ZhbGlkIiwgImNsZWFuUGFyYW1zIiwgInAiLCAiY3VzdG9tIiwgImNoZWNrIiwgIl9wYXJhbXMiLCAiZmF0YWwiLCAiWm9kQW55IiwgInIiLCAiX2ZhdGFsIiwgImxhdGUiLCAiWm9kT2JqZWN0IiwgIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsICJpbnN0YW5jZU9mVHlwZSIsICJjbHMiLCAicGFyYW1zIiwgImN1c3RvbSIsICJkYXRhIiwgInN0cmluZ1R5cGUiLCAiWm9kU3RyaW5nIiwgIm51bWJlclR5cGUiLCAiWm9kTnVtYmVyIiwgIm5hblR5cGUiLCAiWm9kTmFOIiwgImJpZ0ludFR5cGUiLCAiWm9kQmlnSW50IiwgImJvb2xlYW5UeXBlIiwgIlpvZEJvb2xlYW4iLCAiZGF0ZVR5cGUiLCAiWm9kRGF0ZSIsICJzeW1ib2xUeXBlIiwgIlpvZFN5bWJvbCIsICJ1bmRlZmluZWRUeXBlIiwgIlpvZFVuZGVmaW5lZCIsICJudWxsVHlwZSIsICJab2ROdWxsIiwgImFueVR5cGUiLCAiWm9kQW55IiwgInVua25vd25UeXBlIiwgIlpvZFVua25vd24iLCAibmV2ZXJUeXBlIiwgIlpvZE5ldmVyIiwgInZvaWRUeXBlIiwgIlpvZFZvaWQiLCAiYXJyYXlUeXBlIiwgIlpvZEFycmF5IiwgIm9iamVjdFR5cGUiLCAiWm9kT2JqZWN0IiwgInN0cmljdE9iamVjdFR5cGUiLCAidW5pb25UeXBlIiwgIlpvZFVuaW9uIiwgImRpc2NyaW1pbmF0ZWRVbmlvblR5cGUiLCAiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwgImludGVyc2VjdGlvblR5cGUiLCAiWm9kSW50ZXJzZWN0aW9uIiwgInR1cGxlVHlwZSIsICJab2RUdXBsZSIsICJyZWNvcmRUeXBlIiwgIlpvZFJlY29yZCIsICJtYXBUeXBlIiwgIlpvZE1hcCIsICJzZXRUeXBlIiwgIlpvZFNldCIsICJmdW5jdGlvblR5cGUiLCAiWm9kRnVuY3Rpb24iLCAibGF6eVR5cGUiLCAiWm9kTGF6eSIsICJsaXRlcmFsVHlwZSIsICJab2RMaXRlcmFsIiwgImVudW1UeXBlIiwgIlpvZEVudW0iLCAibmF0aXZlRW51bVR5cGUiLCAiWm9kTmF0aXZlRW51bSIsICJwcm9taXNlVHlwZSIsICJab2RQcm9taXNlIiwgImVmZmVjdHNUeXBlIiwgIlpvZEVmZmVjdHMiLCAib3B0aW9uYWxUeXBlIiwgIlpvZE9wdGlvbmFsIiwgIm51bGxhYmxlVHlwZSIsICJab2ROdWxsYWJsZSIsICJwcmVwcm9jZXNzVHlwZSIsICJwaXBlbGluZVR5cGUiLCAiWm9kUGlwZWxpbmUiLCAib3N0cmluZyIsICJvbnVtYmVyIiwgIm9ib29sZWFuIiwgImNvZXJjZSIsICJhcmciLCAiTkVWRVIiLCAiSU5WQUxJRCIsICJMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTiIsICJTVVBQT1JURURfUFJPVE9DT0xfVkVSU0lPTlMiLCAiSlNPTlJQQ19WRVJTSU9OIiwgIlByb2dyZXNzVG9rZW5TY2hlbWEiLCAiZXh0ZXJuYWxfZXhwb3J0cyIsICJDdXJzb3JTY2hlbWEiLCAiQmFzZVJlcXVlc3RQYXJhbXNTY2hlbWEiLCAiUmVxdWVzdFNjaGVtYSIsICJCYXNlTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hIiwgIk5vdGlmaWNhdGlvblNjaGVtYSIsICJSZXN1bHRTY2hlbWEiLCAiUmVxdWVzdElkU2NoZW1hIiwgIkpTT05SUENSZXF1ZXN0U2NoZW1hIiwgIkpTT05SUENOb3RpZmljYXRpb25TY2hlbWEiLCAiSlNPTlJQQ1Jlc3BvbnNlU2NoZW1hIiwgIkVycm9yQ29kZSIsICJKU09OUlBDRXJyb3JTY2hlbWEiLCAiSlNPTlJQQ01lc3NhZ2VTY2hlbWEiLCAiRW1wdHlSZXN1bHRTY2hlbWEiLCAiQ2FuY2VsbGVkTm90aWZpY2F0aW9uU2NoZW1hIiwgIkltcGxlbWVudGF0aW9uU2NoZW1hIiwgIkNsaWVudENhcGFiaWxpdGllc1NjaGVtYSIsICJJbml0aWFsaXplUmVxdWVzdFNjaGVtYSIsICJTZXJ2ZXJDYXBhYmlsaXRpZXNTY2hlbWEiLCAiSW5pdGlhbGl6ZVJlc3VsdFNjaGVtYSIsICJJbml0aWFsaXplZE5vdGlmaWNhdGlvblNjaGVtYSIsICJQaW5nUmVxdWVzdFNjaGVtYSIsICJQcm9ncmVzc1NjaGVtYSIsICJQcm9ncmVzc05vdGlmaWNhdGlvblNjaGVtYSIsICJQYWdpbmF0ZWRSZXF1ZXN0U2NoZW1hIiwgIlBhZ2luYXRlZFJlc3VsdFNjaGVtYSIsICJSZXNvdXJjZUNvbnRlbnRzU2NoZW1hIiwgIlRleHRSZXNvdXJjZUNvbnRlbnRzU2NoZW1hIiwgIkJsb2JSZXNvdXJjZUNvbnRlbnRzU2NoZW1hIiwgIlJlc291cmNlU2NoZW1hIiwgIlJlc291cmNlVGVtcGxhdGVTY2hlbWEiLCAiTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEiLCAiTGlzdFJlc291cmNlc1Jlc3VsdFNjaGVtYSIsICJMaXN0UmVzb3VyY2VUZW1wbGF0ZXNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RSZXNvdXJjZVRlbXBsYXRlc1Jlc3VsdFNjaGVtYSIsICJSZWFkUmVzb3VyY2VSZXF1ZXN0U2NoZW1hIiwgIlJlYWRSZXNvdXJjZVJlc3VsdFNjaGVtYSIsICJSZXNvdXJjZUxpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hIiwgIlN1YnNjcmliZVJlcXVlc3RTY2hlbWEiLCAiVW5zdWJzY3JpYmVSZXF1ZXN0U2NoZW1hIiwgIlJlc291cmNlVXBkYXRlZE5vdGlmaWNhdGlvblNjaGVtYSIsICJQcm9tcHRBcmd1bWVudFNjaGVtYSIsICJQcm9tcHRTY2hlbWEiLCAiTGlzdFByb21wdHNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RQcm9tcHRzUmVzdWx0U2NoZW1hIiwgIkdldFByb21wdFJlcXVlc3RTY2hlbWEiLCAiVGV4dENvbnRlbnRTY2hlbWEiLCAiSW1hZ2VDb250ZW50U2NoZW1hIiwgIkVtYmVkZGVkUmVzb3VyY2VTY2hlbWEiLCAiUHJvbXB0TWVzc2FnZVNjaGVtYSIsICJHZXRQcm9tcHRSZXN1bHRTY2hlbWEiLCAiUHJvbXB0TGlzdENoYW5nZWROb3RpZmljYXRpb25TY2hlbWEiLCAiVG9vbFNjaGVtYSIsICJMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RUb29sc1Jlc3VsdFNjaGVtYSIsICJDYWxsVG9vbFJlc3VsdFNjaGVtYSIsICJDb21wYXRpYmlsaXR5Q2FsbFRvb2xSZXN1bHRTY2hlbWEiLCAiQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hIiwgIlRvb2xMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSIsICJMb2dnaW5nTGV2ZWxTY2hlbWEiLCAiU2V0TGV2ZWxSZXF1ZXN0U2NoZW1hIiwgIkxvZ2dpbmdNZXNzYWdlTm90aWZpY2F0aW9uU2NoZW1hIiwgIk1vZGVsSGludFNjaGVtYSIsICJNb2RlbFByZWZlcmVuY2VzU2NoZW1hIiwgIlNhbXBsaW5nTWVzc2FnZVNjaGVtYSIsICJDcmVhdGVNZXNzYWdlUmVxdWVzdFNjaGVtYSIsICJDcmVhdGVNZXNzYWdlUmVzdWx0U2NoZW1hIiwgIlJlc291cmNlUmVmZXJlbmNlU2NoZW1hIiwgIlByb21wdFJlZmVyZW5jZVNjaGVtYSIsICJDb21wbGV0ZVJlcXVlc3RTY2hlbWEiLCAiQ29tcGxldGVSZXN1bHRTY2hlbWEiLCAiUm9vdFNjaGVtYSIsICJMaXN0Um9vdHNSZXF1ZXN0U2NoZW1hIiwgIkxpc3RSb290c1Jlc3VsdFNjaGVtYSIsICJSb290c0xpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hIiwgIkNsaWVudFJlcXVlc3RTY2hlbWEiLCAiQ2xpZW50Tm90aWZpY2F0aW9uU2NoZW1hIiwgIkNsaWVudFJlc3VsdFNjaGVtYSIsICJTZXJ2ZXJSZXF1ZXN0U2NoZW1hIiwgIlNlcnZlck5vdGlmaWNhdGlvblNjaGVtYSIsICJTZXJ2ZXJSZXN1bHRTY2hlbWEiLCAiTWNwRXJyb3IiLCAiY29kZSIsICJtZXNzYWdlIiwgImRhdGEiLCAiREVGQVVMVF9SRVFVRVNUX1RJTUVPVVRfTVNFQyIsICJQcm90b2NvbCIsICJfb3B0aW9ucyIsICJDYW5jZWxsZWROb3RpZmljYXRpb25TY2hlbWEiLCAibm90aWZpY2F0aW9uIiwgImNvbnRyb2xsZXIiLCAiUHJvZ3Jlc3NOb3RpZmljYXRpb25TY2hlbWEiLCAiUGluZ1JlcXVlc3RTY2hlbWEiLCAiX3JlcXVlc3QiLCAidHJhbnNwb3J0IiwgImVycm9yIiwgIm1lc3NhZ2UiLCAicmVzcG9uc2VIYW5kbGVycyIsICJfYSIsICJNY3BFcnJvciIsICJFcnJvckNvZGUiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgIl9iIiwgImFib3J0Q29udHJvbGxlciIsICJyZXN1bHQiLCAicHJvZ3Jlc3MiLCAidG90YWwiLCAicHJvZ3Jlc3NUb2tlbiIsICJyZXNwb25zZSIsICJtZXNzYWdlSWQiLCAicmVzdWx0U2NoZW1hIiwgIm9wdGlvbnMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAianNvbnJwY1JlcXVlc3QiLCAidGltZW91dElkIiwgImNhbmNlbCIsICJyZWFzb24iLCAiX2MiLCAidGltZW91dCIsICJfZCIsICJqc29ucnBjTm90aWZpY2F0aW9uIiwgInJlcXVlc3RTY2hlbWEiLCAibWV0aG9kIiwgImV4dHJhIiwgIm5vdGlmaWNhdGlvblNjaGVtYSIsICJTZXJ2ZXIiLCAiUHJvdG9jb2wiLCAiX3NlcnZlckluZm8iLCAib3B0aW9ucyIsICJJbml0aWFsaXplUmVxdWVzdFNjaGVtYSIsICJyZXF1ZXN0IiwgIkluaXRpYWxpemVkTm90aWZpY2F0aW9uU2NoZW1hIiwgIl9hIiwgIm1ldGhvZCIsICJfYiIsICJyZXF1ZXN0ZWRWZXJzaW9uIiwgIlNVUFBPUlRFRF9QUk9UT0NPTF9WRVJTSU9OUyIsICJMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTiIsICJFbXB0eVJlc3VsdFNjaGVtYSIsICJwYXJhbXMiLCAiQ3JlYXRlTWVzc2FnZVJlc3VsdFNjaGVtYSIsICJMaXN0Um9vdHNSZXN1bHRTY2hlbWEiLCAicHJvY2VzcyIsICJSZWFkQnVmZmVyIiwgImNodW5rIiwgImluZGV4IiwgImxpbmUiLCAiZGVzZXJpYWxpemVNZXNzYWdlIiwgIkpTT05SUENNZXNzYWdlU2NoZW1hIiwgInNlcmlhbGl6ZU1lc3NhZ2UiLCAibWVzc2FnZSIsICJTdGRpb1NlcnZlclRyYW5zcG9ydCIsICJfc3RkaW4iLCAicHJvY2VzcyIsICJfc3Rkb3V0IiwgIlJlYWRCdWZmZXIiLCAiY2h1bmsiLCAiZXJyb3IiLCAiX2EiLCAibWVzc2FnZSIsICJfYiIsICJyZXNvbHZlIiwgImpzb24iLCAic2VyaWFsaXplTWVzc2FnZSIsICJ0b29sc19leHBvcnRzIiwgIl9fZXhwb3J0IiwgImdldEFnZW50IiwgImdldERlcGxveW1lbnRTdGF0dXMiLCAibGlzdEFnZW50cyIsICJsaXN0UHJpbWl0aXZlVmVyc2lvbnMiLCAidGFpbExvZ3MiLCAic3Bhd24iLCAiREVGQVVMVF9USU1FT1VUX01TIiwgInJ1bkx1YSIsICJhcmdzIiwgInNwYXduRm4iLCAidGltZW91dE1zIiwgImxhYmVsIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImNoaWxkIiwgInN0ZG91dCIsICJzdGRlcnIiLCAiZCIsICJ0aW1lciIsICJjb2RlIiwgImVyciIsICJmbGF0dGVuQWdlbnRzIiwgInBhcnNlZCIsICJvYmoiLCAiZW50cmllcyIsICJvcmciLCAiYSIsICJsaXN0QWdlbnRzVmlhQ2xpIiwgImxpc3RBZ2VudHMiLCAiX2FyZ3MiLCAiZGVwcyIsICJjb21wYWN0IiwgImxpc3RBZ2VudHNWaWFDbGkiLCAiZ2V0QWdlbnQiLCAiYWdlbnRJZCIsICJkZXBzIiwgIm1hdGNoIiwgImxpc3RBZ2VudHNWaWFDbGkiLCAiYSIsICJyZWFkRmlsZSIsICJyZWFkZGlyIiwgInN0YXQiLCAiam9pbiIsICJkaXJuYW1lIiwgImhvbWVkaXIiLCAiREVGQVVMVF9BUElfVVJMIiwgIkZJUkVCQVNFX1JFRlJFU0hfVVJMIiwgIlJFRlJFU0hfVElNRU9VVF9NUyIsICJSRUZSRVNIX1NLRVdfTVMiLCAiUkVKRUNURURfUkVGUkVTSF9SRUFTT05TIiwgInRva2VuQ2FjaGUiLCAicGFyc2VEb3RlbnZBcGlLZXkiLCAiY29udGVudCIsICJyYXdMaW5lIiwgIm0iLCAidmFsdWUiLCAicXVvdGVkIiwgImZpbmRTZXNzaW9uRmlsZSIsICJzZXNzaW9uc0RpciIsICJhcGlVcmwiLCAibmFtZXMiLCAicmVhZGRpciIsICJjYW5kaWRhdGVzIiwgIm5hbWUiLCAicGF0aCIsICJqb2luIiwgInNlc3Npb24iLCAicmVhZEZpbGUiLCAibXRpbWVNcyIsICJzdGF0IiwgImEiLCAiYiIsICJyZWZyZXNoU2Vzc2lvbkJlYXJlciIsICJmZXRjaEZuIiwgIm5vdyIsICJjYWNoZWQiLCAidG9rZW5DYWNoZSIsICJSRUZSRVNIX1NLRVdfTVMiLCAiY29udHJvbGxlciIsICJ0aW1lciIsICJSRUZSRVNIX1RJTUVPVVRfTVMiLCAicmVzIiwgIkZJUkVCQVNFX1JFRlJFU0hfVVJMIiwgImVyciIsICJyZWFzb24iLCAibWVzc2FnZSIsICJyZWplY3RlZCIsICJSRUpFQ1RFRF9SRUZSRVNIX1JFQVNPTlMiLCAiciIsICJib2R5IiwgImlkVG9rZW4iLCAiZXhwaXJlc0luIiwgInJlc29sdmVBcGlLZXkiLCAiZW52IiwgImNyZWRlbnRpYWxzUGF0aCIsICJob21lZGlyIiwgImRpcm5hbWUiLCAiY3dkIiwgIkRFRkFVTFRfQVBJX1VSTCIsICJmcm9tRG90ZW52IiwgImZvdW5kIiwgInJhdyIsICJwYXJzZWQiLCAiREVGQVVMVF9CQVNFX1VSTCIsICJERUZBVUxUX1RJTUVPVVRfTVMiLCAiUk9VVEVfU0NPUEVTIiwgIlJPVVRFX1NDT1BFX1NVTU1BUlkiLCAiYXBpUmVxdWVzdCIsICJwYXRoIiwgIm1ldGhvZCIsICJib2R5IiwgInF1ZXJ5IiwgImZldGNoRm4iLCAiYmFzZVVybCIsICJ0aW1lb3V0TXMiLCAiYXBpS2V5IiwgInJlc29sdmVBcGlLZXkiLCAidXJsIiwgImsiLCAidiIsICJjb250cm9sbGVyIiwgInRpbWVyIiwgInJlcyIsICJyYXciLCAiZnJpZW5kbHlNc2ciLCAicGFyc2VkIiwgImNvZGUiLCAiZXJyIiwgIkxJU1RfRVhUUkFDVE9SUyIsICJWRVJTSU9OU19FWFRSQUNUT1JTIiwgIkxJU1RfUEFUSFMiLCAiZXh0cmFjdExpc3QiLCAidHlwZSIsICJyZXNwb25zZSIsICJmbiIsICJleHRyYWN0VmVyc2lvbnMiLCAiZXh0cmFjdEFjdGl2ZVZlcnNpb25JZCIsICJpZCIsICJpc0FjdGl2ZVZlcnNpb24iLCAidmVyc2lvbiIsICJhY3RpdmVJZCIsICJvd25JZCIsICJ2ZXJzaW9uQ3JlYXRlZEF0IiwgInJhdyIsICJ2ZXJzaW9uSWQiLCAiU1VQUE9SVEVEX0xJU1RfVFlQRVMiLCAiU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMiLCAiVkFMSURfVFlQRVMiLCAiU1VQUE9SVEVEX1ZFUlNJT05fVFlQRVMiLCAibGlzdFByaW1pdGl2ZVZlcnNpb25zIiwgImFnZW50SWQiLCAidHlwZSIsICJuYW1lIiwgImRlcHMiLCAicGF0aCIsICJpZCIsICJyZXNvbHZlTmFtZVRvSWQiLCAiTElTVF9QQVRIUyIsICJkYXRhIiwgImFwaVJlcXVlc3QiLCAiY29tcGFjdCIsICJleHRyYWN0VmVyc2lvbnMiLCAidiIsICJ2ZXJzaW9uSWQiLCAiaXNBY3RpdmVWZXJzaW9uIiwgInZlcnNpb25DcmVhdGVkQXQiLCAicmVzdWx0IiwgImV4dHJhY3RBY3RpdmVWZXJzaW9uSWQiLCAiZmV0Y2hGbiIsICJsaXN0UGF0aCIsICJsaXN0UmVzcG9uc2UiLCAiaXRlbXMiLCAiZXh0cmFjdExpc3QiLCAibWF0Y2giLCAicCIsICJhdmFpbGFibGUiLCAiUFJJTUlUSVZFX1RZUEVTIiwgIlZFUlNJT05TX0NIVU5LX1NJWkUiLCAiREVGQVVMVF9CVURHRVRfTVMiLCAiZ2V0RGVwbG95bWVudFN0YXR1cyIsICJhZ2VudElkIiwgImRlcHMiLCAiaWQiLCAiYnVkZ2V0TXMiLCAic3RhcnRlZEF0IiwgIm92ZXJCdWRnZXQiLCAiZ2V0IiwgInBhdGgiLCAiYXBpUmVxdWVzdCIsICJyZXN1bHQiLCAidHlwZSIsICJwZXJzb25hT3V0Y29tZSIsICJsaXN0T3V0Y29tZXMiLCAiTElTVF9QQVRIUyIsICJwZXJzb25hUmVzcG9uc2UiLCAidmVyc2lvbnMiLCAiZXh0cmFjdFZlcnNpb25zIiwgImFjdGl2ZSIsICJ2IiwgImlzQWN0aXZlVmVyc2lvbiIsICJ2ZXJzaW9uQ3JlYXRlZEF0IiwgImJ1ZGdldEV4aGF1c3RlZCIsICJza2lwcGVkIiwgInRvdGFsIiwgInQiLCAib3V0Y29tZSIsICJ0YXJnZXRzIiwgImV4dHJhY3RMaXN0IiwgInAiLCAidGd0IiwgImkiLCAiY2h1bmsiLCAibmFtZSIsICJwcmltSWQiLCAidm8iLCAiaiIsICJ2ZXJzaW9uc1Jlc3BvbnNlIiwgImVudHJ5IiwgInZlcnNpb25JZCIsICJleHRyYWN0QWN0aXZlVmVyc2lvbklkIiwgIkxPR19TT1VSQ0VTIiwgIkxPR19UWVBFUyIsICJWQUxJRF9UWVBFUyIsICJWQUxJRF9MT0dfVFlQRVMiLCAidGFpbExvZ3MiLCAiYWdlbnRJZCIsICJ0eXBlIiwgIm5hbWUiLCAibG9nVHlwZSIsICJsaW1pdCIsICJwYWdlIiwgImRlcHMiLCAicXVlcnkiLCAiZGF0YSIsICJhcGlSZXF1ZXN0IiwgIlRPT0xfUkVHSVNUUlkiLCAidG9vbHNfZXhwb3J0cyIsICJzZXJ2ZXIiLCAiU2VydmVyIiwgIkxpc3RUb29sc1JlcXVlc3RTY2hlbWEiLCAidCIsICJDYWxsVG9vbFJlcXVlc3RTY2hlbWEiLCAicmVxIiwgInRvb2wiLCAiZXJyIiwgInJlcG9ydENyYXNoQW5kRXhpdCIsICJwYXlsb2FkIiwgInJlYXNvbiIsICJTdGRpb1NlcnZlclRyYW5zcG9ydCJdCn0K diff --git a/plugins/lua-agent-builder/mcp/lua-platform/package-lock.json b/plugins/lua-agent-builder/mcp/lua-platform/package-lock.json index f8427fe..39ca446 100644 --- a/plugins/lua-agent-builder/mcp/lua-platform/package-lock.json +++ b/plugins/lua-agent-builder/mcp/lua-platform/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lua/claude-plugin-mcp", - "version": "1.12.0", + "version": "1.13.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lua/claude-plugin-mcp", - "version": "1.12.0", + "version": "1.13.0", "dependencies": { "@modelcontextprotocol/sdk": "~0.6.0" }, diff --git a/plugins/lua-agent-builder/mcp/lua-platform/package.json b/plugins/lua-agent-builder/mcp/lua-platform/package.json index a963d47..e6e2761 100644 --- a/plugins/lua-agent-builder/mcp/lua-platform/package.json +++ b/plugins/lua-agent-builder/mcp/lua-platform/package.json @@ -1,6 +1,6 @@ { "name": "@lua/claude-plugin-mcp", - "version": "1.12.0", + "version": "1.13.0", "description": "Read-only MCP server for the lua-agent-builder Claude Code plugin", "type": "module", "main": "dist/server.js", diff --git a/plugins/lua-agent-builder/mcp/lua-platform/src/api-client.mjs b/plugins/lua-agent-builder/mcp/lua-platform/src/api-client.mjs index c45ca3d..699622e 100644 --- a/plugins/lua-agent-builder/mcp/lua-platform/src/api-client.mjs +++ b/plugins/lua-agent-builder/mcp/lua-platform/src/api-client.mjs @@ -69,7 +69,7 @@ export async function apiRequest(path, { headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', - 'X-Lua-Client': 'claude-plugin/1.12.0', + 'X-Lua-Client': 'claude-plugin/1.13.0', }, body: body ? JSON.stringify(body) : undefined, signal: controller.signal, diff --git a/plugins/lua-agent-builder/mcp/lua-platform/src/server.mjs b/plugins/lua-agent-builder/mcp/lua-platform/src/server.mjs index 36d2729..d68aec5 100644 --- a/plugins/lua-agent-builder/mcp/lua-platform/src/server.mjs +++ b/plugins/lua-agent-builder/mcp/lua-platform/src/server.mjs @@ -11,7 +11,7 @@ import * as tools from './tools/index.mjs'; const TOOL_REGISTRY = Object.values(tools); const server = new Server( - { name: 'lua-platform', version: '1.12.0' }, + { name: 'lua-platform', version: '1.13.0' }, { capabilities: { tools: {} } } ); @@ -46,7 +46,7 @@ process.on('uncaughtException', (err) => { kind: 'uncaughtException', message: err?.message, stack: err?.stack, - plugin_version: '1.12.0', + plugin_version: '1.13.0', lua_cli_version: process.env.LUA_CLI_VERSION ?? null, platform: process.platform, ts: new Date().toISOString(), @@ -59,7 +59,7 @@ process.on('unhandledRejection', (reason) => { kind: 'unhandledRejection', reason: String(reason), stack: /** @type {any} */ (reason)?.stack, - plugin_version: '1.12.0', + plugin_version: '1.13.0', lua_cli_version: process.env.LUA_CLI_VERSION ?? null, platform: process.platform, ts: new Date().toISOString(), diff --git a/plugins/lua-agent-builder/package.json b/plugins/lua-agent-builder/package.json index 20dc2df..3a90000 100644 --- a/plugins/lua-agent-builder/package.json +++ b/plugins/lua-agent-builder/package.json @@ -1,6 +1,6 @@ { "name": "claude-code-lua-plugin", - "version": "1.12.0", + "version": "1.13.0", "description": "Plugin assets for the lua-agent-builder Claude Code plugin", "private": true, "type": "module", diff --git a/plugins/lua-agent-builder/scripts/lint-knowledge-commands.mjs b/plugins/lua-agent-builder/scripts/lint-knowledge-commands.mjs index 16ef454..7b6b863 100644 --- a/plugins/lua-agent-builder/scripts/lint-knowledge-commands.mjs +++ b/plugins/lua-agent-builder/scripts/lint-knowledge-commands.mjs @@ -101,7 +101,7 @@ setSub('test', ['skill', 'webhook', 'job', 'preprocessor', 'postprocesso setSub('push', ['skill', 'agent', 'persona', 'webhook', 'trigger', 'job', 'preprocessor', 'postprocessor', 'mcp', 'device', 'device-trigger', 'voice', 'workflow', 'webapp', 'decision', 'backup', 'all']); // lua-cli 3.42.0 (Lua Apps): scaffold and run a web app. -setSub('apps', ['new', 'dev']); +setSub('apps', ['new', 'dev', 'preview', 'delete']); // preview: lua-cli 3.51.0, delete: 3.48.0 setSub('deploy', ['skill', 'webhook', 'trigger', 'job', 'preprocessor', 'postprocessor', 'webapp', 'persona', 'all']); // webapp: lua-cli 3.49.0 setSub('env', ['sandbox', 'staging', 'production']); setSub('persona', ['sandbox', 'staging', 'production']);